特征工程(二)特征选择及python实现

  • 什么是特征选择

特征工程(Feature Selection),也叫做特征子集选择(Feature Subset Selection, FSS), 或者叫做属性选择(Attribute Selection)。是指从全部的数据特征中选取合适的特征,从而确保模型变得更好。

  • 为什么要做特征选择

特征数量越多模型就越好吗?
不是,特征越多,意味这模型的计算维度越大,模型也会更复杂,从而训练模型的时间就会越长。这叫做“维度灾难”。


特征工程(二)特征选择及python实现_第1张图片

特征选择的意义便是,剔除掉一些不相关的特征,剔除掉一些重复的特征,在保证特征有效性的同时减少特征数量,从而提高模型精确度,减少模型复杂度,减少模型训练时间。另外,对模型做筛选会帮助模型变得更有可解释性和逻辑性。这一点上篇也有讲到。

  • 特征选择的基本原则

特征与我们的目标是否具备发散性、相关性,我们要对相关性强的特征进行优先选择。

  • 特征选择常用的四种方法

  1. 方差选择法
    先计算各个特征的方差,根据阈值,选择方差大于阈值的特征。这个我想了很久,方差大的发散性就好,就适合做特征变量,方差低于阈值的,发散性就差,就不适合做特征变量。大白话就是计算每个特征的方差。
from sklearn.feature_selection import VarianceThreshold
varianceThreshold = VarianceThreshold(threshold =1)
varianceThreshold.fit_transform([['累计票房','豆瓣评分']])
varianceThreshold.get_support()

输出哪些变量可以作为可用的特征,哪些不可以。
当阈值为1时,我们发现两个特征都可以作为特征的。


特征工程(二)特征选择及python实现_第2张图片

当阈值为3时,我们发现两个特征只有一个可以作为有效特征。


特征工程(二)特征选择及python实现_第3张图片

不过这个方法可能在互联网行业适用,在有些精密领域,也许方差的大小很难确认,还是需要行业经验辅助。

  1. 相关系数法
    计算各个特征值和目标值的相关系数,选取相关性强的特征。
from sklearn.feature_selection import SelectKBest
from skleasrn.feature_selection import f_regression
selectKBest = SelectKBest(f_regression, k=2)
feature=data[['月份','季度','广告费用','客流量']]
bestFeature = selectKBest.fit_transform(feature, data[['销售额']])
selectKBest.get_support()
  1. 递归特征消除法
    使用一个基模型来进行多轮训练,训练多轮训练后,保留指定的特征数。
    递归特征前提时选择一种模型,例如SVM或者逻辑回归,然后选择一定数目的特征,进行模型评估,接下来对审改的特征重复上述动作,知道所有特征都遍历。最后,选择出模型效果最好的特征。
    递归特征消除法属于一种贪心算法。
    优点在于想法很好,缺点是当数据量很大时,这种贪心算法会导致计算很慢。
from sklearn.feature_selection import RFE
from sklearn.linear_model import LinearRegression
feature=data[['月份','季度','广告费用','客流量']]
rfe = RFE(estimator = LinearRegression(), n_features_to_select=2)
sFeature=rfe.fit_transform(feature, data[['销售额']])
rfe.get_support()
  1. 模型选择法
    把我们建好的模型对象传入选择器,然后会根据建好的模型,自动帮我们选择最好的特征值。该方法自动选择最佳的特征,特征数不需要我们定。
from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LinearRegression
IrModel = LinearRegression()
selectFromModel = SelectFromModel(IrModel)
selectFromModel.fit_transform(feature, data[['销售额']])
feature.columns[selectFromModel.get_support()]

你可能感兴趣的:(特征工程(二)特征选择及python实现)