1. 程式人生 > >機器學習實踐(十四)—sklearn之嶺迴歸(線性迴歸的改進)

機器學習實踐(十四)—sklearn之嶺迴歸(線性迴歸的改進)

帶有 L2 正則化的線性迴歸就是嶺迴歸。

嶺迴歸,其實也是一種線性迴歸。

只不過在演算法建立迴歸方程時候,加上正則化的限制,從而達到解決過擬合的效果。

加上正則化,也就是使權重滿足劃分正確結果的同時儘量的小

一、嶺迴歸 - API

  • 嶺迴歸 - API

    sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True,solver=“auto”, normalize=False)

    • 具有 L2 正則化的線性迴歸
    • alpha
      • 正則化力度,也叫 λ
      • λ 取值在01或者1
        10
    • fit_intercept
      • 偏置,預設True
    • solver
      • 會根據資料自動選擇優化方法
      • 如果資料集、特徵都比較大,可以設定為 ‘sag’ ,進行隨機梯度下降優化
    • normalize
      • 資料是否進行標準化
      • normalize=True 時會進行標準化操作,我們就可以不使用 StandardScaler 進行標準化操作啦
    • Ridge.coef_
      • 迴歸權重
    • Ridge.intercept_
      • 迴歸偏置

    All last four solvers support both dense and sparse data. However,
    only ‘sag’ supports sparse input when fit_intercept is True.

  • SGDRegressor-API 實現嶺迴歸

    SGDRegressor(penalty=‘l2’, loss=“squared_loss”)

    • 使用梯度下降API實現嶺迴歸

    • penalty

      • 乘法的意思,表示使用L2
    • loss

      • 損失函式使用什麼
      • squared_loss - 最小二乘
    • 推薦使用 Ridge,因為它實現了 SAG 優化

  • 嶺迴歸 - 實現了交叉驗證 - API

    sklearn.linear_model.RidgeCV(_BaseRidgeCV, RegressorMixin)

    • 具有 L2 正則化的線性迴歸,可以進行交叉驗證
    • coef_
      • 迴歸係數

二、案例 - 嶺迴歸 - 波士頓房價預測

  • 在之前案例基礎上使用嶺迴歸

  • 完整程式碼

    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    from sklearn.linear_model import Ridge
    from sklearn.datasets import load_boston
    from sklearn.metrics import mean_squared_error
    
    # 獲取資料
    boston = load_boston()
    
    # 劃分資料集
    x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=6)
    
    # 特徵工程:標準化
    # 1)例項化一個轉換器類
    transfer = StandardScaler()
    # 2)呼叫fit_transform
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)
    
    # 嶺迴歸的預估器流程
    estimator = Ridge()
    estimator.fit(x_train, y_train)
    y_predict = estimator.predict(x_test)
    print("嶺迴歸求出模型引數的方法預測的房屋價格為:\n", y_predict)
    
    # 列印模型相關屬性
    print("嶺迴歸求出的迴歸係數為:\n", estimator.coef_)
    print("嶺迴歸求出的偏置為:\n", estimator.intercept_)
    
    # 模型評估——均方誤差
    error = mean_squared_error(y_test, y_predict)
    print("嶺迴歸的均方誤差為:\n", error)