1.1 線性模型?

下面是一組用于回歸的方法, 其中目標值是特征的線性組合。在數學表示法中,如果表示預測值,那么有:

在整個模型中, 我們定義向量 作為coef_,定義作為 intercept_

若需要使用廣義線性模型進行分類, 請看 Logistic regression

1.1.1 普通最小二乘法

LinearRegression 是擬合一個帶有回歸系數的, 使得數據的實際觀測值和線性近似預測的預測值之間的殘差平方和最小的一個線性模型。數學上講,它解決了這個形式的問題:

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

>>> from sklearn import linear_model
>>> reg = linear_model.LinearRegression()
>>> reg.fit([[00], [11], [22]], [012])
LinearRegression()
>>> reg.coef_
array([0.50.5])

普通最小二乘的系數估計依賴于特征的獨立性。當特征相關且設計矩陣的列之間具有近似線性相關性時, 設計矩陣趨于奇異矩陣,最小二乘估計對觀測目標的隨機誤差高度敏感,可能產生很大的方差。例如,在沒有實驗設計的情況下收集數據時,就可能會出現這種多重共線性的情況。

示例
線性回歸示例

1.1.1.1 普通最小二乘法的復雜度

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

1.1.2 嶺回歸與分類

1.1.2.1 回歸

Ridge 通過對系數的大小施加懲罰來解決普通最小二乘的一些問題。嶺系數最小化一個帶懲罰項的殘差平方和:

其中, 是控制收縮量的復雜性參數, 值越大,收縮量越大,這樣,系數對共線性的魯棒性就更強了。 與其他線性模型一樣, Ridgefit 方法完成擬合,并將模型系數存儲在其 coef_ 成員中:

>>> from sklearn import linear_model
>>> reg = linear_model.Ridge(alpha=.5)
>>> reg.fit([[00], [00], [11]], [0.11])
Ridge(alpha=0.5)
>>> reg.coef_
array([0.345454550.34545455])
>>> reg.intercept_
0.13636...

1.1.2.2 分類

Ridge 有一個分類器變體:RidgeClassifier。該分類器首先將二分類目標轉換為{-1,1},然后將問題作為一個回歸任務處理, 以優化上述目標。預測類對應于回歸預測的符號。對于多分類,該問題被視為多輸出回歸,預測的類對應于具有最高值的輸出。

使用(受懲罰的)最小二乘損失來擬合分類模型,而不是更傳統的 logistic損失或hinge損失,似乎有些問題。然而,在實踐中,所有這些模型都可能導致類似的交叉驗證分數, 例如準確性或精確度/召回率,而受懲罰的最小二乘損失使用的嶺分類有一個明顯的計算機性能剖面選擇。

RidgeClassifier可以明顯快于LogisticRegression,因為它只計算投影矩陣一次。

這種分類器有時被稱為具有線性核的最小二乘支持向量機

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

1.1.2.3 嶺復雜度

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

1.1.2.4 設置正則化參數:廣義交叉驗證

RidgeCV 通過內置的alpha 參數的控制交叉驗證來實現嶺回歸。 該對象與 GridSearchCV 的使用方法相同,只是它默認為 Generalized Cross-Validation(廣義交叉驗證 GCV),這是一種有效的留一交叉驗證方法(LOO-CV):

>>> import numpy as np
>>> from sklearn import linear_model
>>> reg = linear_model.RidgeCV(alphas=np.logspace(-6613))
>>> reg.fit([[00], [00], [11]], [0.11])
RidgeCV(alphas=array([1.e-061.e-051.e-041.e-031.e-021.e-011.e+001.e+01,
      1.e+021.e+031.e+041.e+051.e+06]))
>>> reg.alpha_
0.01

指定cv屬性的值將觸發使用GridSearchCV進行交叉驗證,例如,如cv=10執行10折交叉驗證,而不是廣義交叉驗證。

參考

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

1.1.3. Lasso

Lasso是一個估計稀疏系數的線性模型。它在某些情況下是有用的,因為它傾向于給出非零系數較少的解,從而有效地減少了給定解所依賴的特征數。 因此,Lasso 及其變體是壓縮感知領域的基礎。在一定條件下,可以恢復非零系數的精確集合。見壓縮感知:用L1優先層重建(Lasso))

從數學上講,它由一個帶有正則項的線性模型組成。最小化的目標函數是:

這樣,LASSO估計器解決了最小二乘損失加懲罰項的最優化問題,其中 是常數,是系數向量的?1范數。

Lasso類中的實現采用坐標下降法作為擬合系數的算法。另一個算法 見最小角回歸

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

函數lasso path對于較低級別的任務很有用,因為它計算沿著可能值的全部路徑上的系數。

示例
Lasso和Elastic Net(彈性網絡)在稀疏信號上的表現
壓縮感知:L1先驗層析重建(Lasso)
線性模型系數解釋中的常見陷阱

注意: 使用 Lasso 進行特征選擇

由于Lasso回歸產生稀疏模型,因此可以用來進行特征選擇。詳見:基于 L1 的特征選取

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

參考

  • “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 設置正則化參數

alpha 參數控制估計系數的稀疏程度。

1.1.3.1.1 使用交叉驗證

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

對于具有多個共線特征的高維數據集, LassoCV通常是更可取的。然而,LassoLarsCV具有探索更多相關α參數值的優點,如果樣本數相對于特征數很少,則往往比LassoCV更快。

1.1.3.1.2 基于信息的模型選擇

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

示例
Lasso模型選擇-交叉驗證/AIC/BIC

1.1.3.1.3 與支持向量機正則化參數的比較

alpha 和 SVM 的正則化參數C 之間的等式關系是 alpha = 1 / C 或者 alpha = 1 / (n_samples * C),并依賴于估計器和模型優化的確切的目標函數。

1.1.4 多任務Lasso

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

下圖比較了簡單的Lasso和MultiTaskLasso的系數矩陣中非零項的位置。Lasso 估計產生分散的非零值,而 MultiTaskLasso 的一整列都是非零的。

擬合時間序列模型,強制規定任何活躍的特征在任何時候都是活躍的

示例
基于MultiTaskLasso的聯合特征選擇

從數學上講,它是包含混合使用范數作為正則化的一個線性模型, 最小化的目標函數是:

其中表示Frobenius范數

讀作是:

在類MultiTaskLasso中的實現采用坐標下降法作為擬合系數的算法。

1.1.5 彈性網絡

ElasticNet是一個訓練時同時用?1和?2范數進行正則化的線性回歸模型。

這種組合允許學習稀疏模型,其中很少有權重是非零類, 就像 Lasso,同時仍然保持 Ridge的正則化性質。我們可以通過 l1_ratio參數控制?1和?2范數的凸組合。

當多個特征存在相關時,彈性網是很有用的。Lasso很可能隨機挑選其中之一,而彈性網則可能兼而有之。

讓Lasso 和 Ridge 進行交互的一個切實的優勢是, 它允許彈性網在循環過程中繼承 Ridge的一些穩定性。

在這種情況下,要最小化的目標函數是:

ElasticNetCV 類可以通過交叉驗證來設置參數 alpha) 和 `l1_ratio` () 。

示例
稀疏信號上的LASSO與ElasticNet
Lasso 與 Elastic Net

以下兩篇參考文獻解釋了在scikit-learn中使用坐標下降法求解的迭代,以及用于收斂控制的對偶間隔計算的理論基礎。

參考

  • “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 多任務彈性網

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

從數學上講,它由一個線性模型組成,該模型使用混合的?1?2范數和?2范數進行正則。最小化的目標函數是:

MultiTaskElasticNet中的實現采用坐標下降法作為擬合系數的算法。

MultiTaskElasticNetCV 中可以通過交叉驗證來設置參數 alpha) 和 `l1_ratio` () 。

1.1.7 最小角回歸

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

LARS的優勢在于:

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

LARS的缺點包括:

  • 因為LARS是基于對殘差的迭代修改, 它可能會對噪音的影響特別敏感。這個問題,在 2004 年統計年鑒的文章由 Weisberg 詳細討論過。

LARS模型可以使用估計器LARs,或者其低級實現LARS_PATHLARS_PATH_gram

1.1.8 LARS Lasso

LassoLars 是利用LARS算法實現的LASSO模型,與基于坐標下降的LASSO模型不同,它得到的是分段線性的精確解,是其自身系數范數的函數。

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

LARS 算法提供了一個幾乎無代價的沿著正則化參數的系數的完整路徑,因此通常的做法用一個函數 lars_pathlars_path_gram來檢索路徑。

1.1.8.1 數學公式

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

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

參考

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

1.1.9 正交匹配追蹤(OMP)

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

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

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

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

示例
正交匹配追蹤

參考

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 貝葉斯回歸

貝葉斯回歸技術可以用于預估正則化參數:正則化參數不是在硬意義上設置,而是根據手頭的數據進行調整。

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

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

其中,α再次被視為要從數據中估計的隨機變量。

貝葉斯回歸的優點是:

  • 它可以調整以適應手頭的數據
  • 它可以用于在估計過程中引入正則項。

貝葉斯回歸的缺點包括:

  • 模型的推斷可能很費時間。

參考

關于貝葉斯方法的一個很好的介紹見C.Bishop:模式識別和機器學習
原始算法的細節可在Radford M. Neal的Bayesian learning for neural networks中找到

1.1.10.1 貝葉斯嶺回歸

BayesianRidge估計了上述回歸問題的概率模型。系數 的先驗由球面高斯給出:

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

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

這里還有四個超參數, , 是α和λ上的gamma先驗分布, 這些通常被選擇為無信息先驗。默認情況下,

貝葉斯嶺回歸用于回歸:

>>> 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()

經擬合后,該模型可用于預測新的值:

>>> reg.predict([[10.]])
array([0.50000013])

可以獲得模型的系數:

>>> reg.coef_
array([0.499999930.49999993])

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

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

參考

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 自動關聯判定-ARD

ARDRegressionBayesian Ridge Regression,非常相似,但會導致系數 [1] [2] 更加稀疏。ARD回歸在系數上具有不同的先驗性,因為它放棄了高斯球面的假設。

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

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

并且

Bayesian Ridge Regression相比,的每個坐標都有各自的標準差。而的先驗被選擇為是給定超參數的相同的gamma分布。

ARD在文獻中也被稱為稀疏貝葉斯學習和相關向量機。[3] [4]

示例
自動相關判定回歸(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回歸,盡管它的名稱有"回歸",但是卻是一個線性的分類模型。Logistic回歸在文獻中也被稱為logit回歸、最大熵分類(MaxEnt)或對數線性分類器。在這個模型中, 描述單個實驗輸出結果的可能性概率用的logistic function

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

注意:正則化在默認情況下是被應用了的,這在機器學習中很常見,但在統計中不常見。正則化的另一個優點是它提高了數值穩定性。沒有正則化就等于將C設置為非常高的值。

作為一個優化問題, 二分類并且帶有?2正則化的Logistic回歸需要最小化的成本函數如下:

類似地,?1正則化的Logistic回歸需要解決以下優化問題:

彈性網正則化是?1和?2的結合,并將最小化下面的成本函數:

其中ρ控制?1正則化和?2正則化的強度(它對應于l1_ratio參數)。

注意,在這個表示法中,假設了在第次試驗中,目標值在取值只能是1或者-1,我們還可以看到,當ρ=1時,彈性網等價于?1正則化,當ρ=0時,則等價于?2正則化。

LogisticRegression類中實現的求解方法包括: “liblinear”, “newton-cg”, “lbfgs”, “sag” and “saga”。

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

對于 “lbfgs”, “sag” 和 “newton-cg”只支持 ?2正則化或者無正則化,還可以發現對于高維數據, 收斂速度更快。 把這些優化方法的參數multi_class設置為“multinomial”就會學得一個真正意義上的多分類logistic回歸, 這也意味著它的概率估計比使用默認的“one-vs-rest”要更好。

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

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

“lbfgs”是一種類似于Broyden-Fletcher-Goldfarb-Shanno算法的優化方法, 是一種屬于擬牛頓(quasi-Newton)的方法。“lbfgs”建議用于小數據集, 對于大型數據集表現會受到影響。

下表匯總了每種優化方法所支持的正則項:

因為“lbfgs”魯棒性更強, 所以默認是“lbfgs”。對于大型數據集,“saga”解決程序通常更快。對于大型數據集,您還可以考慮使用對數損失( ‘log’ loss)的 SGDClassifier,這可能會更快,但需要更多的調優。

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

LogisticRegressionCV實現了內置交叉驗證支持下的Logistic回歸,根據得分屬性找到最優的Cl1_ratio。 “newton-cg”, “sag”, “saga” 和 “lbfgs”被發現對于高維的密集數據會更快, 原因是熱啟動(warm-starting)(見術語表)。

參考

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)以兩種方式擴展了線性模型。首先是預測值 是否通過反向連接函數 連接到輸入變量 的線性組合

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

最小化問題變成:

α是L2正則化懲罰項。提供樣本權重后,平均值即為加權平均值。

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

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

根據泊松分布、Tweedie分布(冪=1.5)和具有不同平均值的伽馬分布()的隨機變量 的PDF。觀察泊松分布和Tweedie(冪=1.5)分布在 的點質量,但不觀察嚴格為正的目標域的伽馬分布。

分配方式的選擇取決于手頭的問題:

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

可采用的例子包括:

  • 農業/天氣建模:每年降雨的次數(Poisson),每次的降雨量(Gamma),每年總降雨量(Tweedie /復合Poisson Gamma)。

  • 風險建模/保單定價:每年索賠事件/投保人的數量(Poisson),每個索賠事件的成本(Gamma),每個投保人每年的總成本(Tweedie /復合Poisson Gamma)。

  • 預測維護:每年生產中斷事件的數量:Poisson,中斷持續時間:Gamma,每年總中斷時間(Tweedie /復式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分布實現了一個廣義線性模型,該模型允許使用適當的功率參數對上述任何分布進行建模。特別是:

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

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

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

  • power = 3: 逆高斯分布。

link函數由link參數決定。

示例:

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

Examples:

1.1.12.2. 實際考慮

特征矩陣X在擬合前需要進行標準化。這就保證了可以公平的對特征進行懲罰。

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

如果你想建立一個相對頻率的模型,即每次曝光的計數(time,volume,…),你可以通過使用泊松分布和傳遞 來實現使用作為樣本權重。一個具體的例子, 保險索賠的推斷回歸

當為 TweedieRegressorpower 參數執行交叉驗證時,建議指定一個顯式的scoring函數,因為默認的記分器是 TweedieRegressor.scorepower 本身的函數。

1.1.13 隨機梯度下降(SGD)

隨機梯度下降是一種簡單而又非常有效的擬合線性模型的方法。當樣本數量(和特性數量)非常大時,它特別有用,partial_fit 方法允許在線學習(online)和核外(out-of-core)的學習。

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

參考

隨機梯度下降

1.1.14 感知機(Perceptron)

Perceptron 是另一種適用于大規模學習的簡單分類算法。有如下默認:

  • 它不需要設置學習率
  • 它不需要正則項
  • 它只用錯誤樣本更新模型

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

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

被動感知算法是一種大規模學習的算法。和感知機相似,因為它們不需要設置學習率。然而,與感知器不同的是,它們包含正則化參數 C

對于分類問題,能使用loss='hinge' (PA-I)或者loss='squared_hinge' (PA-II)的 PassiveAggressiveClassifier類。 對于回歸問題, 可以使用 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)與模型錯誤

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

1.1.16.1 不同的場景和有用的概念

在處理被離群值損壞的數據時,要記住下面不同的幾點:

  • 離群值到底是在還是在

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

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

離群點的數量很重要,他們的離群程度同樣重要。

? 小離群 大離群

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

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

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

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

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

RANSAC是一種不確定的算法,它以一定概率產生一個合理的結果,而這還取決于迭代次數(見參數 max_trials)它通常用于線性和非線性回歸問題,在計算機視覺領域尤其流行。

該算法將完整的輸入樣本數據分割成一組可能樣本點集合, 該集合收到噪聲和離群值的影響,這些離群值是由于對數據的錯誤測量或無效假設引起的。然后,僅從集合中估計得到模型。

1.1.16.2.1 算法細節

每次迭代都執行以下步驟:

  1. 從原始數據中隨機選擇min_samples個樣本,并檢查數據集是否有效(請參閱is_data_valid)
  2. 將模型擬合到隨機子集上(base_estimator.fit),并檢查估計的模型是否有效(請參閱is_model_valid)
  3. 通過計算模型的殘差(base_estimator.predict(X) - y), 如果樣本絕對殘差小于residual_threshold就會被認為是局內點。按照這種方式將數據分為局內點和離群點。
  4. 當內部的局內樣本數達到最大時,模型達到最優就保存下來。如果當前的估計模型有相同的局內點,只有當它有更好的分數時,它才被認為是最好的模型。

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

函數 is_data_validis_model_valid 可以識別出隨機樣本子集中的退化組合(degenerate combinations)并予以丟棄(reject)。即便不需要考慮退化情況,也會使用 is_data_valid ,因為在擬合模型之前調用它能得到更高的計算性能。

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

參考

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

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

示例
Theil-Sen 回歸
魯棒線性估計擬合

參考

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

1.1.16.3.1 理論細節

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

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

就時間和空間的復雜度而言, Theil-Sen可根據:

這使得對樣本和特征很大的問題進行全面的應用是不可行的。因此, 可以通過只考慮所有可能組合當中的一個隨機子集, 選擇一個亞群體的大小從而限制時間和空間復雜度。

示例
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不同, 因為它把線性損失應用于被分為離群值的樣本。如果樣本的絕對誤差小于某一閾值,則該樣本被歸類為局內樣本(inlier)。它也不同于 TheilSenRegressorRANSACRegressor,因為它沒有忽略離群值的影響,而是給予它們較小的權重。

給出了HuberRegressor要最小化的損失函數:

其中

建議將參數epsilon設為1.35,以達到95%的統計效率。

1.1.16.5 注意

  • HuberRegressor與將損失設置為huberSGDRegressor并不相同, 體現在以下幾個方面:

  • HuberRegressor 是標量不變。一旦設置了epsilon,將按不同的值向下或向上縮放,也會像之前一樣對異常值產生同樣的魯棒性。與 SGDRegressor相比,當被縮放時,必須再一次設置epsilon

  • HuberRegressor 對于少量樣本的數據用起來更有效,而 SGDRegressor需要對訓練數據進行多次傳遞(passes)才能產生相同的魯棒性。

示例
強異常數據集上的Huber回歸與嶺回歸

參考

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

請注意,這個估計器的實現與R實現的魯棒回歸并不相同。(http://www.ats.ucla.edu/stat/r/dae/rreg.htm)因為R實現做了加權最小二乘,權重是根據樣本殘差大于某一閾值的多少賦予的。

1.1.17 多項式回歸:用基函數擴展線性模型

機器學習中的一個常見模式是使用非線性函數對數據的進行變換訓練的線性模型。這種方法保持了線性方法的一般快速性能,同時允許它們適應范圍更廣的數據。

例如,可以通過從系數構造多項式特征(polynomial features)來擴展簡單的線性回歸。在標準線性回歸的情況下,您可能有一個二維數據的模型, 如下所示:

如果我們想用拋物面來擬合數據而不是平面,我們可以用二階多項式組合特征,這樣模型看起來就像這樣:

(有時令人驚訝的)觀察到,這仍然是一個線性模型:要看到這一點,想象一下創建一組新的特征。

有了這個數據的重新標記,我們的問題就可以寫出來了:

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

下面是一個應用于一維數據的例子,使用了不同程度的多項式特征:

此圖是使用 PolynomialFeatures轉換器創建的,該轉換器將輸入數據矩陣轉換為給定度數的新數據矩陣。使用如下:

>>> from sklearn.preprocessing import PolynomialFeatures
>>> import numpy as np
>>> X = np.arange(6).reshape(32)
>>> X
array([[01],
       [23],
       [45]])
>>> 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.]])

的特征已經從轉化為,現在可以在任何線性模型中使用。

這種預處理可以通過 Pipeline(流水線)工具來簡化。可以創建表示簡單多項式回歸的單個對象,并按以下方式使用:

>>> 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.])

基于多項式特征訓練的線性模型能夠準確地恢復輸入多項式系數。

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

例如,在處理布爾型特征時,對所有都是無用的;但是表示兩個布爾的聯合。這樣,我們就可以用線性分類器解決異或問題:

>>> from sklearn.linear_model import Perceptron
>>> from sklearn.preprocessing import PolynomialFeatures
>>> import numpy as np
>>> X = np.array([[00], [01], [10], [11]])
>>> y = X[:, 0] ^ X[:, 1]
>>> y
array([0110])
>>> X = PolynomialFeatures(interaction_only=True).fit_transform(X).astype(int)
>>> X
array([[1000],
       [1010],
       [1100],
       [1111]])
>>> clf = Perceptron(fit_intercept=False, max_iter=10, tol=None,
...                  shuffle=False).fit(X, y)

分類器“預測”是完美的:

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