el-select 多选取值_Python实战—Lasso回归选取关键特征

34afdc0267b5dba9b2975c72df4fc064.gif

芭蕉不展丁香结, 同向春风各自愁!

下雨天,宜安静、宜愁思

雨滴滴答答地下

远方的

还好吗?

el-select 多选取值_Python实战—Lasso回归选取关键特征_第1张图片

737415c19286c777ebd3259ee8c02458.png

今天,分享一下Lasso回归用于选取关键特征,数据探索性分析时,引入的特征太多,要直接用这些特征建模分析,需要对原始特征进一步筛选,只保留重要的特征,Lasso算法在模型系数绝对值之和小于某常数的条件下,谋求残差平方和最小,在变量选取方面的效果优于逐步回归、主成分回归、岭回归、偏最小二乘等,能较好的克服传统方法在模型选取上的不足。

我们选取部分GDP指标如下所示:

el-select 多选取值_Python实战—Lasso回归选取关键特征_第2张图片

Lasso回归概念

Lasso回归方法属于正则化方法的一种,是压缩估计。它通过构造一个惩罚函数得到一个较对精炼的模型。使用它压缩一些系数,同时设定一些系数为零,保留了子集收缩的优点,是一种处理具有复共线性数据的有偏估计。

Lasso基本原理

Lasso以缩小特征集(降阶)为思想,是一种收缩估计方法。Lasso方法可以将特征的系数进行压缩并使某些回归系数变为0,进而达到特征选择的目的,可以广泛地应用于模型改进与选择。通过选择惩罚函数,借用Lasso思想和方法实现特征选择的目的。模型选择本质上是寻求模型稀疏表达的过程,而这种过程可以通过优化一个“损失”+“惩罚”的函数问题来完成。

Lasso参数估计定义

其中,为非负正则参数,控制着模型的复杂程度。越大,对特征较多的线性模型的惩罚力度就越大,从而最终获得一个特征较少的模型,称为惩罚项。参数的确定可以采用交叉验证法,选取交叉验证误差最小的值。最后,按照得到的值,用全部数据重新拟合模型即可。

Lasso适用场景

当原始特征中存在多重共线性时,Laso回归不失为一种很好的处理共线性的方法,它可以有效地对存在多重共线性的特征进行筛选。在机器学习中,面对海量的数据,首先想到的就是降维,争取用尽可能少的数据解决问题,从这层意义上说,用Lasso模型进行特征选择也是一种有效的降维方法。从理论上说,Lasso对数据类型没有太多限制,可以接收任何类型的数据,而且一般不需要对特征进行标准化处理。

Lasso回归方法优缺点

Lasso回归方法的优点是可以弥补最小二乘估计法和逐步回归局部最优估计的不足,可以很好地进行特征的选择,有效地解决各特征之间存在多重共线性的问题。缺点是当存在一组高度相关的特征时,Lasso回归方法倾向于选择其中的一个特征,而忽视其他所有的特征,这种情况会导致结果的不稳定性。虽然Lasso回归方法存在弊端,但是在合适的场景中还是可以发挥不错的效果的。

得出Lasso回归后,各个特征的值如下表所示

el-select 多选取值_Python实战—Lasso回归选取关键特征_第3张图片

用Lasso回归,剔除值为0.000的系数,得出,影响国内生产总值的关键因素为,X1、X2、X3、X4、X5 、X6、X7、X8、X9、X11、X12,用这些特征进行下一步的研究。

737415c19286c777ebd3259ee8c02458.png

#Lasso模型程序

import numpy as np

import pandas as pd

from sklearn.linear_model import Lasso

inputfile = 'C:\\Users\\27342\\Desktop\\data.csv' #输入的数据文件

data = pd.read_csv(inputfile) #读取数据

lasso = Lasso(1000)  #调用Lasso()函数,设置λ的值为1000

lasso.fit(data.iloc[:,0:12],data['y'])

print('相关系数为:',np.round(lasso.coef_,5))  #输出结果,保留五位小数

## 计算相关系数非零的个数

print('相关系数非零个数为:',np.sum(lasso.coef_ != 0))

mask = lasso.coef_ != 0  #返回一个相关系数是否为零的布尔数组

print('相关系数是否为零:',mask)

outputfile = 'C:\\Users\\27342\\Desktop\\new_reg_data.csv'  #输出的数据文件

new_reg_data = data.iloc[:, mask]  #返回相关系数非零的数据

new_reg_data.to_csv(outputfile)  #存储数据

print('输出数据的维度为:',new_reg_data.shape)  #查看输出数据的维度

el-select 多选取值_Python实战—Lasso回归选取关键特征_第4张图片

你可能感兴趣的:(el-select,多选取值)