机器学习sklearn(78):算法实例(三十五)回归(七)线性回归大家族(五)多重共线性:岭回归与Lasso(二)Lasso
2021/7/3 1:23:04
本文主要是介绍机器学习sklearn(78):算法实例(三十五)回归(七)线性回归大家族(五)多重共线性:岭回归与Lasso(二)Lasso,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
3 Lasso
3.1 Lasso与多重共线性
import numpy as np import pandas as pd from sklearn.linear_model import Ridge, LinearRegression, Lasso from sklearn.model_selection import train_test_split as TTS from sklearn.datasets import fetch_california_housing as fch import matplotlib.pyplot as plt housevalue = fch() X = pd.DataFrame(housevalue.data) y = housevalue.target X.columns = ["住户收入中位数","房屋使用年代中位数","平均房间数目" ,"平均卧室数目","街区人口","平均入住率","街区的纬度","街区的经度"] X.head() Xtrain,Xtest,Ytrain,Ytest = TTS(X,y,test_size=0.3,random_state=420) #恢复索引 for i in [Xtrain,Xtest]: i.index = range(i.shape[0]) #线性回归进行拟合 reg = LinearRegression().fit(Xtrain,Ytrain) (reg.coef_*100).tolist() #岭回归进行拟合 Ridge_ = Ridge(alpha=0).fit(Xtrain,Ytrain) (Ridge_.coef_*100).tolist() #Lasso进行拟合 lasso_ = Lasso(alpha=0).fit(Xtrain,Ytrain) (lasso_.coef_*100).tolist()
#岭回归进行拟合 Ridge_ = Ridge(alpha=0.01).fit(Xtrain,Ytrain) (Ridge_.coef_*100).tolist() #Lasso进行拟合 lasso_ = Lasso(alpha=0.01).fit(Xtrain,Ytrain) (lasso_.coef_*100).tolist()这样就不会报任何错误了。
#加大正则项系数,观察模型的系数发生了什么变化 Ridge_ = Ridge(alpha=10**4).fit(Xtrain,Ytrain) (Ridge_.coef_*100).tolist() lasso_ = Lasso(alpha=10**4).fit(Xtrain,Ytrain) (lasso_.coef_*100).tolist() #看来10**4对于Lasso来说是一个过于大的取值 lasso_ = Lasso(alpha=1).fit(Xtrain,Ytrain) (lasso_.coef_*100).tolist() #将系数进行绘图 plt.plot(range(1,9),(reg.coef_*100).tolist(),color="red",label="LR") plt.plot(range(1,9),(Ridge_.coef_*100).tolist(),color="orange",label="Ridge") plt.plot(range(1,9),(lasso_.coef_*100).tolist(),color="k",label="Lasso") plt.plot(range(1,9),[0]*8,color="grey",linestyle="--") plt.xlabel('w') #横坐标是每一个特征所对应的系数 plt.legend() plt.show()
from sklearn.linear_model import LassoCV #自己建立Lasso进行alpha选择的范围 alpharange = np.logspace(-10, -2, 200,base=10) #其实是形成10为底的指数函数 #10**(-10)到10**(-2)次方 alpharange.shape Xtrain.head() lasso_ = LassoCV(alphas=alpharange #自行输入的alpha的取值范围 ,cv=5 #交叉验证的折数 ).fit(Xtrain, Ytrain) #查看被选择出来的最佳正则化系数 lasso_.alpha_ #调用所有交叉验证的结果 lasso_.mse_path_ lasso_.mse_path_.shape #返回每个alpha下的五折交叉验证结果 lasso_.mse_path_.mean(axis=1) #有注意到在岭回归中我们的轴向是axis=0吗? #在岭回归当中,我们是留一验证,因此我们的交叉验证结果返回的是,每一个样本在每个alpha下的交叉验证结果 #因此我们要求每个alpha下的交叉验证均值,就是axis=0,跨行求均值 #而在这里,我们返回的是,每一个alpha取值下,每一折交叉验证的结果 #因此我们要求每个alpha下的交叉验证均值,就是axis=1,跨列求均值 #最佳正则化系数下获得的模型的系数结果 lasso_.coef_ lasso_.score(Xtest,Ytest) #与线性回归相比如何? reg = LinearRegression().fit(Xtrain,Ytrain) reg.score(Xtest,Ytest) #使用lassoCV自带的正则化路径长度和路径中的alpha个数来自动建立alpha选择的范围 ls_ = LassoCV(eps=0.00001 ,n_alphas=300 ,cv=5 ).fit(Xtrain, Ytrain) ls_.alpha_ ls_.alphas_ #查看所有自动生成的alpha取值 ls_.alphas_.shape ls_.score(Xtest,Ytest) ls_.coef_
这篇关于机器学习sklearn(78):算法实例(三十五)回归(七)线性回归大家族(五)多重共线性:岭回归与Lasso(二)Lasso的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-01-24手把手教你使用MDK仿真调试
- 2024-01-10基于“小数据”的机器学习
- 2024-01-08扩展卡尔曼滤波:提高机器学习性能的利器
- 2023-12-26各种二端口滤波器网络仿真遇到的问题
- 2023-12-14机器学习-搜索技术:从技术发展到应用实战的全面指南
- 2023-12-12机器学习 - 决策树:技术全解与案例实战
- 2023-12-05机器学习-学习率:从理论到实战,探索学习率的调整策略
- 2023-12-04解锁机器学习-梯度下降:从技术到实战的全面指南
- 2023-11-30回归算法全解析!一文读懂机器学习中的回归模型
- 2023-11-30机器学习 - 似然函数:概念、应用与代码实例