sklearn文檔 — 1.1. 普通線性模型

原文章為scikit-learn中"用戶指南"-->"監(jiān)督學(xué)習(xí)的第一節(jié):Generalized Linear Models"######

下面是一組用在回歸中的方法,其預(yù)期的結(jié)果為各輸入變量的線性組合。在數(shù)學(xué)的概念里,如果** y 表示我們預(yù)測出的結(jié)果:

線性回歸的預(yù)測結(jié)果

在這一節(jié)中,我們定義向量
w = (w1, ..., wp) 系數(shù)(coef_) ,而 w0 截距(intercept_) **。如果要使用線性模型來進(jìn)行分類的話,可以查看下方的Logistic回歸

1.1.1. 普通最小二乘法(Ordinary Least Squares)#

Linear Regression 擬合一個帶有系數(shù)** w = (w1, ..., wp) **的線性模型去最小化其預(yù)測結(jié)果與實(shí)際結(jié)果的殘差平方和。它的公式為:

最小化殘差平方和的公式

普通最小二乘法的繪圖

Linear Regression 會接收其** fit 方法的數(shù)組X, y,并且在擬合后將其計(jì)算出的系數(shù) w 存放至其線性模型的 coef_ **屬性里:

>>> from sklearn import linear_model
>>> reg = linear_model.LinearRegression()
>>> reg.fit ([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
>>> reg.coef_
array([0.5,  0.5])

然而,OLS(普通最小二乘法)里面的系數(shù)估量器依賴于當(dāng)前的模型。當(dāng)模型與設(shè)計(jì)矩陣** X **存在近似線性相關(guān)的關(guān)系時,設(shè)計(jì)矩陣會變得趨近奇異,其結(jié)果是最小二乘法的估量器對觀察結(jié)果(估量結(jié)果)中出現(xiàn)的隨機(jī)錯誤會變得很敏感,以致于產(chǎn)生很大的方差。在這種情況下有幾率會出現(xiàn)多重共線性,例如,當(dāng)沒有經(jīng)過實(shí)驗(yàn)與設(shè)計(jì)(數(shù)據(jù))時所采集到的數(shù)據(jù)。

示例

1.1.1.1. OLS的復(fù)雜度##

這個方法通過X的奇異值分解來計(jì)算其最小二乘解。如果X是一個大小為(n, p)的矩陣,在假設(shè)** n ≥ p 的情況,其復(fù)雜度為 O(np^2) **。

1.1.2. 嶺回歸 (Ridge Regression)#

Ridge Regression通過對系數(shù)的大小添加一些懲罰以解決一些OLS(普通最小二乘法)的問題。通過嶺系數(shù)來最小化懲罰的殘差平方和。

嶺回歸的最小化公式

其中,α ≥ 0 是一個控制收縮量的復(fù)雜度參數(shù):α的值越大,收縮量的值也越大。因此系數(shù)對共線性變得更加魯棒。
嶺系數(shù)作為正則化函數(shù)

與其他線性模型一樣,會接收其** fit 方法的數(shù)組X, y,并且在擬合后將其計(jì)算出的系數(shù) w 存放至其線性模型的 coef_ **屬性里:

>>> from sklearn import linear_model
>>> reg = linear_model.Ridge (alpha = .5)
>>> reg.fit ([[0, 0], [0, 0], [1, 1]], [0, .1, 1]) 
Ridge(alpha=0.5, copy_X=True, fit_intercept=True, max_iter=None,
      normalize=False, random_state=None, solver='auto', tol=0.001)
>>> reg.coef_
array([0.34545455,  0.34545455])
>>> reg.intercept_ 
0.13636...

示例

1.1.2.1. 嶺的復(fù)雜度##

該方法與OLS有著相同的復(fù)雜度。

1.1.2.2. 設(shè)置正則化參數(shù):廣義交叉驗(yàn)證法##

RidgeCV實(shí)現(xiàn)了內(nèi)置對α參數(shù)交叉驗(yàn)證的嶺回歸。該對象的工作方式與GridSearchCV相同,除了它缺省為廣義交叉驗(yàn)證(GCV),其為留一法交叉驗(yàn)證的一種高效實(shí)現(xiàn):

>>> from sklearn import linear_model
>>> reg = linear_model.RidgeCV(alphas=[0.1, 1.0, 10.0])
>>> reg.fit([[0, 0], [0, 0], [1, 1]], [0, .1, 1])       
RidgeCV(alphas=[0.1, 1.0, 10.0], cv=None, fit_intercept=True, scoring=None,
    normalize=False)
>>> reg.alpha_                                      
0.1

參考資料

1.1.3. Lasso回歸分析#

Lasso是一個估量稀疏系數(shù)的線性模型。因?yàn)樗鼉A向于選擇具有比較少的參數(shù)值的解,所以它在一些特定的情況下很有用,因此可以有效的減少依賴的變量個數(shù)。因?yàn)檫@種特性,Lasso和其衍生算法都是壓縮感知領(lǐng)域的基石。在特定的情況下,他可以恢復(fù)特定非零權(quán)重的集合(可以查看Compressive sensing: tomography reconstruction with L1 prior (Lasso))。
在數(shù)學(xué)概念上,它是由經(jīng)過** L1 作為正則化參數(shù)先驗(yàn)后的一個線性模型組成。它的最小化公式為:

Lasso的最小化公式

Lasso估量在添加了
α || ω ||1后,其中 α 是為常數(shù)且 || ω ||1 L1范數(shù) **的參數(shù)向量時,其能夠最小化最小二乘法的懲罰。
Lasso的實(shí)例使用坐標(biāo)下降法去擬合其系數(shù)。若要查看另一種實(shí)現(xiàn),可以參考最小角回歸

>>> from sklearn import linear_model
>>> reg = linear_model.Lasso(alpha = 0.1)
>>> reg.fit([[0, 0], [1, 1]], [0, 1])
Lasso(alpha=0.1, copy_X=True, fit_intercept=True, max_iter=1000,
   normalize=False, positive=False, precompute=False, random_state=None,
   selection='cyclic', tol=0.0001, warm_start=False)
>>> reg.predict([[1, 1]])
array([0.8])

lasso_path很適用于低維的任務(wù),其會沿著所有的可能值路徑來計(jì)算出系數(shù)。

示例

注釋: Lasso的特征選擇
因?yàn)長asso回歸會產(chǎn)生出稀疏模型,所以它可以用來作為特征選擇,在基于L1的特征選擇可以查看其處理細(xì)節(jié)。

注釋: 隨機(jī)稀疏
對于特征選擇或稀疏恢復(fù),使用 Randomized sparse models 可能會更好。

1.1.3.1. 設(shè)置正則化參數(shù)##

**α **參數(shù)控制了估量器系數(shù)的稀疏程度。

1.1.3.1.1. 使用交叉驗(yàn)證###

scikit-learn的 LassoCV
LassoLarsCV
可以通過其對象的交叉驗(yàn)證來設(shè)置Lasso的** α 參數(shù):。LassoLarsCV
是基于下面所解釋的最小角回歸算法來實(shí)現(xiàn)的。
對于帶有許多共線性回歸的高維度數(shù)據(jù)集,LassoCV
可以說是最適合的。但LassoLarsCV
卻對揭露
α **參數(shù)的相關(guān)值有優(yōu)點(diǎn),并且如果樣本的數(shù)量與觀察數(shù)量相比非常小的話,其處理速度要遠(yuǎn)遠(yuǎn)快于 LassoCV

Lasso中,每個折疊上的均方誤差:坐標(biāo)下降

Lasso中,每個折疊上的均方誤差:最小角回歸

1.1.3.1.2. 基于模型選擇的信息準(zhǔn)則##

LassoLarsIC
估量器建議使用赤池信息準(zhǔn)則(AIC)和貝葉斯信息準(zhǔn)則(BIC)。當(dāng)使用K層交叉檢驗(yàn)時,由于正則化路徑僅僅只計(jì)算一次而不是K + 1次,所以這是一種更節(jié)省的替代方案去獲取** α **的最優(yōu)值。然而, 許多準(zhǔn)則需要對解決方案中存在對自由度的適當(dāng)估量結(jié)果,即為在假設(shè)模型是正確的,且計(jì)算數(shù)據(jù)確實(shí)是由該模型生成的情況下,針對大樣本(漸近結(jié)果)導(dǎo)出的估計(jì)結(jié)果,不過當(dāng)條件處于失衡狀態(tài)時(特征數(shù)大于樣本數(shù)),它們卻傾向于打破此準(zhǔn)則。

基于模型選擇的信息準(zhǔn)則

示例

1.1.4. 多任務(wù)Lasso回歸分析#

MultiTaskLasso
是一個用于在多重回歸問題中估量稀疏系數(shù)的線性模型,其** y 是一個二維數(shù)組,即形狀 (n_samples, n_tasks) **。這個約束的所選特征對于所有回歸問題都是一樣的,統(tǒng)稱為任務(wù)。
下面各圖比較了簡單Lasso與多任務(wù)Lasso的W中非零的位置情況。Lasso估量器產(chǎn)生了分散的非零,而多任務(wù)Lasso則是完整的列。

多任務(wù)Lasso與簡單Lasso的對比圖A

多任務(wù)Lasso與簡單Lasso的對比圖B

在擬合時間序列模型時,需強(qiáng)制任何活動特征始終處于活動狀態(tài)。

示例

在數(shù)學(xué)概念上,其包含了一個經(jīng)過混合L1,L2范數(shù)訓(xùn)練出的線性模型。其最小化函數(shù)為:

多任務(wù)Lasso的最小化函數(shù)公式

其中** Fro **表示弗羅貝尼烏斯范數(shù):
弗羅貝尼烏斯范數(shù)

且L1,L2:
L1,L2范數(shù)

在類MultiTaskLasso
的實(shí)現(xiàn)里,其使用了坐標(biāo)下降算法去擬合其系數(shù)。

1.1.5. 彈性網(wǎng)絡(luò)#

ElasticNet
是一個使用L1和L2范數(shù)進(jìn)行先驗(yàn)訓(xùn)練出的線性回歸模型。這種組合允許學(xué)習(xí)稀疏模型,例如Lasso這樣在權(quán)重中帶有少量非零項(xiàng)的,同時也能像般保留其正規(guī)化的特性。我們可以通過使用** l1_ratio 參數(shù)來控制L1和L2的凸組合。
當(dāng)存在互相依賴的多重特征時,彈性網(wǎng)絡(luò)很適合應(yīng)用在這種情況。Lasso傾向于隨機(jī)的取出其中一項(xiàng),而彈性網(wǎng)絡(luò)則傾向于一組一組來取出。
這種在Lasso與嶺的折中辦法是它允許彈性網(wǎng)絡(luò)繼承一些嶺在旋轉(zhuǎn)下的穩(wěn)定性。
其最小化公式如下:

彈性網(wǎng)絡(luò)的最小化公式

彈性網(wǎng)絡(luò)與Lasso的對比

ElasticNetCV
類可以通過交叉驗(yàn)證來設(shè)置
alpha(α) l1_ratio(ρ) **參數(shù)。

示例

1.1.6. 多任務(wù)彈性網(wǎng)絡(luò)#

MultiTaskElasticNet
是估計(jì)多重回歸問題中稀疏系數(shù)的一個彈性網(wǎng)絡(luò)模型。其** Y 是一個二維數(shù)組,即形狀 (n_samples, n_tasks) 。這個約束的所選特征對于所有回歸問題都是一樣的,統(tǒng)稱為任務(wù)。
在數(shù)學(xué)定義上,其是由混合了L1,L2范數(shù)且使用L2范數(shù)作為正規(guī)化參數(shù)訓(xùn)練出的一個線性模型。其最小化公式為:

多任務(wù)彈性網(wǎng)絡(luò)的最小化公式

在類MultiTaskElasticNet
的實(shí)現(xiàn)里,其使用了坐標(biāo)下降算法去擬合其系數(shù)。
MultiTaskElasticNet
類可以通過交叉驗(yàn)證來設(shè)置
alpha(α) l1_ratio(ρ) **參數(shù)。

1.1.7. 最小角回歸#

最小角回歸(LARS)是一種面向高維度數(shù)據(jù)由 Bradley Efron, Trevor Hastie, Iain Johnstone 和 Robert Tibshirani開發(fā)的一種回歸算法。
LARS的優(yōu)點(diǎn)有:

  • 在 p >> n 的情況下?lián)碛懈咝У挠?jì)算能力(即當(dāng)維度的數(shù)量明顯大于樣本點(diǎn)的數(shù)量)
  • 在計(jì)算速度上與前向選擇一樣快,并且具有與普通最小二乘法相同的復(fù)雜度。
  • 產(chǎn)生一個完整的分段線性求解路徑,其在交叉驗(yàn)證或類似的調(diào)整模型的行為上十分有效。
  • 如果兩個變量的響應(yīng)幾乎相等,那么其系數(shù)也有大致相同的增長速率。也因此該算法會表現(xiàn)的如同我們所期望般,并且也會更加穩(wěn)定。
  • 很容易為其他估量器產(chǎn)生解決解,例如Lasso。

當(dāng)然也有缺點(diǎn):

  • 因?yàn)長ARS是基于殘差的迭代重組,所以它會表現(xiàn)出對噪音的高度敏感。這個問題的討論細(xì)節(jié)于 Weisberg 在 Annals of Statistics article(2004) 中與 Efron 等人的討論部分。

LARM模型能夠使用 Lars
估量器,或者其低維的實(shí)現(xiàn)版本 lars_path

1.1.8.1 LARS Lasso#

LassoLars
是Lasso模型在引入了LARS算法后的一種新的實(shí)現(xiàn)。這不同于基于坐標(biāo)下降的實(shí)現(xiàn),它會產(chǎn)生一個精確的解,作為其系數(shù)的范數(shù)的分段線性函數(shù)。

LARS Lasso的路徑

>>> from sklearn import linear_model
>>> reg = linear_model.LassoLars(alpha=.1)
>>> reg.fit([[0, 0], [1, 1]], [0, 1])  
LassoLars(alpha=0.1, copy_X=True, eps=..., fit_intercept=True,
     fit_path=True, max_iter=500, normalize=True, positive=False,
     precompute='auto', verbose=False)
>>> reg.coef_    
array([0.717157...,  0. ])

示例

  • 使用LARS的Lasso路徑
    LARS算法幾乎完全提供了沿著正則化參數(shù)的系數(shù)的完整路徑,因此常見的操作是使用包括所有檢索的路徑的 lars_path
    函數(shù)。

1.1.8.1. 數(shù)學(xué)公式##

該算法類似前向逐步回歸,但不在每一個步驟中都包含了變量,估計(jì)出的參數(shù)在與殘差的每個相關(guān)的相同方向上增加。
LARS的解法是通過曲線表示參數(shù)向量的L1范數(shù)上每個值的解,而且不是輸出一個向量值。全關(guān)聯(lián)路徑通過排序后存儲進(jìn)** coef_path_ **數(shù)組里,其大小為(n_features, max_features + 1),并且其第一列的值始終為0。

引用

1.1.9. 正交匹配追蹤(OMP)#

OrthogonalMatchingPursuit
orthogonal_mp
實(shí)現(xiàn)了OMP算法去近似的擬合在非零系數(shù)的數(shù)量上有約束的線性模型(即存在L0 偽范數(shù))。
作為一個像 最小角回歸(LAR)的前向特征選擇算法,OMP可以在固定數(shù)量的非零元素下逼近最優(yōu)解向量:

OMP下對固定非零元素求最優(yōu)解

或者,OMP可以針對一個特定的誤差而不是固定數(shù)量的非零系數(shù)來求最優(yōu)解,這過程可以表達(dá)為:
OMP下對特定誤差求最優(yōu)解

OMP基于一個貪婪算法,使其能夠包含在每一步計(jì)算中與當(dāng)前殘差最相關(guān)的元素。這與簡單匹配追蹤(MP)有點(diǎn)相似,但是比這一點(diǎn)更好的是,在每一次迭代中,它都會在先前選擇出的字典元素空間中重新使用正交投影來計(jì)算殘差。

示例

引用

1.1.10 貝葉斯回歸#

貝葉斯回歸技術(shù)能夠在估量結(jié)果的過程中包含正規(guī)化的參數(shù):其正規(guī)化參數(shù)并不是預(yù)先設(shè)置好的,而是根據(jù)獲得的數(shù)據(jù)進(jìn)行調(diào)整。
這種特性可以通過在模型的超參數(shù)上引入無信息先驗(yàn)(uninformative priors)來完成。L2-正則化在嶺回歸里,用來在通過精度為** λ - 1 的高斯先驗(yàn)的參數(shù) ω 的情況下,為模型尋找一個最大歸納解,而不是手動設(shè)置一個 λ 值,所以視其在估量數(shù)據(jù)的過程中的一個隨機(jī)變量。
為了獲得一個完全概率模型,輸出值
γ 假定為 Χω **的高斯分布:

概率公式

**α **同樣可以視為在估量過程中的一個隨機(jī)變量。

貝葉斯回歸的優(yōu)點(diǎn)有:

  • 它是適配數(shù)據(jù)的;
  • 能夠在估量過程中包含正則化參數(shù)。

其缺點(diǎn)為:

  • 在推理模型的過程中可能很耗時。

引用

  • BishopChristopher M. Bishop 著的 《Pattern Recognition and Machine learning》 一書中關(guān)于貝葉斯的章節(jié)。
  • Radford M. Neal 著的 《Bayesian learning for neural networks》 一書中對原始算法的討論。

1.1.10.1 貝葉斯嶺回歸##

BayesianRidge
為估計(jì)上述章節(jié)說明的回歸問題的概率模型。其參數(shù)** ω 的先驗(yàn)值由球面高斯給出:

ω的先驗(yàn)概率

α λ 的先驗(yàn)是通過伽瑪分布決定的,即共軛先驗(yàn)的高斯精度。
其產(chǎn)生的模型被稱之為
貝葉斯嶺回歸
,并且其跟相似。參數(shù)
ω α λ 都是在擬合模型的過程中同步估計(jì)出的。而剩余的超參數(shù)則是 α λ **的先驗(yàn)參數(shù)。他們通常都是被選擇為無信息的,通過最大化邊際對數(shù)似然來估計(jì)參數(shù)。
在默認(rèn)情況下, ** α1 = α2 = λ1 = λ2 = 1.e^-6 **。
權(quán)重分布圖

以下是使用貝葉斯嶺回歸的例子:

>>> from sklearn import linear_model
>>> X = [[0., 0.], [1., 1.], [2., 2.], [3., 3.]]
>>> Y = [0., 1., 2., 3.]
>>> reg = linear_model.BayesianRidge()
>>> reg.fit(X, Y)
BayesianRidge(alpha_1=1e-06, alpha_2=1e-06, compute_score=False, copy_X=True,
       fit_intercept=True, lambda_1=1e-06, lambda_2=1e-06, n_iter=300,
       normalize=False, tol=0.001, verbose=False)

經(jīng)過擬合后,模型就可以用來預(yù)測數(shù)據(jù)了:

>>> reg.predict ([[1, 0.]])
array([0.50000013])

可以通過訪問模型的** coef_ 變量成員來獲取權(quán)重 ω **:

>>> reg.coef_
array([ 0.49999993,  0.49999993])

因?yàn)樨惾~斯的框架所致,用OLS和貝葉斯產(chǎn)生出來的模型的權(quán)重是不一樣的。但是貝葉斯嶺對此問題卻更健壯。

示例

引用

1.1.10.2. 自動相關(guān)決策 - ARD##

ARDRegression
貝葉斯嶺回歸 非常相似,除了它會導(dǎo)致產(chǎn)生的稀疏權(quán)重外[1][2]。
ARDRegression
在** ω 上給出了一個不同先驗(yàn),通過忽視高斯是球形的事實(shí),而是相假定分布為軸平行的橢圓高斯分布。
這意味著每個權(quán)重
ωi 都是由以零為中心,且精確度為 λ **的高斯分布中獲取的。

權(quán)重的高斯分布

其中
A的角度

相比 貝葉斯嶺回歸,每一個** ωi 的坐標(biāo)都有其標(biāo)準(zhǔn)差 λi 。所有 λi 的先驗(yàn)都是通過超參數(shù) λ1 λ2 **給出的一個相同的伽馬分布中獲取的。

ARD和OLS的權(quán)重對比圖

ARD在文獻(xiàn)中也被稱為稀疏貝葉斯學(xué)習(xí)相關(guān)向量機(jī)[3][4]。

示例

引用

  1. Christopher M. Bishop: Pattern Recognition and Machine Learning, Chapter 7.2.1
  2. David Wipf and Srikantan Nagarajan: A new view of automatic relevance determination
  3. Michael E. Tipping: Sparse Bayesian Learning and the Relevance Vector Machine
  4. Tristan Fletcher: Relevance Vector Machines explained

1.1.11. Logistic 回歸#

Logistic回歸,雖然他的名字帶有回歸,但是他是一個用來解決分類問題的線性模型。Logistic回歸在文獻(xiàn)里也被稱為Logit回歸,最大熵分類(MaxEnt)或?qū)?shù)線性分類器。在這個模型里,其概率為在單次試驗(yàn)中使用logistic函數(shù)生成的概率。
scikit-learn中的logistic回歸的實(shí)現(xiàn)為類 LogisticRegression
。這個實(shí)現(xiàn)能夠使用可選的L2或L1正則化來擬合二元問題,One-vs-Rest,或者多項(xiàng)式Logistic回歸。
在優(yōu)化方面,L2二元類通過懲罰logistic回歸來最小化下述的代價函數(shù):

Logistic的L2最小化

使用L1最小化的方法也是類似的:
Logistic的L1最小化

LogisticRegression
類中實(shí)現(xiàn)的解算器有“l(fā)iblinear”,“newton-cg”,“l(fā)bfgs”和“sag”:
"liblinear"使用坐標(biāo)下降(CD)算法并依賴于在scikit-learn內(nèi)的C++的優(yōu)秀類 LIBLINEAR library 實(shí)現(xiàn)的 。但是"liblinear"卻沒辦法學(xué)習(xí)多分類模型。但是對這個問題的替代方案是,使用"one-vs-rest"方式來把所有的分類分割成單獨(dú)的二元分類問題(即判斷一個東西為A,B還是C,可以對這個東西分別判斷A,B,C)。當(dāng)然這一處理過程是向使用者隱藏的,所以LogisticRegression
實(shí)例在默認(rèn)情況下是使用這一方式來作為求解器的。對于L1懲罰項(xiàng), sklearn.svm.l1_min_c
會計(jì)算C的下限以獲得一個非零模型(即防止所有特征權(quán)重值均為0)。
"lbfgs","sag"和"newton-cg"求解器只支持L2懲罰項(xiàng)且在對高維數(shù)據(jù)時有收斂更快的特性。可以通過在求解器設(shè)置** multi_class **為 "multinomial"使其能夠支持多元Logistic回歸模型[5],同時這樣做能夠使其比默認(rèn)的"one-vs-rest"設(shè)置上有著更好的準(zhǔn)確度。但"lbfgs","sag"和"newton-cg"求解器無法優(yōu)化帶有L1懲罰項(xiàng)的模型。
"sag"求解器使用一種叫隨機(jī)梯度下降的算法[6]。它在大型數(shù)據(jù)集下有著比其他模型更快的收斂速度,即在大量樣本數(shù)量和特征數(shù)量的情況下。

簡而言之,根據(jù)下面的規(guī)則可以選擇一個相對合適的求解器:

場景 求解器
比較小的數(shù)據(jù)集 或 使用了L1懲罰項(xiàng) "liblinear"
大型數(shù)據(jù)集 或 多項(xiàng)式損失 "lbfgs", "sag" 或 "newton-cg"
非常大型的數(shù)據(jù)集 "sag"

對于大型數(shù)據(jù)集,你或許會考慮使用帶有“l(fā)og”損失的SGDClassifier

示例

與liblinear的不同
在參數(shù) fit_intercept=False,在擬合** coef_ 或被預(yù)測的數(shù)據(jù)全為零的情況下,使用 solver=liblinearLogisticRegression
與直接使用外置的 liblinear 庫的 LinearSVC 的預(yù)測分?jǐn)?shù)可能會有一些不一樣。這是因?yàn)閷τ? decision_function 為零的樣本而言,LogisticRegression
LinearSVC 都是預(yù)測其負(fù)類,而 liblinear 卻預(yù)測其正類。不過要注意的是,
fit_intercept=False** 與 decision_function 為零的大量樣本的情況下,其很容易出現(xiàn)過擬合現(xiàn)象。所以建議你設(shè)置fit_intercept=True 并增加 intercept_scaling的值。

注釋:在稀疏Logistic回歸下的特征選擇
帶有L1懲罰項(xiàng)的Logistic回歸會產(chǎn)生稀疏模型,因此也能用來執(zhí)行特征選擇,在L1-based feature selection有其細(xì)節(jié)說明。

LogisticRegressionCV
實(shí)現(xiàn)了內(nèi)置交叉驗(yàn)證去尋找C的最優(yōu)值的Logistic回歸。“newton-cg”, “sag” 和 “l(fā)bfgs” 被發(fā)現(xiàn)在熱啟動下,對高維復(fù)雜數(shù)據(jù)有著很快的執(zhí)行速度。對于多元分類,如果** multi_class **被設(shè)置為 ** ovr ,那么則會為每一類尋找C的最優(yōu)值。如果 multi_class **被設(shè)置為 ** multinomial **,則會通過使交叉熵?fù)p失最小化來獲得C的最優(yōu)值。

引用

  1. Christopher M. Bishop: Pattern Recognition and Machine Learning, Chapter 4.3.4
  2. Mark Schmidt, Nicolas Le Roux, and Francis Bach: Minimizing Finite Sums with the Stochastic Average Gradient.

1.1.12 隨機(jī)梯度下降 - SGD#

隨機(jī)梯度下降是一種簡單但非常有效的擬合線性模型的方法,尤其是在樣本的數(shù)量(特征的數(shù)量)非常大的情況下。其** partial_fit 方法允許使用 only/out-of-core 學(xué)習(xí)。
SGDClassifier
SGDRegressor
類提供了在使用不同的(凸)損失函數(shù)與不同的懲罰項(xiàng)(例如
loss="log")的情況下去擬合分類與回歸的線性模型。 SGDClassifier
擬合出一個Logistic回歸模型,而當(dāng)
loss="hinge" **,它則可以擬合線性支持向量機(jī)(SVM)。

引用

1.1.14. Passive Aggressive 算法#

Passive Aggressive 算法是大規(guī)模學(xué)習(xí)算法中的算法族。它們類似于感知器,因此它們不需要學(xué)習(xí)速率。但不同于感知器,它們包含一個正則化參數(shù)** C
對于分類問題, 能夠使用設(shè)置為
loss='hinge' **(PA-I) 或 ** loss='squared_hinge' PassiveAggressiveClassifier
。對于回歸則可以使用設(shè)置為
loss='epsilon_insensitive' **(PA-I) 或 ** loss='squared_epsilon_insensitive' **(PA-II)。

引用

1.1.15. 穩(wěn)健回歸:異常值和建模誤差#

穩(wěn)健回歸能夠在有損壞的數(shù)據(jù)下擬合出一個回歸模型:異常值或模型中的誤差。


受損的y

1.1.15.1. 不同的場景和有用的概念##

在處理由異常值損壞的數(shù)據(jù)時有幾點(diǎn)我們需要注意:

  • 誤差值在 X 還是 y ?
誤差值在y 誤差值在X
誤差值在y
誤差值在X
  • 異常值的比值與誤差的幅度
小誤差 大誤差
小誤差
大誤差

穩(wěn)健擬合的一個重要概念是拋錨點(diǎn)(breakdown point):即模型會為了擬合外部的少量數(shù)據(jù),而開始丟失內(nèi)部的數(shù)據(jù)。
要時刻注意這一點(diǎn),穩(wěn)健回歸在擬合高維度的數(shù)據(jù)(大量的 n_feature)中的設(shè)置是很難的。所以在這種設(shè)置下穩(wěn)健模型可能不會進(jìn)行工作。

權(quán)衡:哪種估量器?
Scikit-learn提供了三種穩(wěn)健回歸估量器:RANSAC, Theil SenHuberRegressor

  • 除非樣本的數(shù)據(jù)量非常大,否則一般情況下 HuberRegressor 會比 RANSACTheil Sen 要快得多,即 ** 樣本數(shù)量 >> 特征數(shù)量**。這是因?yàn)?RANSACTheil Sen 是擬合數(shù)據(jù)集中的子集。
  • RANSACTheil Sen 要快,且會隨著樣本的數(shù)量增加而表現(xiàn)的更好。
  • RANSAC 在處理大量于 y 里的異常值(同時這也是異常值最普遍出現(xiàn)的形式)表現(xiàn)良好。
  • Theil Sen 能夠比較好的應(yīng)對于 X 里存在中等數(shù)量異常值的情況。但是這一特性會在高維中失效。
    也就是說,如果不知道要用那種估量器時,用 RANSAC 就對了。

1.1.15.2. RANSAC: 隨機(jī)抽樣一致##

RANSAC(隨機(jī)抽樣一致)從完整數(shù)據(jù)中的隨機(jī)子集來擬合模型。
RANSAC是一個非確定性算法他只會在一定概率下產(chǎn)生合理的結(jié)果,這概率取決于迭代的次數(shù)(可以通過** max_trals **參數(shù)設(shè)置)。其典型的應(yīng)用場景是用來解決線性與非線性回歸問題,并且它也在攝影測量計(jì)算機(jī)視覺領(lǐng)域中非常流行。
這個算法會把完整的輸入拆分成一個集合集,同時這也會使得在每個集合中多多少少受到噪音與異常值的影響。例如。由錯誤測量引起的噪音或由無效的假設(shè)所收集的數(shù)據(jù)。最終產(chǎn)生的模型也是根據(jù)集合來決定。


RANSAC回歸

1.1.15.2.1. 算法的細(xì)節(jié)###

該算法在每次迭代中都會執(zhí)行以下步驟:

  1. 從原始數(shù)據(jù)中選出** min_samples 個隨機(jī)樣本并且檢查數(shù)據(jù)集是否有效( is_data_valid **)。
  2. 根據(jù)隨機(jī)出來的子集進(jìn)行擬合。(base_estimator.fit),并且對估量出的模型進(jìn)行判斷其是否有效(is_model_valid)。
  3. 通過計(jì)算估量模型的殘差(base_estimator.predict(X) - y)將所有數(shù)據(jù)進(jìn)行分類(內(nèi)點(diǎn)與離群點(diǎn))。數(shù)據(jù)的殘差比** residual_threshold **要小的就作為內(nèi)點(diǎn)。
  4. 如果內(nèi)點(diǎn)樣本已達(dá)到最大值,就保存擬合后的模型為合適模型。以防止當(dāng)前估計(jì)出的模型擁有相同數(shù)量的內(nèi)點(diǎn)。不過如果模型的分?jǐn)?shù)更高也會被認(rèn)為是更好的模型。

這些步驟的最大執(zhí)行次數(shù)(max_trials)或直到滿足特殊停止條件之一(詳見** stop_n_inliers ** 和 ** stop_score**)后停止。最后會使用先前所有估計(jì)出的合適模型來驗(yàn)證所有內(nèi)點(diǎn)樣本來決定最合適的模型。

** is_data_valid ** 和 ** is_model_valid 函數(shù)允許用來識別和拒絕隨機(jī)子樣本的退化組合。如果估計(jì)出的模型不再需要鑒定退化樣本,那么就應(yīng)該在擬合模型之前調(diào)用is_data_valid**,使的模型能夠獲得一個更好的計(jì)算性能。

示例

引用

1.1.15.3. Theil-Sen估量器:普通中值估量器##

TheilSenRegressor 估量器使用了多維數(shù)據(jù)中的中值概括。因此對于有多變量異常值時仍舊是穩(wěn)健的。但無論如何都要注意的是,估量器的魯棒性會隨著問題的維度的增加而快速減少。所以在高維度的情況其在失去魯棒性的情況,并且效率可能還不如OLS高。

示例

引用

1.1.15.3.1. 理論限制###

TheilSenRegressor
作為一個無偏差值的估計(jì)器而言,在擬合效率上與OLS相似。與OLS相反,Theil-Sen是一個非參數(shù)方法,這意味著它不會對地底層分布的數(shù)據(jù)作任何假設(shè)。因?yàn)?* Theil-Sen **是一種基于中值的估量器,所以它對于損壞的數(shù)據(jù)更具魯棒。在單變量設(shè)置里,在簡單線性回歸的情況下Theil-Sen的擊破點(diǎn)率為29.3%,這意味著它可以容忍高達(dá)29.3%的任意損壞的數(shù)據(jù)。

受損y

在scikit-learn中,TheilSenRegressor
的實(shí)現(xiàn)是根據(jù)多元線性回歸的空間中值這一多維中值的概念[7][8]。

在時間和空間復(fù)雜度方面,Theil-Sen的尺度根據(jù)


Tenil-Sen的尺度

使得在大量數(shù)據(jù)與特征的情況下,不可能將所有的子集樣本應(yīng)用到該問題中。因此子集的量級可從考慮所有的隨機(jī)子集的集合來限制時間和空間復(fù)雜度。

示例

引用

  1. Xin Dang, Hanxiang Peng, Xueqin Wang and Heping Zhang: Theil-Sen Estimators in a Multiple Linear Regression Model.
  2. T. K?rkk?inen and S. ?yr?m?: On Computation of Spatial Median for Robust Data Mining.

1.1.15.4. Huber回歸##

HuberRegressor
Ridge
的不同在于前者應(yīng)用線性損失到樣本時,是將其歸類為異常值。樣本的分類為內(nèi)點(diǎn)是根據(jù)其的絕對錯誤是否低于一個確定的閾值。其跟 TheilSenRegressor
RANSACRegressor
不同之處在于它并不會忽略異常值,相反而是給予他們一個很小的權(quán)重值。

Huber與Ridge的對比

HuberRegressor
的最小化損失函數(shù)的公式為:

Huber的最小化損失公式

其中:


Huber的最小化損失公式中的H

建議設(shè)置參數(shù)** epsilon **的值為1.35以獲得95%統(tǒng)計(jì)效率。

1.1.15.5. 注意事項(xiàng)##

在損失設(shè)置上, HuberRegressor
SGDRegressor
的不同之處在于:

  • HuberRegressor
    是縮放不變的。當(dāng)** epsilon 被設(shè)置了后,通過任意值縮放 X y 都不會改成其異常值的魯棒性。而 SGDRegressor
    在縮放
    X y 后仍需要重新設(shè)置 epsilon **的值。
  • HuberRegressor
    能夠充分使用少量樣本的數(shù)據(jù),而 SGDRegressor
    為了產(chǎn)生一致的魯棒性則需要多次傳遞數(shù)據(jù)。

示例

引用

  • Peter J. Huber, Elvezio M. Ronchetti: Robust Statistics, Concomitant scale estimates, pg 172

同樣的,該估計(jì)器與R語言實(shí)現(xiàn)的穩(wěn)健回歸(http://www.ats.ucla.edu/stat/r/dae/rreg.htm)也是有不同的地方。因?yàn)镽語言的實(shí)現(xiàn)是基于加權(quán)最小二乘,根據(jù)殘差大于特定閾值多少來給予每個樣本的權(quán)重。

1.1.16 多項(xiàng)式回歸:擴(kuò)展具有基函數(shù)的線性模型#

一種常見的機(jī)器學(xué)習(xí)模式是使用數(shù)據(jù)的非線性函數(shù)的值(即不使用a,而是使用func(a)來代替a)去訓(xùn)練線性模型。這種方式能夠保持線性方法的運(yùn)行性能,也因此使其有能力去擬合更廣泛的數(shù)據(jù)。
舉個例子,一個簡單的線性回歸能夠通過在系數(shù)上構(gòu)造多項(xiàng)式特征來進(jìn)行擴(kuò)展。在標(biāo)準(zhǔn)的線性回歸案例,你可能會有一個像下面這樣的公式去擬合二維數(shù)據(jù)。


擬合二維數(shù)據(jù)的模型

如果我們想要擬合拋物面到數(shù)據(jù)而不是一個平面,我們可以結(jié)合一個二次多項(xiàng)式特征,所以現(xiàn)在我們的模型看起來是這樣子的:

結(jié)合過二次多項(xiàng)式的模型

雖然對這個模型進(jìn)行過處理,但是這個模型(可能會有點(diǎn)讓人驚訝)仍舊是一個線性模型:為了了解這一點(diǎn),想象一下創(chuàng)建一個新的變量向量
新變量Z

在數(shù)據(jù)進(jìn)行重標(biāo)簽后,我們的模型看起來是這樣的:
對數(shù)據(jù)重標(biāo)簽后的模型

我們可以知道這個多項(xiàng)式回歸與我們先前的設(shè)想一樣,跟線性模型是同一類的(即模式對** ω **是線性的),并且也可以通過相同(處理線性回歸)的技術(shù)去處理他。通過考慮在用這些基函數(shù)構(gòu)建的更高維空間內(nèi)的線性擬合,這個模型對擬合更廣泛的數(shù)據(jù)有具靈活。
這里是一個對單位數(shù)據(jù)上使用不同程度的多項(xiàng)式特征的例子:

各種多項(xiàng)式特征的對比

這個圖表是通過使用 PolynomialFeatures
預(yù)處理器生成的。這個預(yù)處理器轉(zhuǎn)換輸入的數(shù)據(jù)矩陣成為一個給定維度的新數(shù)據(jù)矩陣。使用方式如下:

>>> from sklearn.preprocessing import PolynomialFeatures
>>> import numpy as np
>>> X = np.arange(6).reshape(3, 2)
>>> X
array([[0, 1],
       [2, 3],
       [4, 5]])
>>> poly = PolynomialFeatures(degree=2)
>>> poly.fit_transform(X)
array([[  1.,   0.,   1.,   0.,   0.,   1.],
       [  1.,   2.,   3.,   4.,   6.,   9.],
       [  1.,   4.,   5.,  16.,  20.,  25.]])

**X 的特征已經(jīng)從 [x1, x2] 轉(zhuǎn)換成 [1, x1, x2, x1^2, x1x2, x2^2] **,并且能夠在任意的線性模型中使用它了。

這種預(yù)處理能夠在 Pipeline 工具下進(jìn)行流化。一個代表簡單多項(xiàng)式回歸的對象能夠以下面這種方式創(chuàng)建并使用:

>>> from sklearn.preprocessing import PolynomialFeatures
>>> from sklearn.linear_model import LinearRegression
>>> from sklearn.pipeline import Pipeline
>>> import numpy as np
>>> model = Pipeline([('poly', PolynomialFeatures(degree=3)),
...                   ('linear', LinearRegression(fit_intercept=False))])
>>> # fit to an order-3 polynomial data
>>> x = np.arange(5)
>>> y = 3 - 2 * x + x ** 2 - x ** 3
>>> model = model.fit(x[:, np.newaxis], y)
>>> model.named_steps['linear'].coef_
array([ 3., -2.,  1., -1.])

這個模型由多項(xiàng)式特征上訓(xùn)練而成,使得其能夠精確地恢復(fù)輸入的多項(xiàng)式系數(shù)。

在某些情況下是沒有必要去包含太重要的內(nèi)容在一個特征里,除了所謂在不同的特征(d)上互相關(guān)聯(lián)的交互特征。這些特征可以通過設(shè)置** interaction_only=True **的PolynomialFeatures
上獲得。

例如當(dāng)處理布爾特征時,對于所有的n而言,** xi^n = xi 是毫無作用的(因?yàn)榈扔诒旧矶沂遣紶柫浚5?/strong> xixj 卻代表了兩個布爾量之間的鏈接關(guān)系。根據(jù)這種關(guān)系,我們可以通過線性分類來解決異或問題**:

>>> from sklearn.linear_model import Perceptron
>>> from sklearn.preprocessing import PolynomialFeatures
>>> import numpy as np
>>> X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
>>> y = X[:, 0] ^ X[:, 1]
>>> y
array([0, 1, 1, 0])
>>> X = PolynomialFeatures(interaction_only=True).fit_transform(X).astype(int)
>>> X
array([[1, 0, 0, 0],
       [1, 0, 1, 0],
       [1, 1, 0, 0],
       [1, 1, 1, 1]])
>>> clf = Perceptron(fit_intercept=False, n_iter=10, shuffle=False).fit(X, y)

并且這個分類器的“預(yù)測”是完全正確的:

>>> clf.predict(X)
array([0, 1, 1, 0])
>>> clf.score(X, y)
1.0

(在嘗試翻譯這篇文檔的時候難免會因?yàn)楦鞣N問題而出現(xiàn)錯翻,如果發(fā)現(xiàn)的話,煩請指出,謝謝> <)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容