作者:Sugandha Lahoti
翻译:李洁
校对:杨光
本文约3500字,建议阅读13分钟。
本文中,我们将研究从数据集中选择特征的不同方法;同时通过使用Python中Scikit-learn (sklearn)库实现讨论了特征选择算法的类型。
注:本文节选自Ankit Dixit所著的《集成机器学习》(Ensemble Machine Learning)一书。这本书组合强大的机器学习算法来建立优化模型,可以作为初学者的指南。
在本文中,我们将研究从数据集中选择特征的不同方法;同时通过使用Python中Scikit-learn (sklearn)库实现讨论了特征选择算法的类型:
单变量选择
递归特征消除(RFE)
主成分分析(PCA)
选择重要特征(特征重要度)
我们简要介绍了前三种算法及其实现。然后我们将详细讨论在数据科学社区中广泛使用的选择重要特征(特性重要度)部分的内容。
单变量选择
统计测试可用于选择那些与输出变量关系最强的特征。
scikit-learn库提供了SelectKBest类,它可以与一组不同的统计测试一起使用,以选择特定数量的特征。
下面的例子使用chi²非负性特征的统计测试,从皮马印第安人糖尿病发病数据集中选择了四个最好的特征:
1. #Feature Extraction with Univariate Statistical Tests (Chi-squared for classification)
2. #Import the required packages
3. #Import pandas to read csv import pandas
4. #Import numpy for array related operations import numpy
5. #Import sklearn's feature selection algorithm
6. from sklearn.feature_selection import SelectKBest
7. #Import chi2 for performing chi square test from sklearn.feature_selection import chi2
8. #URL for loading the dataset
9. url ="https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians diabetes/pima-indians-diabetes.data"
10. #Define the attribute names
11. names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
12. #Create pandas data frame by loading the data from URL
13. dataframe = pandas.read_csv(url, names=names
14. #Create array from data values
15. array = dataframe.values
16. #Split the data into input and target
17. X = array[:, 0:8]
18. Y = array[:,8]
19. #We will select the features using chi square
20. test = SelectKBest(score_func=chi2, k=4)
21. #Fit the function for ranking the features by score
22. fit = test.fit(X, Y)
23. #Summarize scores numpy.set_printoptions(precision=3) print(fit.scores_)
24. #Apply the transformation on to dataset
25. features = fit.transform(X)
26. #Summarize selected features print(features[0:5,:])
你可以看到每个参数的得分,以及所选择的四个参数(得分最高的):plas、test、mass和age。
每个特征的分数为:
1. [111.52 1411.887 17.605 53.108 2175.565 127.669 5.393
2. 181.304]
被选出的特征是:
1. [[148. 0. 33.6 50. ]
2. [85. 0. 26.6 31. ]
3. [183. 0. 23.3 32. ]
4. [89. 94. 28.1 21. ]
5. [137. 168. 43.1 33. ]]
递归特征消除(RFE)
RFE的工作方式是递归地删除参数并在保留的参数上构建模型。它使用模型精度来判断哪些属性(以及属性的组合)对预测目标参数贡献最大。你可以在scikit-learn的文档中了解更多关于RFE类的信息。
下面的示例使用RFE和logistic回归算法来选出前三个特征。算法的选择并不重要,只需要熟练并且一致:
1. #Import the required packages
2. #Import pandas to read csv import pandas
3. #Import numpy for array related operations import numpy
4. #Import sklearn's feature selection algorithm from sklearn.feature_selection import RFE
5.