下面是一組用于回歸的方法, 其中目標(biāo)值是特征的線性組合。在數(shù)學(xué)表示法中,如果表示預(yù)測(cè)值,那么有:
在整個(gè)模型中, 我們定義向量 作為
coef_
,定義作為
intercept_
。
若需要使用廣義線性模型進(jìn)行分類, 請(qǐng)看 Logistic regression
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)這種多重共線性的情況。
示例 |
---|
線性回歸示例 |
利用的奇異值分解計(jì)算最小二乘,
如果的形狀是
(n_samples, n_features)
, 假設(shè) 這個(gè)算法的復(fù)雜度是
。
Ridge 通過(guò)對(duì)系數(shù)的大小施加懲罰來(lái)解決普通最小二乘的一些問(wèn)題。嶺系數(shù)最小化一個(gè)帶懲罰項(xiàng)的殘差平方和:
其中, 是控制收縮量的復(fù)雜性參數(shù), 值越大,收縮量越大,這樣,系數(shù)對(duì)共線性的魯棒性就更強(qiáng)了。
與其他線性模型一樣, Ridge 用
fit
方法完成擬合,并將模型系數(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...
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ù)解釋中的常見陷阱 |
該方法的復(fù)雜度與普通最小二乘法相同。
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).
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)
alpha
參數(shù)控制估計(jì)系數(shù)的稀疏程度。
scikit-learn 設(shè)置Lasso alpha
參數(shù)是通過(guò)兩個(gè)公開的對(duì)象,
LassoCV和LassoLarsCV
。其中,
LassoLarsCV
是基于下面將要提到的 最小角回歸 算法。
對(duì)于具有多個(gè)共線特征的高維數(shù)據(jù)集, LassoCV
通常是更可取的。然而,
LassoLarsCV具有探索更多相關(guān)α參數(shù)值的優(yōu)點(diǎn),如果樣本數(shù)相對(duì)于特征數(shù)很少,則往往比LassoCV更快。
有多種選擇時(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 |
alpha
和
SVM 的正則化參數(shù)C
之間的等式關(guān)系是
alpha = 1 / C
或者 alpha = 1 / (n_samples * C)
,并依賴于估計(jì)器和模型優(yōu)化的確切的目標(biāo)函數(shù)。
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ù)的算法。
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
()
和
()
。
示例 |
---|
稀疏信號(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)
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
()
和
()
。
最小角回歸(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ì)在于:
LARS的缺點(diǎn)包括:
LARS模型可以使用估計(jì)器LARs,或者其低級(jí)實(shí)現(xiàn)LARS_PATH或LARS_PATH_gram。
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_path
或
lars_path_gram
來(lái)檢索路徑。
該算法類似于逐步向前回歸,但在每一步都不包含特征,而是在與殘差的相關(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)算法
OrthogonalMatchingPursuit
和
orthogonal_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,
貝葉斯回歸技術(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ǎn)包括:
參考
關(guān)于貝葉斯方法的一個(gè)很好的介紹見C.Bishop:模式識(shí)別和機(jī)器學(xué)習(xí)
原始算法的細(xì)節(jié)可在Radford M. Neal的Bayesian learning for neural networks中找到
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_init
和
lambda_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.
ARDRegression
與
Bayesian 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
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=liblinear 的LogisticRegression 或者LinearSVC與直接調(diào)用外部的liblinear
library相比, 在得分上可能有些差異。這是因?yàn)閷?duì)于決策函數(shù)是0的樣本, LogisticRegression 和LinearSVC 預(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)的
C
和l1_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
廣義線性模型(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)題:
可采用的例子包括:
農(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.
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:
特征矩陣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)為 TweedieRegressor
的
power
參數(shù)執(zhí)行交叉驗(yàn)證時(shí),建議指定一個(gè)顯式的scoring
函數(shù),因?yàn)槟J(rèn)的記分器是
TweedieRegressor.score
是 power
本身的函數(shù)。
隨機(jī)梯度下降是一種簡(jiǎn)單而又非常有效的擬合線性模型的方法。當(dāng)樣本數(shù)量(和特性數(shù)量)非常大時(shí),它特別有用,partial_fit
方法允許在線學(xué)習(xí)(online)和核外(out-of-core)的學(xué)習(xí)。
SGDClassifier
和
SGDRegressor
類提供了使用不同的(凸)損失函數(shù)和不同的正則項(xiàng), 去擬合一個(gè)線性的回歸模型或者分類模型。比如, 設(shè)定loss="log"
,
SGDClassifier
會(huì)擬合一個(gè)Logistic回歸模型。而如果設(shè)定loss="hinge"
則會(huì)擬合一個(gè)線性支持向量機(jī)
(SVM)。
參考
Perceptron
是另一種適用于大規(guī)模學(xué)習(xí)的簡(jiǎn)單分類算法。有如下默認(rèn):
最后一個(gè)特點(diǎn)意味著Perceptron的訓(xùn)練速度略快于帶有合頁(yè)損失(hinge loss)的SGD,因此得到的模型更稀疏。
被動(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)
魯棒回歸的目的是在存在糟糕數(shù)據(jù)(corrupt data)的情況下擬合一個(gè)回歸模型:要么有離群值,要么模型中有錯(cuò)誤。
在處理被離群值損壞的數(shù)據(jù)時(shí),要記住下面不同的幾點(diǎn):
? 離群值在方向上
離群值在方向上
離群點(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 Sen和 HuberRegressor
HuberRegressor 一般快于 RANSAC和 Theil Sen ,除非樣本數(shù)很大,即 n_samples >> n_features 。
這是因?yàn)?RANSAC 和
Theil Sen都是基于數(shù)據(jù)的較小子集進(jìn)行擬合。但使用默認(rèn)參數(shù)時(shí), Theil Sen 和
RANSAC可能不如 HuberRegressor 魯棒。
RANSAC比 Theil Sen快很多, 并且這種快的程度會(huì)隨著樣本數(shù)量的增加而加深。 RANSAC將更好地處理 方向的大型離群值(最常見的情況)。 Theil Sen將更好地處理 方向的中型離群值,但該能力將在高維設(shè)置中消失。 陷入疑問(wèn)時(shí),請(qǐng)使用RANSAC。 |
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ì)得到模型。
每次迭代都執(zhí)行以下步驟:
min_samples
個(gè)樣本,并檢查數(shù)據(jù)集是否有效(請(qǐng)參閱
is_data_valid
)base_estimator.fit
),并檢查估計(jì)的模型是否有效(請(qǐng)參閱
is_model_valid
)base_estimator.predict(X) - y
),
如果樣本絕對(duì)殘差小于residual_threshold
就會(huì)被認(rèn)為是局內(nèi)點(diǎn)。按照這種方式將數(shù)據(jù)分為局內(nèi)點(diǎn)和離群點(diǎn)。這些步驟最終要么執(zhí)行到了最大次數(shù)(max_trials
),
要么滿足了某一條件(請(qǐng)看 stop_n_inliers
and
stop_score
)而停止。最后的模型是使用之前確定的最佳模型的所有局內(nèi)樣本(一致性集合, consensus set)來(lái)估計(jì)的。
函數(shù) is_data_valid
和
is_model_valid
可以識(shí)別出隨機(jī)樣本子集中的退化組合(degenerate combinations)并予以丟棄(reject)。即便不需要考慮退化情況,也會(huì)使用 is_data_valid
,因?yàn)樵跀M合模型之前調(diào)用它能得到更高的計(jì)算性能。
示例 |
---|
基于RANSAC的魯棒線性模型估計(jì)
魯棒線性估計(jì)擬合 |
參考
https://en.wikipedia.org/wiki/RANSAC “Random Sample Consensus: A Paradigm for Model Fitting with Applications to Image Analysis and Automated Cartography” Martin A. Fischler and Robert C. Bolles - SRI International (1981) “Performance Evaluation of RANSAC Family” Sunglok Choi, Taemin Kim and Wonpil Yu - BMVC (2009)
TheilSenRegressor
估計(jì)器使用高緯度下的中位數(shù)的一個(gè)泛化性。因此,它對(duì)多元離群值具有很強(qiáng)的魯棒性。但是,請(qǐng)注意,隨著維數(shù)的增加,估計(jì)量的魯棒性迅速下降。在高維數(shù)據(jù)上失去魯棒性,
就不會(huì)比普通最小二乘法好。
示例 |
---|
Theil-Sen 回歸
魯棒線性估計(jì)擬合 |
參考
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.
HuberRegressor
與
Ridge
不同, 因?yàn)樗丫€性損失應(yīng)用于被分為離群值的樣本。如果樣本的絕對(duì)誤差小于某一閾值,則該樣本被歸類為局內(nèi)樣本(inlier)。它也不同于 TheilSenRegressor
和
RANSACRegressor
,因?yàn)樗鼪](méi)有忽略離群值的影響,而是給予它們較小的權(quán)重。
給出了
HuberRegressor
要最小化的損失函數(shù):
其中
建議將參數(shù)epsilon
設(shè)為1.35,以達(dá)到95%的統(tǒng)計(jì)效率。
HuberRegressor
與將損失設(shè)置為
huber
的 SGDRegressor
并不相同,
體現(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ù)樣本殘差大于某一閾值的多少賦予的。
機(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
更多建議: