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


  1、介紹

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

    

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

    

  2、參數    

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

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

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

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

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

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

    並且幾乎不依賴於樣本的數量。 相同的屬性對標准化數據無效。 然而,如果你想標准化,請在調用normalize = False訓練估計器之前,使用preprocessing.StandardScaler處理數據。

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

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

    tol:float   解的精度。

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

  3、返回值    

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


  4、權重向量。

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

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

 

  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:\Windows\Fonts\simsun.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可以設置多個參數值,算法使用交叉驗證獲取最佳參數值
model.fit(X_train, y_train)   # 線性回歸建模
# print('系數矩陣:\n',model.coef_)
# print('線性回歸模型:\n',model)
# print('交叉驗證最佳alpha值',model.alpha_)  # 只有在使用RidgeCV算法時才有效
# 使用模型預測
y_predicted = model.predict(X_test)
plt.scatter(X_train, y_train, marker='o',color='green',label='訓練數據')

# 繪制散點圖 參數:x橫軸 y縱軸
plt.scatter(X_test, y_predicted, marker='*',color='blue',label='測試數據')
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、顯示圖形

   

   參考:https://blog.csdn.net/luanpeng825485697/article/details/79829778

 


免責聲明!

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



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