【本文轉(zhuǎn)載自cdsn上騰訊數(shù)據(jù)架構(gòu)師的一篇文章】
1、介紹
Ridge 回歸通過對系數(shù)的大小施加懲罰來解決 普通最小二乘法 的一些問題。 嶺系數(shù)最小化的是帶罰項的殘差平方和,

其中,α≥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、顯示圖形
