前言
在机器学习的过程中,特征选择对预测结果的好坏程度,往往比模型的选择和参数的设置,有更深层的影响。如何合理的在维度较大的数据集中选择出最优的特征组合与维度,是经常困扰每一个数据工作者的事情。今天我们会从原理入手,为大家列出3种常见的特征处理方法,并通过Python实现自动化特征处理。
方法一:特征选取
特征选取,顾名思义,是在不对特征做出处理的情况下选取特征,作为自变量。其原理在于选取对因变量有显著相关影响(通过置信度为95%的显著性检验)的特征,过滤掉与因变量无关的特征,生成最后的特征集合。
在实际数据分析过程中,数据分析人员可通过Python和R中的summary命令检验每个特征对标签的相关性,选择子集:
在Python中实现自动化特征选取
Sklearn的GridSearchCV是调参和特征处理过程中很好用的一个工具,结合Pipeline包可以帮助使用者找到最优的参数组合与特征组合。缺点在于不适用于大批量的计算任务。首先导入特征选取的function:
fromsklearn.feature_selection import SelectKBest, f_classif
接下来我们结合一个逻辑回归方程,将特征选择与参数优化用Pipeline一起完成。
fromsklearn.pipeline import Pipeline
fromsklearn.model_selection import GridSearchCV
steps =[("kbest", SelectKBest(f_classif)),
("LG",LogisticRegression())]
pip =Pipeline(steps)
parameters={'kbest__k':np.arange(50,79,3)}
model =GridSearchCV(pip, param_grid=parameters, scoring='accuracy',cv=10)
“‘kbest__k':np.arange(50,79,3)”代表GridSearchCV将从50个特征时开始计算模型准确度,特征个数间隔为3往上叠加,最后的计算不超过79-1个特征,在这之间找到从结果倒退出的最好特征组合。79-1为我们数据的原始特征个数。
要单独说明的是,GridSearchCV的缺点是当数据量很大时,计算成本非常高,在没有较好的硬件条件的情况下,小派不建议大家对大型数据使用GridSearchCV。
方法二:线性判别分析
线性判别的原理:给定训练样例集,将样例投影到一条直线上,使得同类样例的投影点尽可能接近,异样样例的投影点尽可能远离;进行分类或降维时,将其投影到同样的直线上,再根据投影点的位置来确定新样本的类别。LDA与方差分析(ANOVA)和回归分析紧密相关,这两种分析方法也试图通过一些特征或测量值的线性组合来表示一个因变量。方差分析使用类别自变量和连续数因变量,而判别分析使用连续自变量和类别型因变量。
在Python中实现
From sklearn.discriminant_analysisimport LinearDiscriminantAnalysis
steps =[("LDA", LinearDiscriminantAnalysis()),
("LG",LogisticRegression())]
pip =Pipeline(steps)
parameters={'LDA':np.arange(50,79,3)}
model =GridSearchCV(pip, param_grid=parameters, scoring='accuracy',cv=10)
方法三:主成分分析
主成分分析(PCA)通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。PCA通过少数几个主成分来揭示多个变量间的内部结构,即从原始变量中导出少数几个主成分,使它们尽可能多地保留原始变量的信息,且彼此间互不相关,形成新的子集。
在Python中实现
fromsklearn.decomposition import PCA
steps =[("pca", PCA()),
("LG", LogisticRegression())]
pip =Pipeline(steps)
parameters={'pca__n_components':np.arange(25,49,3)}
model =GridSearchCV(pip, param_grid=parameters, scoring='accuracy',cv=10)
领取专属 10元无门槛券
私享最新 技术干货