scikit-learn 線性模型

2023-02-20 13:36 更新

下面是一組用于回歸的方法, 其中目標(biāo)值是特征的線性組合。在數(shù)學(xué)表示法中,如果表示預(yù)測(cè)值,那么有:

在整個(gè)模型中, 我們定義向量 作為 coef_,定義作為 intercept_。

若需要使用廣義線性模型進(jìn)行分類, 請(qǐng)看 Logistic regression

1.1.1 普通最小二乘法

LinearRegression 是擬合一個(gè)帶有回歸系數(shù)的, 使得數(shù)據(jù)的實(shí)際觀測(cè)值和線性近似預(yù)測(cè)的預(yù)測(cè)值之間的殘差平方和最小的一個(gè)線性模型。數(shù)學(xué)上講,它解決了這個(gè)形式的問(wèn)題:

LinearRegression將采用它的 fit 方法去擬合數(shù)組 , ,并將線性模型的回歸系數(shù) 存儲(chǔ)在它的 coef_中:

>>> from sklearn import linear_model
>>> reg = linear_model.LinearRegression()
>>> reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
LinearRegression()
>>> reg.coef_
array([0.5, 0.5])

普通最小二乘的系數(shù)估計(jì)依賴于特征的獨(dú)立性。當(dāng)特征相關(guān)且設(shè)計(jì)矩陣的列之間具有近似線性相關(guān)性時(shí), 設(shè)計(jì)矩陣趨于奇異矩陣,最小二乘估計(jì)對(duì)觀測(cè)目標(biāo)的隨機(jī)誤差高度敏感,可能產(chǎn)生很大的方差。例如,在沒(méi)有實(shí)驗(yàn)設(shè)計(jì)的情況下收集數(shù)據(jù)時(shí),就可能會(huì)出現(xiàn)這種多重共線性的情況。

示例
線性回歸示例

1.1.1.1 普通最小二乘法的復(fù)雜度

利用的奇異值分解計(jì)算最小二乘, 如果的形狀是 (n_samples, n_features), 假設(shè) 這個(gè)算法的復(fù)雜度是 。

1.1.2 嶺回歸與分類

1.1.2.1 回歸

Ridge 通過(guò)對(duì)系數(shù)的大小施加懲罰來(lái)解決普通最小二乘的一些問(wèn)題。嶺系數(shù)最小化一個(gè)帶懲罰項(xiàng)的殘差平方和:

其中, 是控制收縮量的復(fù)雜性參數(shù), 值越大,收縮量越大,這樣,系數(shù)對(duì)共線性的魯棒性就更強(qiáng)了。


  與其他線性模型一樣, Ridgefit 方法完成擬合,并將模型系數(shù) 存儲(chǔ)在其 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)
>>> reg.coef_
array([0.34545455, 0.34545455])
>>> reg.intercept_
0.13636...

1.1.2.2 分類

Ridge 有一個(gè)分類器變體:RidgeClassifier。該分類器首先將二分類目標(biāo)轉(zhuǎn)換為 {-1,1},然后將問(wèn)題作為一個(gè)回歸任務(wù)處理, 以優(yōu)化上述目標(biāo)。預(yù)測(cè)類對(duì)應(yīng)于回歸預(yù)測(cè)的符號(hào)。對(duì)于多分類,該問(wèn)題被視為多輸出回歸,預(yù)測(cè)的類對(duì)應(yīng)于具有最高值的輸出。

使用(受懲罰的)最小二乘損失來(lái)擬合分類模型,而不是更傳統(tǒng)的 logistic損失或hinge損失,似乎有些問(wèn)題。然而,在實(shí)踐中,所有這些模型都可能導(dǎo)致類似的交叉驗(yàn)證分?jǐn)?shù), 例如準(zhǔn)確性或精確度/召回率,而受懲罰的最小二乘損失使用的嶺分類有一個(gè)明顯的計(jì)算機(jī)性能剖面選擇。

RidgeClassifier可以明顯快于LogisticRegression,因?yàn)樗挥?jì)算投影矩陣一次。

這種分類器有時(shí)被稱為具有線性核的最小二乘支持向量機(jī)。

示例
正則化函數(shù)的嶺系數(shù)圖
基于稀疏特征的文本文檔分類
線性模型系數(shù)解釋中的常見陷阱

1.1.2.3 嶺復(fù)雜度

該方法的復(fù)雜度與普通最小二乘法相同。

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

RidgeCV 通過(guò)內(nèi)置的alpha 參數(shù)的控制交叉驗(yàn)證來(lái)實(shí)現(xiàn)嶺回歸。 該對(duì)象與 GridSearchCV 的使用方法相同,只是它默認(rèn)為 Generalized Cross-Validation(廣義交叉驗(yàn)證 GCV),這是一種有效的留一交叉驗(yàn)證方法(LOO-CV):

>>> import numpy as np
>>> from sklearn import linear_model
>>> reg = linear_model.RidgeCV(alphas=np.logspace(-6, 6, 13))
>>> reg.fit([[0, 0], [0, 0], [1, 1]], [0, .1, 1])
RidgeCV(alphas=array([1.e-06, 1.e-05, 1.e-04, 1.e-03, 1.e-02, 1.e-01, 1.e+00, 1.e+01,
      1.e+02, 1.e+03, 1.e+04, 1.e+05, 1.e+06]))
>>> reg.alpha_
0.01

指定cv屬性的值將觸發(fā)使用GridSearchCV進(jìn)行交叉驗(yàn)證,例如,如cv=10執(zhí)行10折交叉驗(yàn)證,而不是廣義交叉驗(yàn)證。

參考

“Notes on Regularized Least Squares”, Rifkin & Lippert (technical report, course slides).

1.1.3. Lasso

Lasso是一個(gè)估計(jì)稀疏系數(shù)的線性模型。它在某些情況下是有用的,因?yàn)樗鼉A向于給出非零系數(shù)較少的解,從而有效地減少了給定解所依賴的特征數(shù)。 因此,Lasso 及其變體是壓縮感知領(lǐng)域的基礎(chǔ)。在一定條件下,可以恢復(fù)非零系數(shù)的精確集合。見壓縮感知:用L1優(yōu)先層重建(Lasso))。

從數(shù)學(xué)上講,它由一個(gè)帶有正則項(xiàng)的線性模型組成。最小化的目標(biāo)函數(shù)是:

這樣,LASSO估計(jì)器解決了最小二乘損失加懲罰項(xiàng)的最優(yōu)化問(wèn)題,其中 是常數(shù), 是系數(shù)向量的?1范數(shù)。

Lasso類中的實(shí)現(xiàn)采用坐標(biāo)下降法作為擬合系數(shù)的算法。另一個(gè)算法 見最小角回歸

>>> from sklearn import linear_model
>>> reg = linear_model.Lasso(alpha=0.1)
>>> reg.fit([[0, 0], [1, 1]], [0, 1])
Lasso(alpha=0.1)
>>> reg.predict([[1, 1]])
array([0.8])

函數(shù)lasso path對(duì)于較低級(jí)別的任務(wù)很有用,因?yàn)樗?jì)算沿著可能值的全部路徑上的系數(shù)。

示例
Lasso和Elastic Net(彈性網(wǎng)絡(luò))在稀疏信號(hào)上的表現(xiàn)
壓縮感知:L1先驗(yàn)層析重建(Lasso)
線性模型系數(shù)解釋中的常見陷阱

注意: 使用 Lasso 進(jìn)行特征選擇

由于Lasso回歸產(chǎn)生稀疏模型,因此可以用來(lái)進(jìn)行特征選擇。詳見:基于 L1 的特征選取

下面兩篇參考解釋了scikit-learn坐標(biāo)下降算法中使用的迭代,以及用于收斂控制的對(duì)偶間隔計(jì)算的理論基礎(chǔ)。

參考

  • “Regularization Path For Generalized linear Models by Coordinate Descent”, Friedman, Hastie & Tibshirani, J Stat Softw, 2010 (Paper).
  • “An Interior-Point Method for Large-Scale L1-Regularized Least Squares,” S. J. Kim, K. Koh, M. Lustig, S. Boyd and D. Gorinevsky, in IEEE Journal of Selected Topics in Signal Processing, 2007 (Paper)

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

alpha 參數(shù)控制估計(jì)系數(shù)的稀疏程度。

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

scikit-learn 設(shè)置Lasso alpha參數(shù)是通過(guò)兩個(gè)公開的對(duì)象, LassoCVLassoLarsCV。其中, LassoLarsCV 是基于下面將要提到的 最小角回歸 算法。

對(duì)于具有多個(gè)共線特征的高維數(shù)據(jù)集, LassoCV通常是更可取的。然而, LassoLarsCV具有探索更多相關(guān)α參數(shù)值的優(yōu)點(diǎn),如果樣本數(shù)相對(duì)于特征數(shù)很少,則往往比LassoCV更快。


1.1.3.1.2 基于信息的模型選擇

有多種選擇時(shí),估計(jì)器 LassoLarsIC 建議使用 Akaike information criterion (Akaike 信息判據(jù))(AIC)或 Bayes Information criterion (貝葉斯信息判據(jù))(BIC)。 當(dāng)使用 k-fold 交叉驗(yàn)證時(shí),正則化路徑只計(jì)算一次而不是 k + 1 次,所以找到 α 的最優(yōu)值是一種計(jì)算上更經(jīng)濟(jì)的替代方法。 然而,這樣的判斷需要對(duì)解決方案的自由度進(jìn)行適當(dāng)?shù)墓烙?jì),它會(huì)假設(shè)模型是正確的,對(duì)大樣本(漸近結(jié)果)進(jìn)行導(dǎo)出,即數(shù)據(jù)實(shí)際上是由該模型生成的。 當(dāng)問(wèn)題嚴(yán)重受限(比樣本更多的特征)時(shí),它們也容易崩潰。


示例
Lasso模型選擇-交叉驗(yàn)證/AIC/BIC

1.1.3.1.3 與支持向量機(jī)正則化參數(shù)的比較

alpha 和 SVM 的正則化參數(shù)C 之間的等式關(guān)系是 alpha = 1 / C或者 alpha = 1 / (n_samples * C),并依賴于估計(jì)器和模型優(yōu)化的確切的目標(biāo)函數(shù)。

1.1.4 多任務(wù)Lasso

MultiTaskLasso 是一個(gè)估計(jì)多元回歸問(wèn)題的稀疏系數(shù)的線性模型, y是一個(gè)二維數(shù)組, 形狀是(n_samples, n_tasks)。約束條件是,對(duì)于所有回歸問(wèn)題(也叫任務(wù)),所選的特征是相同的。

下圖比較了簡(jiǎn)單的Lasso和MultiTaskLasso的系數(shù)矩陣中非零項(xiàng)的位置。Lasso 估計(jì)產(chǎn)生分散的非零值,而 MultiTaskLasso 的一整列都是非零的。


擬合時(shí)間序列模型,強(qiáng)制規(guī)定任何活躍的特征在任何時(shí)候都是活躍的

示例
基于MultiTaskLasso的聯(lián)合特征選擇

從數(shù)學(xué)上講,它是包含混合使用范數(shù)作為正則化的一個(gè)線性模型, 最小化的目標(biāo)函數(shù)是:

其中表示Frobenius范數(shù)

讀作是:

在類MultiTaskLasso中的實(shí)現(xiàn)采用坐標(biāo)下降法作為擬合系數(shù)的算法。

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

ElasticNet是一個(gè)訓(xùn)練時(shí)同時(shí)用?1和?2范數(shù)進(jìn)行正則化的線性回歸模型。

這種組合允許學(xué)習(xí)稀疏模型,其中很少有權(quán)重是非零類, 就像 Lasso,同時(shí)仍然保持 Ridge 的正則化性質(zhì)。我們可以通過(guò) l1_ratio參數(shù)控制?1和?2范數(shù)的凸組合。

當(dāng)多個(gè)特征存在相關(guān)時(shí),彈性網(wǎng)是很有用的。Lasso很可能隨機(jī)挑選其中之一,而彈性網(wǎng)則可能兼而有之。

讓Lasso 和 Ridge 進(jìn)行交互的一個(gè)切實(shí)的優(yōu)勢(shì)是, 它允許彈性網(wǎng)在循環(huán)過(guò)程中繼承 Ridge的一些穩(wěn)定性。

在這種情況下,要最小化的目標(biāo)函數(shù)是:

ElasticNetCV 類可以通過(guò)交叉驗(yàn)證來(lái)設(shè)置參數(shù) alpha) 和 l1ratio ) 。

示例
稀疏信號(hào)上的LASSO與ElasticNet
Lasso 與 Elastic Net

以下兩篇參考文獻(xiàn)解釋了在scikit-learn中使用坐標(biāo)下降法求解的迭代,以及用于收斂控制的對(duì)偶間隔計(jì)算的理論基礎(chǔ)。

參考

  • “Regularization Path For Generalized linear Models by Coordinate Descent”, Friedman, Hastie & Tibshirani, J Stat Softw, 2010 (Paper).
  • “An Interior-Point Method for Large-Scale L1-Regularized Least Squares,” S. J. Kim, K. Koh, M. Lustig, S. Boyd and D. Gorinevsky, in IEEE Journal of Selected Topics in Signal Processing, 2007 (Paper)

1.1.6 多任務(wù)彈性網(wǎng)

MultiTaskElasticNet 是一個(gè)估計(jì)多元回歸問(wèn)題的稀疏系數(shù)的彈性網(wǎng): Y是一個(gè)二維數(shù)組, 形狀是 (n_samples, n_tasks)。約束條件是,對(duì)于所有回歸問(wèn)題(也叫任務(wù)),所選的特征是相同的。

從數(shù)學(xué)上講,它由一個(gè)線性模型組成,該模型使用混合的?1?2范數(shù)和?2范數(shù)進(jìn)行正則。最小化的目標(biāo)函數(shù)是:

MultiTaskElasticNet中的實(shí)現(xiàn)采用坐標(biāo)下降法作為擬合系數(shù)的算法。

MultiTaskElasticNetCV 中可以通過(guò)交叉驗(yàn)證來(lái)設(shè)置參數(shù) alpha) 和 l1ratio ) 。

1.1.7 最小角回歸

最小角回歸(Least-angle regression, LARS)是一種用于高維數(shù)據(jù)的回歸算法, 由Bradley Efron、Trevor Hastie、Iain Johnstone和Robert Tibshiani開發(fā)。LARs和逐步向前回歸很相似。在每一步中,它都會(huì)找到與目標(biāo)最相關(guān)的特征。當(dāng)多個(gè)特征具有相等的相關(guān)性時(shí),它不是沿著相同的特征繼續(xù)進(jìn)行,而是沿著特征之間等角的方向進(jìn)行。

LARS的優(yōu)勢(shì)在于:

  • 在特征數(shù)明顯大于樣本數(shù)的情況下,它在數(shù)值算法上是非常有效的。
  • 它的計(jì)算速度和前向選擇一樣快,其復(fù)雜度與普通最小二乘法相同。
  • 它產(chǎn)生一個(gè)完整的分段線性解決方案路徑,這在交叉驗(yàn)證或類似的嘗試調(diào)優(yōu)模型中很有用。
  • 如果兩個(gè)特征與目標(biāo)之間的相關(guān)性幾乎一致,那么它們的系數(shù)應(yīng)以大致相同的速率增加。因此,該算法的性能與我們直覺(jué)所期望的一樣,而且更穩(wěn)定。
  • 它很容易被修改,以便為其他估計(jì)器(如Lasso)提供解。

LARS的缺點(diǎn)包括:

  • 因?yàn)長(zhǎng)ARS是基于對(duì)殘差的迭代修改, 它可能會(huì)對(duì)噪音的影響特別敏感。這個(gè)問(wèn)題,在 2004 年統(tǒng)計(jì)年鑒的文章由 Weisberg 詳細(xì)討論過(guò)。

LARS模型可以使用估計(jì)器LARs,或者其低級(jí)實(shí)現(xiàn)LARS_PATHLARS_PATH_gram。

1.1.8 LARS Lasso

LassoLars 是利用LARS算法實(shí)現(xiàn)的LASSO模型,與基于坐標(biāo)下降的LASSO模型不同,它得到的是分段線性的精確解,是其自身系數(shù)范數(shù)的函數(shù)。


>>> from sklearn import linear_model
>>> reg = linear_model.LassoLars(alpha=.1)
>>> reg.fit([[0, 0], [1, 1]], [0, 1])
LassoLars(alpha=0.1)
>>> reg.coef_
array([0.717157..., 0.        ])
示例
利用LARS的LASSO路徑

LARS 算法提供了一個(gè)幾乎無(wú)代價(jià)的沿著正則化參數(shù)的系數(shù)的完整路徑,因此通常的做法用一個(gè)函數(shù) lars_pathlars_path_gram 來(lái)檢索路徑。

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

該算法類似于逐步向前回歸,但在每一步都不包含特征,而是在與殘差的相關(guān)性相等的方向上增加估計(jì)系數(shù)。

LARS解不是給出向量結(jié)果,而是由一條曲線組成,它表示參數(shù)向量的?1范數(shù)的每個(gè)值的解。完整的系數(shù)路徑存儲(chǔ)在數(shù)組coef_path_中,該數(shù)組的形狀是(n_features, max_features+1)。第一列總是零。

參考

詳細(xì)介紹了基于Hastie等人的最小角回歸(Least Angle Regression)算法

1.1.9 正交匹配追蹤(OMP)

OrthogonalMatchingPursuitorthogonal_mp 近似的擬合了一個(gè)線性模型, 該模型對(duì)非0系數(shù)的數(shù)值進(jìn)行了約束。(比如. ?0偽范數(shù))。

作為一種像最小角回歸這樣的前向特征選擇方法,正交匹配追蹤可以用固定數(shù)目的非零元素逼近最優(yōu)解向量:

或者,正交匹配追蹤可以針對(duì)特定的誤差,而不是特定數(shù)目的非零系數(shù)。這還可以表示為:

OMP的每一步的都是基于貪心算法,在每一步元素都包含與當(dāng)前殘差高度相關(guān)的元素。它類似于簡(jiǎn)單的匹配尋蹤(MP)方法,但更好的是,在每次迭代時(shí),在先前選擇的字典元素的空間上用正交投影重新計(jì)算殘差。

示例
正交匹配追蹤

參考

https://www.cs.technion.ac.il/~ronrubin/Publications/KSVD-OMP-v2.pdf
Matching pursuits with time-frequency dictionaries, S. G. Mallat, Z. Zhang,

1.1.10 貝葉斯回歸

貝葉斯回歸技術(shù)可以用于預(yù)估正則化參數(shù):正則化參數(shù)不是在硬意義上設(shè)置,而是根據(jù)手頭的數(shù)據(jù)進(jìn)行調(diào)整。

這可以通過(guò)在模型的超參數(shù)上引入信息不足的先驗(yàn)(uninformative priors)來(lái)實(shí)現(xiàn)。嶺回歸和分類中使用的?2正則化等價(jià)于求出 在高斯先驗(yàn)下且精度為 條件下的最大后驗(yàn)估計(jì)。與手動(dòng)設(shè)置lambda不同,可以將其視為要從數(shù)據(jù)中估計(jì)的隨機(jī)變量。

為了獲得一個(gè)完全的概率模型,假設(shè)輸出是分布在 周圍的高斯分布:

其中,α再次被視為要從數(shù)據(jù)中估計(jì)的隨機(jī)變量。

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

  • 它可以調(diào)整以適應(yīng)手頭的數(shù)據(jù)
  • 它可以用于在估計(jì)過(guò)程中引入正則項(xiàng)。

貝葉斯回歸的缺點(diǎn)包括:

  • 模型的推斷可能很費(fèi)時(shí)間。

參考

關(guān)于貝葉斯方法的一個(gè)很好的介紹見C.Bishop:模式識(shí)別和機(jī)器學(xué)習(xí)
原始算法的細(xì)節(jié)可在Radford M. Neal的Bayesian learning for neural networks中找到

1.1.10.1 貝葉斯嶺回歸

BayesianRidge估計(jì)了上述回歸問(wèn)題的概率模型。系數(shù) 的先驗(yàn)由球面高斯給出:

α 和 λ 上的先驗(yàn)是一般服從 gamma分布,這是高斯精度的共軛先驗(yàn)。得到的模型稱為貝葉斯嶺回歸,類似于傳統(tǒng)的 Ridge

在模型擬合過(guò)程中,對(duì)參數(shù) w、α 和 λ 進(jìn)行聯(lián)合估計(jì),通過(guò)最大化對(duì)數(shù)邊際似然估計(jì)正則化參數(shù)α和λ。scikit-learn的實(shí)現(xiàn)是基于附錄A所描述的算法(TIPING,2001年),其中參數(shù)α和λ的更新是按照下面的建議進(jìn)行的(MacKay,1992年)。最大化過(guò)程中的初始值可以用超參數(shù)alpha_initlambda_init進(jìn)行設(shè)置。

這里還有四個(gè)超參數(shù), 、 、 , 是α和λ上的gamma先驗(yàn)分布, 這些通常被選擇為無(wú)信息先驗(yàn)。默認(rè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()

經(jīng)擬合后,該模型可用于預(yù)測(cè)新的值:

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

可以獲得模型的系數(shù):

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

由于貝葉斯框架的存在,可以看出權(quán)重與普通最小二乘的權(quán)重值略有不同。然而,貝葉斯嶺回歸對(duì)不適定問(wèn)題具有更強(qiáng)的魯棒性。

示例
貝葉斯嶺回歸
基于貝葉斯嶺回歸的曲線擬合

參考

Section 3.3 in Christopher M. Bishop: Pattern Recognition and Machine Learning, 2006
David J. C. MacKay, Bayesian Interpolation, 1992.
Michael E. Tipping, Sparse Bayesian Learning and the Relevance Vector Machine, 2001.

1.1.10.2 自動(dòng)關(guān)聯(lián)判定-ARD

ARDRegressionBayesian Ridge Regression,非常相似,但會(huì)導(dǎo)致系數(shù)[1] [2] 更加稀疏。ARD回歸在系數(shù)上具有不同的先驗(yàn)性,因?yàn)樗艞壛烁咚骨蛎娴募僭O(shè)。

相反,上的分布被假定為軸平行的橢圓高斯分布。

這意味著每個(gè)系數(shù)都是從一個(gè)以0為中心、精度為 的高斯分布中提取的:

并且 。

Bayesian Ridge Regression相比, 的每個(gè)坐標(biāo)都有各自的標(biāo)準(zhǔn)差 。而 的先驗(yàn)被選擇為是給定超參數(shù) 的相同的gamma分布。


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

示例
自動(dòng)相關(guān)判定回歸(ARD)

參考

1Christopher M. Bishop: Pattern Recognition and Machine Learning, Chapter 7.2.1

2David Wipf and Srikantan Nagarajan: A new view of automatic relevance determination

3Michael E. Tipping: Sparse Bayesian Learning and the Relevance Vector Machine

4Tristan Fletcher: Relevance Vector Machines explained

1.1.11 Logistic回歸

Logistic回歸,盡管它的名稱有"回歸",但是卻是一個(gè)線性的分類模型。Logistic回歸在文獻(xiàn)中也被稱為logit回歸、最大熵分類(MaxEnt)或?qū)?shù)線性分類器。在這個(gè)模型中, 描述單個(gè)實(shí)驗(yàn)輸出結(jié)果的可能性概率用的logistic function

Logistic回歸的實(shí)現(xiàn)是在LogisticRegression, 在這里實(shí)現(xiàn)了二分類(binary), 一對(duì)多分類(One-vs-Rest,一對(duì)剩下), 和多項(xiàng)式Logistic回歸, 并且可以選擇的正則化有?1、?2或彈性網(wǎng)。

注意:正則化在默認(rèn)情況下是被應(yīng)用了的,這在機(jī)器學(xué)習(xí)中很常見,但在統(tǒng)計(jì)中不常見。正則化的另一個(gè)優(yōu)點(diǎn)是它提高了數(shù)值穩(wěn)定性。沒(méi)有正則化就等于將C設(shè)置為非常高的值。

作為一個(gè)優(yōu)化問(wèn)題, 二分類并且?guī)в?2正則化的Logistic回歸需要最小化的成本函數(shù)如下:

類似地,?1正則化的Logistic回歸需要解決以下優(yōu)化問(wèn)題:

彈性網(wǎng)正則化是?1和?2的結(jié)合,并將最小化下面的成本函數(shù):

其中ρ控制?1正則化和?2正則化的強(qiáng)度(它對(duì)應(yīng)于l1_ratio參數(shù))。

注意,在這個(gè)表示法中,假設(shè)了在第次試驗(yàn)中,目標(biāo)值 在取值只能是1或者-1,我們還可以看到,當(dāng)ρ=1時(shí),彈性網(wǎng)等價(jià)于?1正則化,當(dāng)ρ=0時(shí),則等價(jià)于?2正則化。

LogisticRegression類中實(shí)現(xiàn)的求解方法包括: “l(fā)iblinear”, “newton-cg”, “l(fā)bfgs”, “sag” and “saga”。

求解方法“l(fā)iblinear”使用的是坐標(biāo)下降(CD)法, 并依賴于優(yōu)秀的C++ LIBLINEAR library庫(kù),該庫(kù)隨Scikit-Learn一起提供。然而,用 liblinear庫(kù)實(shí)現(xiàn)的CD算法不能學(xué)習(xí)真正的多分類模型;取而代之的是, 會(huì)將優(yōu)化問(wèn)題按照 “one-vs-rest”的方式進(jìn)行分解, 這樣,對(duì)所有類都進(jìn)行了單獨(dú)的二分類訓(xùn)練。這些都是底層做的, 所以 LogisticRegression 類的對(duì)象使用這種方法表現(xiàn)出來(lái)就像一個(gè)多分類器。對(duì)于進(jìn)行?1正則化的類sklearn.svm.l1_min_c 允許計(jì)算C的下界,以便得到一個(gè)非“空”(所有特征分量權(quán)重全為零)模型。

對(duì)于 “l(fā)bfgs”, “sag” 和 “newton-cg”只支持 ?2正則化或者無(wú)正則化,還可以發(fā)現(xiàn)對(duì)于高維數(shù)據(jù), 收斂速度更快。 把這些優(yōu)化方法的參數(shù)multi_class設(shè)置為“multinomial”就會(huì)學(xué)得一個(gè)真正意義上的多分類logistic回歸, 這也意味著它的概率估計(jì)比使用默認(rèn)的“one-vs-rest”要更好。

“sag”優(yōu)化方法用的是隨機(jī)平均梯度下降( Stochastic Average Gradient descent) 6, 當(dāng)樣本數(shù)和特征數(shù)都很大時(shí),它比其他的優(yōu)化方法更快。

“saga”是 “sag”的一種變體, 它同樣支持非光滑(non-smooth)的?1正則化( penalty="l1"), 因此對(duì)于稀疏型的logistic回歸這是一個(gè)不錯(cuò)的選擇, 它也是唯一一個(gè)支持彈性網(wǎng)正則化(penalty="elasticnet")的優(yōu)化方案。

“l(fā)bfgs”是一種類似于Broyden-Fletcher-Goldfarb-Shanno算法的優(yōu)化方法, 是一種屬于擬牛頓(quasi-Newton)的方法?!發(fā)bfgs”建議用于小數(shù)據(jù)集, 對(duì)于大型數(shù)據(jù)集表現(xiàn)會(huì)受到影響。

下表匯總了每種優(yōu)化方法所支持的正則項(xiàng):

因?yàn)椤發(fā)bfgs”魯棒性更強(qiáng), 所以默認(rèn)是“l(fā)bfgs”。對(duì)于大型數(shù)據(jù)集,“saga”解決程序通常更快。對(duì)于大型數(shù)據(jù)集,您還可以考慮使用對(duì)數(shù)損失( ‘log’ loss)的 SGDClassifier ,這可能會(huì)更快,但需要更多的調(diào)優(yōu)。

示例
Logistic回歸中的L1正則化與稀疏性
L1-Logistic回歸的正則化路徑
畫多項(xiàng)和OVR的Logistic回歸圖
20個(gè)新群體的多類稀疏Logistic回歸
用多項(xiàng)式Logistic+L1進(jìn)行MNIST分類
與liblinear的不同
當(dāng)fit_intercept=False, 并且擬合得到的coef_或者待預(yù)測(cè)的數(shù)據(jù)為 0 時(shí), solver=liblinearLogisticRegression或者LinearSVC與直接調(diào)用外部的liblinear library相比, 在得分上可能有些差異。這是因?yàn)閷?duì)于決策函數(shù)是0的樣本, LogisticRegressionLinearSVC預(yù)測(cè)為負(fù)類(negative class), 而 liblinear 庫(kù)則會(huì)預(yù)測(cè)為正類。注意, 一個(gè)fit_intercept=False并且很多樣本的決策函數(shù)為0的模型,很有可能是一個(gè)欠擬合 、糟糕的模型, 你應(yīng)該設(shè)置fit_intercept=True 并且增大intercept_scaling。
注意:稀疏Logistic回歸的特征選擇
帶有?1正則化的Logistic回歸產(chǎn)生稀疏模型,因此可以用于執(zhí)行特征選擇,如基于L1的特征選擇中所詳細(xì)描述的那樣。
注意:P值估計(jì)
在回歸不受正則化的情況下,可以得到系數(shù)的p值和置信區(qū)間。包statsmodels package<https://pypi.org/project/statsmodels/>原生支持這個(gè)。在scikit-learn里面, 可以使用自助式采樣法達(dá)到目的。

LogisticRegressionCV實(shí)現(xiàn)了內(nèi)置交叉驗(yàn)證支持下的Logistic回歸,根據(jù)得分屬性找到最優(yōu)的 Cl1_ratio。 “newton-cg”, “sag”, “saga” 和 “l(fā)bfgs”被發(fā)現(xiàn)對(duì)于高維的密集數(shù)據(jù)會(huì)更快, 原因是熱啟動(dòng)(warm-starting)(見術(shù)語(yǔ)表)。

參考

5Christopher M. Bishop: Pattern Recognition and Machine Learning, Chapter 4.3.4

6Mark Schmidt, Nicolas Le Roux, and Francis Bach: Minimizing Finite Sums with the Stochastic Average Gradient.

7Aaron Defazio, Francis Bach, Simon Lacoste-Julien: SAGA: A Fast Incremental Gradient Method With Support for Non-Strongly Convex Composite Objectives.

8https://en.wikipedia.org/wiki/Broyden%E2%80%93Fletcher%E2%80%93Goldfarb%E2%80%93Shanno_algorithm

9“Performance Evaluation of Lbfgs vs other solvers”

1.1.12 廣義線性回歸(Generalized Linear Regression)

廣義線性模型(GLM)以兩種方式擴(kuò)展了線性模型。首先是預(yù)測(cè)值 是否通過(guò)反向連接函數(shù) 連接到輸入變量 的線性組合

其次,平方損失函數(shù)被一個(gè)指數(shù)分布的單位偏差 所代替 (更準(zhǔn)確地說(shuō),一個(gè)再生指數(shù)離散模型(EDM) [11])。

最小化問(wèn)題變成:

α是L2正則化懲罰項(xiàng)。提供樣本權(quán)重后,平均值即為加權(quán)平均值。

下表列出了一些特定的EDM及其單位偏差(所有這些都屬于Tweedie系列):


下圖說(shuō)明了這些分布的概率密度函數(shù)(PDF),


根據(jù)泊松分布、Tweedie分布(冪=1.5)和具有不同平均值的伽馬分布()的隨機(jī)變量 的PDF。觀察泊松分布和Tweedie(冪=1.5)分布在 的點(diǎn)質(zhì)量,但不觀察嚴(yán)格為正的目標(biāo)域的伽馬分布。

分配方式的選擇取決于手頭的問(wèn)題:

  • 如果目標(biāo)值 是計(jì)數(shù)(非負(fù)整數(shù)值)或相對(duì)頻率(非負(fù)),則可以使用帶有l(wèi)og-link的泊松偏差。
  • 如果目標(biāo)值是正的,并且是歪斜的,您可以嘗試帶有l(wèi)og-link的Gamma偏差。
  • 如果目標(biāo)值似乎比伽馬分布的尾部更重,那么您可以嘗試使用逆高斯偏差(或者更高的Tweedie族方差)。

可采用的例子包括:

  • 農(nóng)業(yè)/天氣建模:每年降雨的次數(shù)(Poisson),每次的降雨量(Gamma),每年總降雨量(Tweedie /復(fù)合Poisson Gamma)。

  • 風(fēng)險(xiǎn)建模/保單定價(jià):每年索賠事件/投保人的數(shù)量(Poisson),每個(gè)索賠事件的成本(Gamma),每個(gè)投保人每年的總成本(Tweedie /復(fù)合Poisson Gamma)。

  • 預(yù)測(cè)維護(hù):每年生產(chǎn)中斷事件的數(shù)量:Poisson,中斷持續(xù)時(shí)間:Gamma,每年總中斷時(shí)間(Tweedie /復(fù)式Poisson Gamma)。

參考資料:

  • 10McCullagh, Peter; Nelder, John (1989). Generalized Linear Models, Second Edition. Boca Raton: Chapman and Hall/CRC. ISBN 0-412-31760-5.
  • 11J?rgensen, B. (1992). The theory of exponential dispersion models and analysis of deviance. Monografias de matemática, no. 51. See also Exponential dispersion model.

1.1.12.1. 使用

TweedieRegressor為Tweedie分布實(shí)現(xiàn)了一個(gè)廣義線性模型,該模型允許使用適當(dāng)?shù)墓β蕝?shù)對(duì)上述任何分布進(jìn)行建模。特別是:

  • power = 0: 正態(tài)分布。在這種情況下,諸如 Ridge, ElasticNet 等特定的估計(jì)器通常更合適。

  • power = 1: 泊松分布。方便起見可以使用 PoissonRegressor 。然而,它完全等同于 TweedieRegressor(power=1, link='log').

  • power = 2: 伽馬分布。方便起見可以使用GammaRegressor 。然而,它完全等同于 TweedieRegressor(power=2, link='log').

  • power = 3: 逆高斯分布。

link函數(shù)由link參數(shù)決定。

示例:

>>> from sklearn.linear_model import TweedieRegressor
>>> reg = TweedieRegressor(power=1, alpha=0.5, link='log')
>>> reg.fit([[0, 0], [0, 1], [2, 2]], [0, 1, 2])
TweedieRegressor(alpha=0.5, link='log', power=1)
>>> reg.coef_
array([0.2463..., 0.4337...])
>>> reg.intercept_
-0.7638...

Examples:

1.1.12.2. 實(shí)際考慮

特征矩陣X在擬合前需要進(jìn)行標(biāo)準(zhǔn)化。這就保證了可以公平的對(duì)特征進(jìn)行懲罰。

由于線性預(yù)測(cè)器 可以為負(fù),而泊松、伽馬和逆高斯分布不支持負(fù)值,因此有必要應(yīng)用一個(gè)保證非負(fù)性的逆連接函數(shù)。例如,對(duì)于 link='log',逆連接函數(shù)變成

如果你想建立一個(gè)相對(duì)頻率的模型,即每次曝光的計(jì)數(shù)(time,volume,…),你可以通過(guò)使用泊松分布和傳遞 來(lái)實(shí)現(xiàn)使用 作為樣本權(quán)重。一個(gè)具體的例子, 保險(xiǎn)索賠的推斷回歸。

當(dāng)為 TweedieRegressorpower參數(shù)執(zhí)行交叉驗(yàn)證時(shí),建議指定一個(gè)顯式的scoring函數(shù),因?yàn)槟J(rèn)的記分器是 TweedieRegressor.score power 本身的函數(shù)。

1.1.13 隨機(jī)梯度下降(SGD)

隨機(jī)梯度下降是一種簡(jiǎn)單而又非常有效的擬合線性模型的方法。當(dāng)樣本數(shù)量(和特性數(shù)量)非常大時(shí),它特別有用,partial_fit 方法允許在線學(xué)習(xí)(online)和核外(out-of-core)的學(xué)習(xí)。

SGDClassifierSGDRegressor 類提供了使用不同的(凸)損失函數(shù)和不同的正則項(xiàng), 去擬合一個(gè)線性的回歸模型或者分類模型。比如, 設(shè)定loss="log", SGDClassifier 會(huì)擬合一個(gè)Logistic回歸模型。而如果設(shè)定loss="hinge"則會(huì)擬合一個(gè)線性支持向量機(jī) (SVM)。

參考

隨機(jī)梯度下降

1.1.14 感知機(jī)(Perceptron)

Perceptron 是另一種適用于大規(guī)模學(xué)習(xí)的簡(jiǎn)單分類算法。有如下默認(rèn):

  • 它不需要設(shè)置學(xué)習(xí)率
  • 它不需要正則項(xiàng)
  • 它只用錯(cuò)誤樣本更新模型

最后一個(gè)特點(diǎn)意味著Perceptron的訓(xùn)練速度略快于帶有合頁(yè)損失(hinge loss)的SGD,因此得到的模型更稀疏。

1.1.15 被動(dòng)感知算法(Passive Aggressive Algorithms)

被動(dòng)感知算法是一種大規(guī)模學(xué)習(xí)的算法。和感知機(jī)相似,因?yàn)樗鼈儾恍枰O(shè)置學(xué)習(xí)率。然而,與感知器不同的是,它們包含正則化參數(shù) C 。

對(duì)于分類問(wèn)題,能使用loss='hinge' (PA-I)或者 loss='squared_hinge'(PA-II)的 PassiveAggressiveClassifier類。 對(duì)于回歸問(wèn)題, 可以使用 loss='epsilon_insensitive' (PA-I) 或者loss='squared_epsilon_insensitive' (PA-II)的類 PassiveAggressiveRegressor 。

參考

“Online Passive-Aggressive Algorithms” K. Crammer, O. Dekel, J. Keshat, S. Shalev-Shwartz, Y. Singer - JMLR 7 (2006)

1.1.16 魯棒回歸(Robustness regression):離群(outliers)與模型錯(cuò)誤

魯棒回歸的目的是在存在糟糕數(shù)據(jù)(corrupt data)的情況下擬合一個(gè)回歸模型:要么有離群值,要么模型中有錯(cuò)誤。


1.1.16.1 不同的場(chǎng)景和有用的概念

在處理被離群值損壞的數(shù)據(jù)時(shí),要記住下面不同的幾點(diǎn):

  • 離群值到底是在還是在


? 離群值在方向上 離群值在方向上

  • 離群值的比例VS誤差的幅度

離群點(diǎn)的數(shù)量很重要,他們的離群程度同樣重要。


? 小離群 大離群

魯棒擬合(robust fitting)的一個(gè)重要概念是崩潰點(diǎn)(breakdown point):即擬合模型(仍準(zhǔn)確預(yù)測(cè))所能承受的離群值的最大比例。

注意,一般來(lái)說(shuō),在高維設(shè)置(特征數(shù)目n_features很大)中,魯棒擬合是非常困難的.在這些情況下魯棒擬合可能不會(huì)起作用。

權(quán)衡:選用哪個(gè)估計(jì)器?
Scikit-learn提供了3種魯棒回歸的估計(jì)器:RANSAC, Theil SenHuberRegressor
HuberRegressor 一般快于 RANSACTheil Sen ,除非樣本數(shù)很大,即 n_samples >> n_features 。 這是因?yàn)?RANSACTheil Sen都是基于數(shù)據(jù)的較小子集進(jìn)行擬合。但使用默認(rèn)參數(shù)時(shí), Theil SenRANSAC可能不如 HuberRegressor 魯棒。
RANSACTheil Sen快很多, 并且這種快的程度會(huì)隨著樣本數(shù)量的增加而加深。
RANSAC將更好地處理 方向的大型離群值(最常見的情況)。
Theil Sen將更好地處理 方向的中型離群值,但該能力將在高維設(shè)置中消失。
陷入疑問(wèn)時(shí),請(qǐng)使用RANSAC。

1.1.16.2 RANSAC:隨機(jī)抽樣一致性(RANdom SAmple Consensus)

RANSAC (RANdom SAmple Consensus)能夠使用完整數(shù)據(jù)集中的樣本點(diǎn)組成的隨機(jī)子集擬合模型。

RANSAC是一種不確定的算法,它以一定概率產(chǎn)生一個(gè)合理的結(jié)果,而這還取決于迭代次數(shù)(見參數(shù) max_trials)它通常用于線性和非線性回歸問(wèn)題,在計(jì)算機(jī)視覺(jué)領(lǐng)域尤其流行。

該算法將完整的輸入樣本數(shù)據(jù)分割成一組可能樣本點(diǎn)集合, 該集合收到噪聲和離群值的影響,這些離群值是由于對(duì)數(shù)據(jù)的錯(cuò)誤測(cè)量或無(wú)效假設(shè)引起的。然后,僅從集合中估計(jì)得到模型。


1.1.16.2.1 算法細(xì)節(jié)

每次迭代都執(zhí)行以下步驟:

  1. 從原始數(shù)據(jù)中隨機(jī)選擇min_samples個(gè)樣本,并檢查數(shù)據(jù)集是否有效(請(qǐng)參閱 is_data_valid)
  2. 將模型擬合到隨機(jī)子集上(base_estimator.fit),并檢查估計(jì)的模型是否有效(請(qǐng)參閱 is_model_valid)
  3. 通過(guò)計(jì)算模型的殘差(base_estimator.predict(X) - y), 如果樣本絕對(duì)殘差小于residual_threshold就會(huì)被認(rèn)為是局內(nèi)點(diǎn)。按照這種方式將數(shù)據(jù)分為局內(nèi)點(diǎn)和離群點(diǎn)。
  4. 當(dāng)內(nèi)部的局內(nèi)樣本數(shù)達(dá)到最大時(shí),模型達(dá)到最優(yōu)就保存下來(lái)。如果當(dāng)前的估計(jì)模型有相同的局內(nèi)點(diǎn),只有當(dāng)它有更好的分?jǐn)?shù)時(shí),它才被認(rèn)為是最好的模型。

這些步驟最終要么執(zhí)行到了最大次數(shù)(max_trials), 要么滿足了某一條件(請(qǐng)看 stop_n_inliers and stop_score)而停止。最后的模型是使用之前確定的最佳模型的所有局內(nèi)樣本(一致性集合, consensus set)來(lái)估計(jì)的。

函數(shù) is_data_validis_model_valid可以識(shí)別出隨機(jī)樣本子集中的退化組合(degenerate combinations)并予以丟棄(reject)。即便不需要考慮退化情況,也會(huì)使用 is_data_valid ,因?yàn)樵跀M合模型之前調(diào)用它能得到更高的計(jì)算性能。

示例
基于RANSAC的魯棒線性模型估計(jì)
魯棒線性估計(jì)擬合

參考

1.1.16.3 Theil-Sen估計(jì):基于廣義中值的估計(jì)(generalized-median-based estimator)

TheilSenRegressor估計(jì)器使用高緯度下的中位數(shù)的一個(gè)泛化性。因此,它對(duì)多元離群值具有很強(qiáng)的魯棒性。但是,請(qǐng)注意,隨著維數(shù)的增加,估計(jì)量的魯棒性迅速下降。在高維數(shù)據(jù)上失去魯棒性, 就不會(huì)比普通最小二乘法好。

示例
Theil-Sen 回歸
魯棒線性估計(jì)擬合

參考

https://en.wikipedia.org/wiki/Theil%E2%80%93Sen_estimator

1.1.16.3.1 理論細(xì)節(jié)

TheilSenRegressor與(普通最小二乘) Ordinary Least Squares (OLS)在漸進(jìn)效率和無(wú)偏估計(jì)方面相當(dāng)。與普通最小二乘相比, Theil-Sen是一種非參數(shù)的方法, 這意味著它對(duì)數(shù)據(jù)的基本分布沒(méi)有任何假定。由于Theil-Sen是一種基于中值的估計(jì)器,因此它對(duì)損壞的數(shù)據(jù)(也稱為離群值)具有更強(qiáng)的魯棒性。在簡(jiǎn)單線性回歸的情況下,Theil-Sen的崩潰點(diǎn)(breakdown point)為29.3%,這意味著它可以容忍高達(dá)29.3%的損壞數(shù)據(jù)。


TheilSenRegressor在scikit-learn中的實(shí)現(xiàn)遵循了對(duì)多元線性回歸模型[10]的推廣,該模型使用空間中值,它是多維中值的推廣。

就時(shí)間和空間的復(fù)雜度而言, Theil-Sen可根據(jù):

這使得對(duì)樣本和特征很大的問(wèn)題進(jìn)行全面的應(yīng)用是不可行的。因此, 可以通過(guò)只考慮所有可能組合當(dāng)中的一個(gè)隨機(jī)子集, 選擇一個(gè)亞群體的大小從而限制時(shí)間和空間復(fù)雜度。

示例
Theil-Sen 回歸

參考

10Xin Dang, Hanxiang Peng, Xueqin Wang and Heping Zhang: Theil-Sen Estimators in a Multiple Linear Regression Model.

1120.K?rkk?inen and S. ?yr?m?: On Computation of Spatial Median for Robust Data Mining.

1.1.16.4 Huber回歸

HuberRegressorRidge 不同, 因?yàn)樗丫€性損失應(yīng)用于被分為離群值的樣本。如果樣本的絕對(duì)誤差小于某一閾值,則該樣本被歸類為局內(nèi)樣本(inlier)。它也不同于 TheilSenRegressorRANSACRegressor ,因?yàn)樗鼪](méi)有忽略離群值的影響,而是給予它們較小的權(quán)重。


給出了HuberRegressor要最小化的損失函數(shù):

其中

建議將參數(shù)epsilon設(shè)為1.35,以達(dá)到95%的統(tǒng)計(jì)效率。

1.1.16.5 注意

  • HuberRegressor與將損失設(shè)置為 huberSGDRegressor并不相同, 體現(xiàn)在以下幾個(gè)方面:

  • HuberRegressor 是標(biāo)量不變。一旦設(shè)置了 epsilon,將按不同的值向下或向上縮放,也會(huì)像之前一樣對(duì)異常值產(chǎn)生同樣的魯棒性。與 SGDRegressor 相比,當(dāng)被縮放時(shí),必須再一次設(shè)置 epsilon。

  • HuberRegressor 對(duì)于少量樣本的數(shù)據(jù)用起來(lái)更有效,而 SGDRegressor 需要對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行多次傳遞(passes)才能產(chǎn)生相同的魯棒性。

示例
強(qiáng)異常數(shù)據(jù)集上的Huber回歸與嶺回歸

參考

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

請(qǐng)注意,這個(gè)估計(jì)器的實(shí)現(xiàn)與R實(shí)現(xiàn)的魯棒回歸并不相同。(http://www.ats.ucla.edu/stat/r/dae/rreg.htm)因?yàn)镽實(shí)現(xiàn)做了加權(quán)最小二乘,權(quán)重是根據(jù)樣本殘差大于某一閾值的多少賦予的。

1.1.17 多項(xiàng)式回歸:用基函數(shù)擴(kuò)展線性模型

機(jī)器學(xué)習(xí)中的一個(gè)常見模式是使用非線性函數(shù)對(duì)數(shù)據(jù)的進(jìn)行變換訓(xùn)練的線性模型。這種方法保持了線性方法的一般快速性能,同時(shí)允許它們適應(yīng)范圍更廣的數(shù)據(jù)。

例如,可以通過(guò)從系數(shù)構(gòu)造多項(xiàng)式特征(polynomial features)來(lái)擴(kuò)展簡(jiǎn)單的線性回歸。在標(biāo)準(zhǔn)線性回歸的情況下,您可能有一個(gè)二維數(shù)據(jù)的模型, 如下所示:

如果我們想用拋物面來(lái)擬合數(shù)據(jù)而不是平面,我們可以用二階多項(xiàng)式組合特征,這樣模型看起來(lái)就像這樣:

(有時(shí)令人驚訝的)觀察到,這仍然是一個(gè)線性模型:要看到這一點(diǎn),想象一下創(chuàng)建一組新的特征。

有了這個(gè)數(shù)據(jù)的重新標(biāo)記,我們的問(wèn)題就可以寫出來(lái)了:

我們發(fā)現(xiàn),得到的多項(xiàng)式回歸依舊是線性模型, 如上面我們提到過(guò)的(即模型在中是線性的),并且可以用同樣的技巧來(lái)求解。通過(guò)在高維空間中考慮這些基函數(shù)的線性擬合,該模型具有更大范圍的數(shù)據(jù)擬合的靈活性。

下面是一個(gè)應(yīng)用于一維數(shù)據(jù)的例子,使用了不同程度的多項(xiàng)式特征:


此圖是使用 PolynomialFeatures轉(zhuǎn)換器創(chuàng)建的,該轉(zhuǎn)換器將輸入數(shù)據(jù)矩陣轉(zhuǎn)換為給定度數(shù)的新數(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.]])

的特征已經(jīng)從 轉(zhuǎn)化為 ,現(xiàn)在可以在任何線性模型中使用。

這種預(yù)處理可以通過(guò) Pipeline(流水線)工具來(lái)簡(jiǎn)化。可以創(chuàng)建表示簡(jiǎn)單多項(xiàng)式回歸的單個(gè)對(duì)象,并按以下方式使用:

>>> 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)練的線性模型能夠準(zhǔn)確地恢復(fù)輸入多項(xiàng)式系數(shù)。

在某些情況下,沒(méi)有必要包含任何單一特征的更高階的次方,而是讓最多 個(gè)不同的特征相乘即可, 這就是所謂的交互特征(interaction features )。這些可以通過(guò) PolynomialFeatures 中設(shè)置interaction_only=True得到。

例如,在處理布爾型特征時(shí),對(duì)所有 都是無(wú)用的;但是 表示兩個(gè)布爾的聯(lián)合。這樣,我們就可以用線性分類器解決異或問(wè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, max_iter=10, tol=None,
...                  shuffle=False).fit(X, y)

分類器“預(yù)測(cè)”是完美的:

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


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)