線性迴歸的改進-嶺迴歸
阿新 • • 發佈:2020-12-20
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))