机器学习Sklearn实战——其他线性模型

其他线性模型

岭回归

 w{}'=2(xw-y)x +2aw

相比于传统的ols,在梯度下降的时候多了一项-learning_rate*2aw。无论w是正还是负,都让结果的绝对值变小(让系数变小,防止过拟合)

正则化 

欠拟合:系数少,系数小简单

过拟合:系数多,系数大复杂

 \eta就是learning_rate一般取0.01 

lasso

弹性网络

多任务套索

多任务弹性网 

最小角度回归

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn import datasets 
# cv交叉验证
from sklearn.linear_model import LinearRegression,Ridge,Lasso,ElasticNet,ElasticNetCV,LassoCV   
diabetes = datasets.load_diabetes()
X = diabetes["data"]
y = diabetes["target"]
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.15)
#使用线性回归
lr = LinearRegression()
lr.fit(X_train,y_train)
lr.score(X_test,y_test)
y_ = lr.predict(X_test)
mean_squared_error(y_test,y_)

结果:

0.4954938521776219
3052.1767800521984
####使用岭回归
ridge = Ridge(alpha=0.1)
ridge.fit(X_train,y_train)
y_ = ridge.predict(X_test)

print(ridge.score(X_test,y_test))
mean_squared_error(y_,y_test)

结果: 

0.4853455916799041
3113.5720379350823

 数据不存在共线性的问题(官方提供的数据),因此线性回归的效果比岭回归的效果要好

####使用ridgeCV,找最佳alpha
ridgeCV = RidgeCV(alphas=np.linspace(0.01,5,50),scoring = "r2")
ridgeCV.fit(X_train,y_train)
y_ = ridgeCV.predict(X_test)

print(ridge.score(X_test,y_test))
mean_squared_error(y_,y_test)

结果:

0.4853455916799041
3117.234991068462
ridgeCV.alpha_

结果:

0.11183673469387755
print(np.linspace(0.01,5,50))   #等差数列
print(np.logspace(0.01,5,50))   #等比数列  数字比较小的时候

结果:

[0.01       0.11183673 0.21367347 0.3155102  0.41734694 0.51918367
 0.62102041 0.72285714 0.82469388 0.92653061 1.02836735 1.13020408
 1.23204082 1.33387755 1.43571429 1.53755102 1.63938776 1.74122449
 1.84306122 1.94489796 2.04673469 2.14857143 2.25040816 2.3522449
 2.45408163 2.55591837 2.6577551  2.75959184 2.86142857 2.96326531
 3.06510204 3.16693878 3.26877551 3.37061224 3.47244898 3.57428571
 3.67612245 3.77795918 3.87979592 3.98163265 4.08346939 4.18530612
 4.28714286 4.38897959 4.49081633 4.59265306 4.6944898  4.79632653
 4.89816327 5.        ]
[1.02329299e+00 1.29370940e+00 1.63558632e+00 2.06780797e+00
 2.61424893e+00 3.30509292e+00 4.17850002e+00 5.28271453e+00
 6.67872986e+00 8.44365757e+00 1.06749868e+01 1.34959693e+01
 1.70624274e+01 2.15713612e+01 2.72718303e+01 3.44787109e+01
 4.35900889e+01 5.51092486e+01 6.96724728e+01 8.80841888e+01
 1.11361403e+02 1.40789877e+02 1.77995148e+02 2.25032320e+02
 2.84499582e+02 3.59681721e+02 4.54731565e+02 5.74899375e+02
 7.26822849e+02 9.18893768e+02 1.16172154e+03 1.46871921e+03
 1.85684439e+03 2.34753591e+03 2.96789806e+03 3.75219771e+03
 4.74375716e+03 5.99734709e+03 7.58221192e+03 9.58589468e+03
 1.21190726e+04 1.53216706e+04 1.93705904e+04 2.44894816e+04
 3.09610960e+04 3.91429057e+04 4.94868483e+04 6.25642915e+04
 7.90975925e+04 1.00000000e+05]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值