1. 程式人生 > 實用技巧 >線性迴歸的改進-嶺迴歸

線性迴歸的改進-嶺迴歸

1、 帶有L2正則化的線性迴歸-嶺迴歸

嶺迴歸,其實也是一種線性迴歸。只不過在演算法建立迴歸方程時候,加上正則化的限制,從而達到解決過擬合的效果

1.1 API

  • sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True,solver="auto", normalize=False)
    • 具有l2正則化的線性迴歸
    • alpha:正則化力度,也叫 λ
      • λ取值:0~1 1~10
    • solver:會根據資料自動選擇優化方法
      • sag:如果資料集、特徵都比較大,選擇該隨機梯度下降優化
    • normalize:資料是否進行標準化
      • normalize=False:可以在fit之前呼叫preprocessing.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.

Ridge方法相當於SGDRegressor(penalty='l2', loss="squared_loss"),只不過SGDRegressor實現了一個普通的隨機梯度下降學習,推薦使用Ridge(實現了SAG)

  • sklearn.linear_model.RidgeCV(_BaseRidgeCV, RegressorMixin)
    • 具有l2正則化的線性迴歸,可以進行交叉驗證
    • coef_:迴歸係數
class _BaseRidgeCV(LinearModel):
    def __init__(self, alphas=(0.1, 1.0, 10.0),
                 fit_intercept=True, normalize=False, scoring=None,
                 cv=None, gcv_mode=None,
                 store_cv_values=False):

1.2 觀察正則化程度的變化,對結果的影響?

  • 正則化力度越大,權重係數會越小
  • 正則化力度越小,權重係數會越大

1.3 波士頓房價預測

rd = Ridge(alpha=1.0)

rd.fit(x_train, y_train)
print("嶺迴歸的權重引數為:", rd.coef_)

y_rd_predict = std_y.inverse_transform(rd.predict(x_test))

print("嶺迴歸的預測的結果為:", y_rd_predict)


print("嶺迴歸的均方誤差為:", mean_squared_error(y_test, y_rd_predict))