sklearn學習筆記之嶺回歸


嶺回歸

嶺回歸是一種專用於共線性數據分析的有偏估計回歸方法,實質上是一種改良的最小二乘估計法,通過放棄最小二乘法的無偏性,以損失部分信息、降低精度為代價獲得回歸系數更為符合實際、更可靠的回歸方法,對病態數據的擬合要強於最小二乘法。

使用sklearn.linear_model.Ridge進行嶺回歸

一個簡單的例子

from sklearn.linear_model import Ridge
clf = Ridge(alpha=.5)
X = [[0,0],[0,0],[1,1]]
y = [0,.1,1]
clf.fit(X,y)
print(clf.coef_)
print(clf.intercept_)

運行結果如下:

image

使用方法

實例化

Ridge類已經設置了一系列默認的參數,因此clf = Ridge()即可以完成實例化。
但是,了解一下它的參數還是有必要的:

  • alpha:正則化項的系數

  • copy_X:是否對X數組進行復制,默認為True,如果選False的話會覆蓋原有X數組

  • fit_intercept:是否需要計算截距

  • max_iter:最大的迭代次數,對於sparse_cglsqr而言,默認次數取決於scipy.sparse.linalg,對於sag而言,則默認為1000次。

  • normalize:標准化X的開關,默認為False

  • solver:在計算過程中選擇的解決器

    • auto:自動選擇
    • svd:奇異值分解法,比cholesky更適合計算奇異矩陣
    • cholesky:使用標准的scipy.linalg.solve方法
    • sparse_cg:共軛梯度法,scipy.sparse.linalg.cg,適合大數據的計算
    • lsqr:最小二乘法,scipy.sparse.linalg.lsqr
    • sag:隨機平均梯度下降法,在大數據下表現良好。

    注:后四個方法都支持稀疏和密集數據,而sag僅在fit_intercept為True時支持密集數據。

  • tol:精度

  • random_statesag的偽隨機種子

以上就是所有的初始化參數,當然,初始化后還可以通過set_params方法重新進行設定。

回歸分析

在實例化Ridge類以后,就可以直接使用Ridge中集成的方法來進行回歸了,與絕大多數的sklearn類一樣,Ridge使用fit方法執行計算

  • fit(X,y,sample\_weight=None)X是一個array類型,這是特征矩陣,包含着數據集每一條記錄的特征值(N*M),y是結果矩陣,同樣是array類型,可以是N*1的形狀,也可以是N*K的形狀,sample_weight代表着權重,可以是一個實數,也可以給每一條記錄分配一個值(array類型)。

得到回歸函數后,我們可以通過predict來使用回歸函數。

  • predict(X)X測試數據集,此方法將返回回歸后的結果

對於模型的好壞,Ridge當然提供了評價的方法——score

  • score(X,y,sample_weight=None):X為測試數據,y是測試數據的實際值,類型與fit中的相同,sample是權重

在sklearn中並沒有提供直接的查看回歸方程的函數,因此查看的時候需要自己轉化一下。其實,sklearn就是把相關系數和殘差分開保存了,因此,查看的時候要調用coef_intercept_兩個屬性。

  • coef_:相關系數(array類型)
  • intercept_:截距,在fit_intercept=False的時候,將會返回0

可能有用的方法

這些方法在sklearn的基類中就已經集成,但在一般情況下,通常不會用到。

  • get_params(deep=True):這是獲取Ridge實例屬性取值的方法,可以忽略
  • set_params(**params):與get_params方法相對,是設置屬性值,在嶺回歸中還是比較重要的,畢竟嶺回歸的alpha值在一開始可能並不知道,需要在一個范圍內進行嘗試,因此,利用這個方法來設置alpha值還是比較有用的。

以上就是Ridge的總體介紹,在現實生活中,一般不會想上面的實例中的直接使用定值來計算,下面是一個更實際一點的例子:

# Author: Fabian Pedregosa -- <fabian.pedregosa@inria.fr>
# License: BSD 3 clause

import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model

# X is the 10x10 Hilbert matrix
X = 1. / (np.arange(1, 11) + np.arange(0, 10)[:, np.newaxis])
y = np.ones(10)

###############################################################################
# Compute paths

n_alphas = 200
alphas = np.logspace(-10, -2, n_alphas)
clf = linear_model.Ridge(fit_intercept=False)

coefs = []
for a in alphas:
    clf.set_params(alpha=a)
    clf.fit(X, y)
    coefs.append(clf.coef_)

###############################################################################
# Display results

ax = plt.gca()
ax.set_color_cycle(['b', 'r', 'g', 'c', 'k', 'y', 'm'])

ax.plot(alphas, coefs)
ax.set_xscale('log')
ax.set_xlim(ax.get_xlim()[::-1])  # reverse axis
plt.xlabel('alpha')
plt.ylabel('weights')
plt.title('Ridge coefficients as a function of the regularization')
plt.axis('tight')
plt.show()

這個例子中,alpha為1e-10~1e-2,以對數值等分,對每一個aplha進行一次計算,最后畫出嶺跡圖。嶺跡圖的樣子如下:

image

到此,嶺回歸的內容就結束了,我是sklearn的小小搬運工^_^/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM