岭回归
解决线性回归参数β可能出现的不合理的情况,当出现自变量的数量多余样本数的数量或自变量之间存在多重共线性的情况时回归系数无法按照模型公式来计算估计值实现思路就是在原来线性回归的基础之上加一个l2惩罚项(正则项)
交叉验证
让所有的数据都参与模型的构建和模型的测试(10重交叉验证)100样本量拆封成10组,选取一组数据,剩下的九组数据建立模型可得该组合的模型及其检验值,如此可循环十次,便可以获得十个模型及其检验值,选取最优模型及检验值,称之为十重交叉验证。
岭回归交叉验证法
RidgeCV(alphas=(0.1, 1.0, 10.0), fit_intercept=True, normalize=False,
scoring=None, cv=None)
alphas:⽤于指定多个lambda值的元组或数组对象,默认该参数包含0.1、1和10三种值。
fit_intercept:bool类型参数,是否需要拟合截距项,默认为True。
normalize:bool类型参数,建模时是否需要对数据集做标准化处理,默认为False。
scoring:指定⽤于评估模型的度量⽅法。
cv:指定交叉验证的重数。
岭回归模型运用
# 构造不同的Lambda值
Lambdas=np.logspace(-5,2,200) # 从-5到2之间生存200个等差数列
# 设置交叉验证的参数,对于每⼀个Lambda值,都执⾏10重交叉验证
ridge_cv=RidgeCV(alphas=Lambdas,normalize=True,
scoring=‘neg_mean_squared_error',
cv=10)
# 模型拟合
ridge_cv.fit(X_train,y_train)
# 返回最佳的lambda值
ridge_best_Lambda=ridge_cv.alpha_
ridge_best_Lambda
# 基于最佳的Lambda值建模
ridge = Ridge(alpha = ridge_best_alpha, normalize=True)
ridge.fit(X_train, y_train)
# 返回岭回归系数
pd.Series(index = ['Intercept'] + X_train.columns.tolist(),
data = [ridge.intercept_] + ridge.coef_.tolist())
Lasso回归
相对于岭回归,虽然岭回归确保了线性回归的估计值但是无法减低模型的复杂程度,所以出现了Lasso回归,l1惩罚项
Lasso回归交叉验证法
LassoCV(alphas=None, fit_intercept=True,
normalize=False,max_iter=1000, tol=0.0001)
alphas:指定具体的Lambda值列表⽤于模型的运算
fit_intercept:bool类型参数,是否需要拟合截距项,默认为True
normalize:bool类型参数,建模时是否需要对数据集做标准化处理,默认为False
max_iter:指定模型最⼤的迭代次数,默认为1000次
LASSO回归模型的交叉验证
lasso_cv=LassoCV(alphas=Lambdas,normalize=True,cv=10,max_iter=10000)
lasso_cv.fit(X_train,y_train)
# 输出最佳的lambda值
lasso_best_alpha=lasso_cv.alpha_
lasso_best_alpha
# 基于最佳的lambda值建模
lasso = Lasso(alpha = lasso_best_alpha, normalize=True, max_iter=10000)
# 对“类”加以数据实体,执⾏回归系数的运算
lasso.fit(X_train, y_train)
# 返回LASSO回归的系数
pd.Series(index = ['Intercept'] + X_train.columns.tolist(),
data = [lasso.intercept_] + lasso.coef_.tolist())