【視頻】逆變換抽樣將數(shù)據(jù)標準化和R語言結構化轉換:BOX-COX、凸規(guī)則變換方法
全文鏈接:http://tecdat.cn/?p=22251 ?
原文出處:拓端數(shù)據(jù)部落公眾號
歸一化數(shù)據(jù)是數(shù)據(jù)科學中的一項常見任務。有時它可以讓我們加快梯度下降的速度或提高模型的準確性,在某些情況下,它絕對是至關重要的。
【視頻】逆變換抽樣將數(shù)據(jù)標準化和R語言結構化轉換:BOX-COX、凸規(guī)則變換方法
逆變換抽樣將數(shù)據(jù)標準化和R語言結構化轉換:BOX-COX、凸規(guī)則變換方法
一些歸一化技術,如取對數(shù),在大多數(shù)情況下可能有效,但在這種情況下,我決定嘗試對任何數(shù)據(jù)都有效的方法,不管它最初是如何分布的。我下面要介紹的方法是基于逆變換抽樣:主要思想是根據(jù)數(shù)據(jù)的統(tǒng)計特性,構造這樣的函數(shù)F,所以F(x)是正態(tài)分布。下面是如何做的。
我所說的算法是基于逆變換抽樣法。這種方法被廣泛用于偽隨機數(shù)生成器,從任何給定的分布中生成數(shù)字。有了均勻分布的數(shù)據(jù),你總是可以把它轉化為分布,有任何給定的累積密度函數(shù)(或簡稱CDF)。CDF顯示了分布的數(shù)據(jù)點中有多大比例小于給定值,基本上表示了分布的所有統(tǒng)計特性。
具有零平均數(shù)和單位方差的正態(tài)分布的CDF。它顯示,幾乎所有的點都大于-4,小于4,其中50%的點小于0
其主要思想是,對于任何連續(xù)分布的數(shù)據(jù)x?,CDF(x?)是均勻分布的。換句話說,要想得到均勻分布的數(shù)據(jù),只需取每個點的CDF。這句話的數(shù)學證明超出了本文的范圍,但是上述操作本質上只是對所有數(shù)值進行排序,并將每個數(shù)值替換為其數(shù)字,這給了它一個直觀的感覺。
將一些混亂的數(shù)據(jù)轉化為統(tǒng)一的數(shù)據(jù)
在上面的圖中,你可以看到它是如何工作的。我生成了一些混亂的分布數(shù)據(jù),然后計算了它的CDF(紅線),并用它轉換了數(shù)據(jù)?,F(xiàn)在數(shù)據(jù)是均勻分布的。
計算CDF比它看起來更容易。記住,CDF是比給定數(shù)據(jù)小的一部分。
一般來說,CDF是一個雙射函數(shù),這意味著轉換是可逆的。我們可以利用這一事實將得到的均勻分布轉化為我們想要的任何分布,例如正態(tài)分布。為了做到這一點,我們需要計算我們想得到的分布的反CDF。一般來說,這不是最簡單的任務。我們需要的函數(shù)被稱為百分點函數(shù),簡稱PPF。幸運的是,任何主要分布的PPF都可以通過SciPy庫獲得,人們不需要自己去計算它。
具有零平均數(shù)和單位方差的正態(tài)分布的PPF。它顯示第50個百分位數(shù)是0,超過60%的點位于-1和1之間。
下面是對它的解釋:對于0和1之間的任何參數(shù)x,PPF返回點適合x'th百分位的最大值。同時,作為CDF的反函數(shù),它看起來像第一張圖片中的函數(shù),只是旋轉了90°。
從均勻分布中獲得正態(tài)分布
現(xiàn)在我們有了一個漂亮的正態(tài)分布,如愿以償。最后,要做一個函數(shù)來轉換我們的初始數(shù)據(jù),我們所要做的就是把這兩個操作合并到一個函數(shù)中。
將初始雜亂的分布轉化為均值為零、方差為單位的正態(tài)分布
上圖中的紅線代表最終的變換函數(shù)。
請注意,最后的變換總是單調的。這意味著沒有兩個點在轉換后被調換。如果一個點的初始特征值大于另一個點的初始特征值,在轉換之后,轉換后的值對該點來說也會更大。這一事實使得該算法可以應用于數(shù)據(jù)科學任務。
總而言之,與更常見的方法不同,本文描述的算法不需要對初始分布進行任何假設。同時,輸出的數(shù)據(jù)極其精確地遵循正態(tài)分布。這種方法已被證明可以提高模型的準確性,這些模型假定輸入數(shù)據(jù)分布。
R語言進行數(shù)據(jù)結構化轉換:Box-Cox變換、“凸規(guī)則”變換方法
全文鏈接:http://tecdat.cn/?p=22251
原文出處:拓端數(shù)據(jù)部落公眾號
R語言進行數(shù)據(jù)結構化轉換:Box-Cox變換、“凸規(guī)則”變換方法
線性回歸時若數(shù)據(jù)不服從正態(tài)分布,會給線性回歸的最小二乘估計系數(shù)的結果帶來誤差,所以需要對數(shù)據(jù)進行結構化轉換。
在討論回歸模型中的變換時,我們通常會簡單地使用Box-Cox變換,或局部回歸和非參數(shù)估計。
這里的要點是,在標準線性回歸模型中,我們有
但是有時候,線性關系是不合適的。一種想法可以是轉換我們要建模的變量,然后考慮
這就是我們通常使用Box-Cox變換進行的操作。另一個想法可以是轉換解釋變量,
例如,我們有時會考慮連續(xù)的分段線性函數(shù),也可以考慮多項式回歸。
“凸規(guī)則”變換
“凸規(guī)則”(Mosteller. F?and?Tukey, J.W. (1978).?Data?Analysis?and?Regression)的想法是,轉換時考慮不同的冪函數(shù)。
1.“凸規(guī)則”為糾正非線性的可能變換提供了一個起點。
2 .通常情況下,我們應該嘗試對解釋變量進行變換,而不是對因變量Y進行變換,因為Y的變換會影響Y與所有X的關系,而不僅僅是與非線性關系的關系
3.然而,如果因變量是高度傾斜的,那么將其轉換為以下變量是有意義的
更具體地說,我們將考慮線性模型。
根據(jù)回歸函數(shù)的形狀(上圖中的四個曲線,在四個象限中),將考慮不同的冪。
例如讓我們生成不同的模型,看看關聯(lián)散點圖。
> plot(MT(p=.5,q=2),main="(p=1/2,q=2)")
> plot(MT(p=3,q=-5),main="(p=3,q=-5)")
> plot(MT(p=.5,q=-1),main="(p=1/2,q=-1)")
> plot(MT(p=3,q=5),main="(p=3,q=5)")
如果我們考慮圖的左下角部分,要得到這樣的模式,我們可以考慮
或更一般地
其中
和都大于1.并且
越大,回歸曲線越凸。
讓我們可視化數(shù)據(jù)集上的雙重轉換,例如cars數(shù)據(jù)集。
> tukey=function(p=1,q=1){
+ regpq=lm(I(y^q)~I(x^p) )
+ u=seq(min(min( ?x)-2,.1),max( x)+2,length=501)
+ polygon(c(u,rev(u)),c(vic[,2],rev(vic[,3]))^(1/q)
+ lines(u,vic[,2]^(1/q)
+ plot(x^p, ?y^q )
+ polygon(c(u,rev(u))^p,c(vic[,2],rev(vic[,3])) )
+ lines(u^p,vic[,2])
例如,如果我們運行
> tukey(2,1)
我們得到如下圖,
左側是原始數(shù)據(jù)集,右側是經過轉換的數(shù)據(jù)集,
其中有兩種可能的轉換。在這里,我們只考慮了汽車速度的平方(這里只變換了一個分量)。在該轉換后的數(shù)據(jù)集上,我們運行標準線性回歸。我們在這里添加一個置信度。然后,我們考慮預測的逆變換。這條線畫在左邊。問題在于它不應該被認為是我們的最佳預測,因為它顯然存在偏差。請注意,在這里,有可能考慮另一種形狀相同但完全不同的變換
> tukey(1,.5)
Box-Cox變換?
當然,也可以使用Box-Cox變換。此外,還可以尋求最佳變換??紤]
> for(p in seq(.2,3,by=.1)) bc=cbind(bc,boxcox(y~I(x^p),lambda=seq(.1,3,by=.1))$y)
> contour(vp,vq,bc)
顏色越深越好(這里考慮的是對數(shù)似然)。 最佳對數(shù)在這里是
> bc=function(a){p=a[1];q=a[2]; (-boxcox(y~I(x^p),data=base,lambda=q)$y[50]
> optim(bc,method="L-BFGS-B")
實際上,我們得到的模型還不錯,
最受歡迎的見解
1.用R語言模擬混合制排隊隨機服務排隊系統(tǒng)
2.R語言中使用排隊論預測等待時間
3.R語言中實現(xiàn)馬爾可夫鏈蒙特卡羅MCMC模型
4.R語言中的馬爾科夫機制轉換(Markov regime switching)模型
5.matlab貝葉斯隱馬爾可夫hmm模型
6.用R語言模擬混合制排隊隨機服務排隊系統(tǒng)
7.Python基于粒子群優(yōu)化的投資組合優(yōu)化
8.R語言馬爾可夫轉換模型研究交通傷亡人數(shù)事故預測
9.用機器學習識別不斷變化的股市狀況——隱馬爾可夫模型的應用