加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Python数据科学:正则化方法

发布时间:2019-01-27 11:14:58 所属栏目:教程 来源:小F
导读:本文首要先容,Python数据科学:正则化要领。正则化要领的呈现,通过紧缩要领(正则化要领)举办回归。 正则化要领首要包罗岭回归与LASSO回归。 一、岭回归 岭回归通过工钱插手的处罚项(束缚项),对回归系数举办预计,为有偏预计。 有偏预计,应承预计有不大

以是正则化系数只要小于40或50,模子的拟合结果应该都不错。

  • 正则化系数越小则模子拟合越好,但过拟合环境也越轻易产生。
  • 正则化系数越大,则越不轻易过拟合,但模子的毛病越大。

RidgeCV通过交错验证,可以快速返回“最优”的正则化系数。

当这只是基于数值计较的,也许最终功效并不切合营业逻辑。

好比本次模子的变量系数。

  1. # 输出模子的变量系数 
  2. print(rcv.coef_) 
  3. # 输出功效 
  4. [ 0.03321449 -0.30956185  0.05551208  0.59067449] 

发明收入的系数为负值,这必定是不公道的。

下面通过岭迹图举办进一步说明。

岭迹图是在差异正则化系数下变量系数的轨迹。

  1. ridge = Ridge() 
  2. coefs = [] 
  3. # 差异正则化系数下的变量系数 
  4. for alpha in alphas: 
  5.     ridge.set_params(alpha=alpha) 
  6.     ridge.fit(X, y) 
  7.     coefs.append(ridge.coef_) 
  8.  
  9. # 绘制变量系数随正则化系数变革的轨迹 
  10. ax = plt.gca() 
  11. ax.plot(alphas, coefs) 
  12. ax.set_xscale('log') 
  13. plt.xlabel('alpha') 
  14. plt.ylabel('weights') 
  15. plt.title('Ridge coefficients as a function of the regularization') 
  16. plt.axis('tight') 
  17. plt.show() 

输出功效。

Python数据科学:正则化要领

  • ①有两个变量的系数在差异的正则化系数下都很靠近于0,那么可以选择删除。
  • ②正则化系数越大,对变量系数的处罚越大,全部变量的系数都趋近于0。
  • ③有一个变量的系数变革很是大(有正有负),声名该系数的方差大,存在共线性的环境。

综合模子均方偏差和岭迹图的环境,选取正则化系数为40。

  • 假如大于40,则模子均方偏差增大,模子拟合结果变差。
  • 假如小于40,则变量系数不不变,共线性没有获得克制。

那么就来看看,当正则化系数为40时,模子变量系数的环境。

  1. ridge.set_params(alpha=40) 
  2. ridge.fit(X, y) 
  3. # 输出变量系数 
  4. print(ridge.coef_) 
  5. # 输出模子R² 
  6. print(ridge.score(X, y)) 
  7. # 猜测数据 
  8. print(np.exp(ridge.predict(X_new)[:5])) 
  9. # 输出功效 
  10. [0.03293109 0.09907747 0.04976305 0.12101456] 
  11. 0.4255673043353688 
  12. [934.79025945 727.11042209 703.88143602 759.04342764 709.54172995] 

发明变量系数都为正值,切合营业直觉。

收入和内地人均收入这两个变量可以保存,其它两个删除。

二、LASSO回归

LASSO回归,在令回归系数的绝对值之和小于一个常数的束缚前提下,使残差平方和最小化。

从而可以或许发生某些严酷便是0的回归系数,获得表明力较强的模子。

对比岭回归,LASSO回偿还可以举办变量筛选。

行使LassoCV交错验证确定最优的正则化系数。

  1. # 天生正则化系数 
  2. lasso_alphas = np.logspace(-3, 0, 100, base=10) 
  3. # 行使差异的正则化系数对模子举办交错验证 
  4. lcv = LassoCV(alphas=lasso_alphas, cv=10) 
  5. # 行使数据集实习(fit) 
  6. lcv.fit(X, y) 
  7. # 输出最优参数,正则化系数及响应模子R² 
  8. print('The best alpha is {}'.format(lcv.alpha_)) 
  9. print('The r-square is {}'.format(lcv.score(X, y))) 
  10.  
  11. # 输出功效 
  12. The best alpha is 0.04037017258596556 
  13. The r-square is 0.4426451069862233 

发明最优的正则化系数为0.04,模子R²为0.443。

接下来获取差异正则化系数下的变量系数轨迹。

  1. lasso = Lasso() 
  2. lasso_coefs = [] 
  3. # 差异正则化系数下的变量系数 
  4. for alpha in lasso_alphas: 
  5.     lasso.set_params(alpha=alpha) 
  6.     lasso.fit(X, y) 
  7.     lasso_coefs.append(lasso.coef_) 
  8.  
  9. # 绘制变量系数随正则化系数变革的轨迹 
  10. ax = plt.gca() 
  11. ax.plot(lasso_alphas, lasso_coefs) 
  12. ax.set_xscale('log') 
  13. plt.xlabel('alpha') 
  14. plt.ylabel('weights') 
  15. plt.title('Lasso coefficients as a function of the regularization') 
  16. plt.axis('tight') 
  17. plt.show() 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读