python機器學習sklearn 嶺回歸(Ridge、RidgeCV)

【本文轉(zhuǎn)載自cdsn上騰訊數(shù)據(jù)架構(gòu)師的一篇文章】

1、介紹

Ridge 回歸通過對系數(shù)的大小施加懲罰來解決 普通最小二乘法 的一些問題。 嶺系數(shù)最小化的是帶罰項的殘差平方和,

194720-20181101165501041-1075052261.png

其中,α≥0α≥0 是控制系數(shù)收縮量的復雜性參數(shù): αα 的值越大,收縮量越大,這樣系數(shù)對共線性的魯棒性也更強。

2、參數(shù)

alpha:{float,array-like},shape(n_targets)
      正則化強度; 必須是正浮點數(shù)。 正則化改善了問題的條件并減少了估計的方差。 較大的值指定較強的正則化。 Alpha對應于其他線性模型(如Logistic回歸或LinearSVC)中的C^-1。

如果傳遞數(shù)組,則假定懲罰被特定于目標。 因此,它們必須在數(shù)量上對應。

copy_X:boolean,可選,默認為True
      如果為True,將復制X; 否則,它可能被覆蓋。

fit_intercept:boolean
      是否計算此模型的截距。 如果設置為false,則不會在計算中使用截距(例如,數(shù)據(jù)預期已經(jīng)居中)。

max_iter:int,可選
      共軛梯度求解器的最大迭代次數(shù)。 對于’sparse_cg’和’lsqr’求解器,默認值由scipy.sparse.linalg確定。 對于’sag’求解器,默認值為1000。

normalize:boolean,可選,默認為False
      如果為真,則回歸X將在回歸之前被歸一化。 當fit_intercept設置為False時,將忽略此參數(shù)。 當回歸量歸一化時,注意到這使得超參數(shù)學習更加魯棒,

并且?guī)缀醪灰蕾囉跇颖镜臄?shù)量。 相同的屬性對標準化數(shù)據(jù)無效。 然而,如果你想標準化,請在調(diào)用normalize = False訓練估計器之前,使用preprocessing.StandardScaler處理數(shù)據(jù)。

solver:{‘a(chǎn)uto’,’svd’,’cholesky’,’lsqr’,’sparse_cg’,’sag’}
      用于計算的求解方法:
      ‘a(chǎn)uto’根據(jù)數(shù)據(jù)類型自動選擇求解器。
      ‘svd’使用X的奇異值分解來計算Ridge系數(shù)。對于奇異矩陣比’cholesky’更穩(wěn)定。
      ‘cholesky’使用標準的scipy.linalg.solve函數(shù)來獲得閉合形式的解。
      ‘sparse_cg’使用在scipy.sparse.linalg.cg中找到的共軛梯度求解器。作為迭代算法,這個求解器比大規(guī)模數(shù)據(jù)(設置tol和max_iter的可能性)的“cholesky”更合適。
      ‘lsqr’使用專用的正則化最小二乘常數(shù)scipy.sparse.linalg.lsqr。它是最快的,但可能不是在舊的scipy版本可用。它還使用迭代過程。
      ‘sag’使用隨機平均梯度下降。它也使用迭代過程,并且當n_samples和n_feature都很大時,通常比其他求解器更快。注意,“sag”快速收斂僅在具有近似相同尺度的特征上被保證。

可以使用sklearn.preprocessing的縮放器預處理數(shù)據(jù)。
      所有最后四個求解器支持密集和稀疏數(shù)據(jù)。但是,當fit_intercept為True時,只有’sag’支持稀疏輸入。
      新版本0.17支持:隨機平均梯度下降解算器。

tol:float 解的精度。

random_state:int seed,RandomState實例或None(默認)
      偽隨機數(shù)生成器的種子,當混洗數(shù)據(jù)時使用。 僅用于’sag’求解器。
      新版本0.17:random_state支持隨機平均漸變。

3、返回值

coef_:array,shape(n_features,)或(n_targets,n_features)

4、權(quán)重向量。

intercept_:float | array,shape =(n_targets,)
    決策函數(shù)的獨立項,即截距。 如果fit_intercept = False,則設置為0.0。

n_iter_:array或None,shape(n_targets,)
    每個目標的實際迭代次數(shù)。 僅適用于sag和lsqr求解器。 其他求解器將返回None。在版本0.17中出現(xiàn)。

5、實例代碼

print(__doc__) 
from sklearn.model_selection import train_test_split 
import matplotlib.pyplot as plt 
import numpy as np 
from sklearn.linear_model import Ridge,RidgeCV 
import matplotlib.font_manager as fm
myfont = fm.FontProperties(fname='C:WindowsFontssimsun.ttc')
data=[
    [0.607492, 3.965162], [0.358622, 3.514900], [0.147846, 3.125947], [0.637820, 4.094115], [0.230372, 3.476039],
    [0.070237, 3.210610], [0.067154, 3.190612], [0.925577, 4.631504], [0.717733, 4.295890], [0.015371, 3.085028],
    [0.067732, 3.176513], [0.427810, 3.816464], [0.995731, 4.550095], [0.738336, 4.256571], [0.981083, 4.560815],
    [0.247809, 3.476346], [0.648270, 4.119688], [0.731209, 4.282233], [0.236833, 3.486582], [0.969788, 4.655492],
    [0.335070, 3.448080], [0.040486, 3.167440], [0.212575, 3.364266], [0.617218, 3.993482], [0.541196, 3.891471],
    [0.526171, 3.929515], [0.378887, 3.526170], [0.033859, 3.156393], [0.132791, 3.110301], [0.138306, 3.149813]
] #生成X和y矩陣
dataMat = np.array(data) # X = dataMat[:,0:1]   # 變量x
X = dataMat[:,0:1]   # 變量x
y = dataMat[:,1]   #變量y
X_train,X_test,y_train,y_test = train_test_split(X,y ,train_size=0.8) # model = Ridge(alpha=0.5)
model = RidgeCV(alphas=[0.1, 1.0, 10.0])  # 通過RidgeCV可以設置多個參數(shù)值,算法使用交叉驗證獲取最佳參數(shù)值
model.fit(X_train, y_train)   # 線性回歸建模
 # print('系數(shù)矩陣:
',model.coef_) 
# print('線性回歸模型:
',model) 
# print('交叉驗證最佳alpha值',model.alpha_)  # 只有在使用RidgeCV算法時才有效
 # 使用模型預測
y_predicted = model.predict(X_test)
plt.scatter(X_train, y_train, marker='o',color='green',label='訓練數(shù)據(jù)') # 繪制散點圖 參數(shù):x橫軸 y縱軸
plt.scatter(X_test, y_predicted, marker='*',color='blue',label='測試數(shù)據(jù)')
plt.legend(loc=2,prop=myfont)
plt.plot(X_test, y_predicted,c='r') # 繪制x軸和y軸坐標
plt.xlabel("x")
plt.ylabel("y") # 顯示圖形
plt.show()

6、顯示圖形

194720-20181101170207424-531710595.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容