以是正则化系数只要小于40或50,模子的拟合结果应该都不错。
- 正则化系数越小则模子拟合越好,但过拟合环境也越轻易产生。
- 正则化系数越大,则越不轻易过拟合,但模子的毛病越大。
RidgeCV通过交错验证,可以快速返回“最优”的正则化系数。
当这只是基于数值计较的,也许最终功效并不切合营业逻辑。
好比本次模子的变量系数。
- # 输出模子的变量系数
- print(rcv.coef_)
- # 输出功效
- [ 0.03321449 -0.30956185 0.05551208 0.59067449]
发明收入的系数为负值,这必定是不公道的。
下面通过岭迹图举办进一步说明。
岭迹图是在差异正则化系数下变量系数的轨迹。
- ridge = Ridge()
- coefs = []
- # 差异正则化系数下的变量系数
- for alpha in alphas:
- ridge.set_params(alpha=alpha)
- ridge.fit(X, y)
- coefs.append(ridge.coef_)
-
- # 绘制变量系数随正则化系数变革的轨迹
- ax = plt.gca()
- ax.plot(alphas, coefs)
- ax.set_xscale('log')
- plt.xlabel('alpha')
- plt.ylabel('weights')
- plt.title('Ridge coefficients as a function of the regularization')
- plt.axis('tight')
- plt.show()
输出功效。

- ①有两个变量的系数在差异的正则化系数下都很靠近于0,那么可以选择删除。
- ②正则化系数越大,对变量系数的处罚越大,全部变量的系数都趋近于0。
- ③有一个变量的系数变革很是大(有正有负),声名该系数的方差大,存在共线性的环境。
综合模子均方偏差和岭迹图的环境,选取正则化系数为40。
- 假如大于40,则模子均方偏差增大,模子拟合结果变差。
- 假如小于40,则变量系数不不变,共线性没有获得克制。
那么就来看看,当正则化系数为40时,模子变量系数的环境。
- ridge.set_params(alpha=40)
- ridge.fit(X, y)
- # 输出变量系数
- print(ridge.coef_)
- # 输出模子R²
- print(ridge.score(X, y))
- # 猜测数据
- print(np.exp(ridge.predict(X_new)[:5]))
- # 输出功效
- [0.03293109 0.09907747 0.04976305 0.12101456]
- 0.4255673043353688
- [934.79025945 727.11042209 703.88143602 759.04342764 709.54172995]
发明变量系数都为正值,切合营业直觉。
收入和内地人均收入这两个变量可以保存,其它两个删除。
二、LASSO回归
LASSO回归,在令回归系数的绝对值之和小于一个常数的束缚前提下,使残差平方和最小化。
从而可以或许发生某些严酷便是0的回归系数,获得表明力较强的模子。
对比岭回归,LASSO回偿还可以举办变量筛选。
行使LassoCV交错验证确定最优的正则化系数。
- # 天生正则化系数
- lasso_alphas = np.logspace(-3, 0, 100, base=10)
- # 行使差异的正则化系数对模子举办交错验证
- lcv = LassoCV(alphas=lasso_alphas, cv=10)
- # 行使数据集实习(fit)
- lcv.fit(X, y)
- # 输出最优参数,正则化系数及响应模子R²
- print('The best alpha is {}'.format(lcv.alpha_))
- print('The r-square is {}'.format(lcv.score(X, y)))
-
- # 输出功效
- The best alpha is 0.04037017258596556
- The r-square is 0.4426451069862233
发明最优的正则化系数为0.04,模子R²为0.443。
接下来获取差异正则化系数下的变量系数轨迹。
- lasso = Lasso()
- lasso_coefs = []
- # 差异正则化系数下的变量系数
- for alpha in lasso_alphas:
- lasso.set_params(alpha=alpha)
- lasso.fit(X, y)
- lasso_coefs.append(lasso.coef_)
-
- # 绘制变量系数随正则化系数变革的轨迹
- ax = plt.gca()
- ax.plot(lasso_alphas, lasso_coefs)
- ax.set_xscale('log')
- plt.xlabel('alpha')
- plt.ylabel('weights')
- plt.title('Lasso coefficients as a function of the regularization')
- plt.axis('tight')
- plt.show()
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|