在上一章中,无涯教程详细介绍了如何为机器学习预处理和准备数据。在本章中详细了解数据特征选择及其涉及的各个方面。
机器学习模型的性能与用于训练它的数据特征成正比,如果提供给它的数据特征不相关,则ML模型的性能将受到负面影响,另一方面,使用相关数据功能可以提高ML模型的准确性,尤其是线性和逻辑回归。
以下是在对数据建模之前自动选择特征的一些好处-
减少过拟合。
提高ML模型的准确性。
减少训练时间
以下是可以用来在Python中为ML数据建模的自动功能选择技术-
这种特征选择技术在借助统计测试选择那些特征与预测变量之间最紧密的关系中非常有用。可以借助scikit-learn Python库的SelectKBest0class来实现单变量特征选择技术。
在此示例中,无涯教程将使用Pima Indians Diabetes数据集在卡方统计检验的帮助下选择4个具有最佳功能的属性。
from pandas import read_csv from numpy import set_printoptions from sklearn.feature_selection import SelectKBest from sklearn.feature_selection import chi2 path = r'C:\pima-indians-diabetes.csv' names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] dataframe = read_csv(path, names=names) array = dataframe.values
接下来,将数组分为输入和输出组件-
X=array[:,0:8] Y=array[:,8]
以下代码行将从数据集中选择最佳功能-
test=SelectKBest(score_func=chi2, k=4) fit=test.fit(X,Y)
无涯教程还可以根据选择汇总输出数据。在这里将精度设置为2并显示具有最佳功能的4个数据属性以及每个属性的最佳得分-
set_printoptions(precision=2) print(fit.scores_) featured_data=fit.transform(X) print ("\nFeatured data:\n", featured_data[0:4])
输出
[ 111.52 1411.89 17.61 53.11 2175.57 127.67 5.39 181.3 ] Featured data: [[148. 0. 33.6 50. ] [ 85. 0. 26.6 31. ] [ 183. 0. 23.3 32. ] [ 89. 94. 28.1 21. ]]
顾名思义,RFE(递归特征消除)特征选择技术以递归方式删除属性,并使用剩余的属性构建模型。无涯教程可以在 scikit-learn Python库的 RFE 类的帮助下实现RFE功能选择技术。
在此示例中,将使用带有逻辑回归算法的RFE从Pima Indians Diabetes数据集中选择具有最佳特征的最佳3个属性。
from pandas import read_csv from sklearn.feature_selection import RFE from sklearn.linear_model import LogisticRegression path = r'C:\pima-indians-diabetes.csv' names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] dataframe = read_csv(path, names=names) array = dataframe.values
接下来,将数组分成其输入和输出组件-
X=array[:,0:8] Y=array[:,8]
以下代码行将从数据集中选择最佳功能-
model = LogisticRegression() rfe = RFE(model, 3) fit = rfe.fit(X, Y) print("Number of Features: %d") print("Selected Features: %s") print("Feature Ranking: %s")
Number of Features: 3 Selected Features: [ True False False False False True True False] Feature Ranking: [1 2 3 5 6 1 1 4]
可以从上面的输出中看到,RFE选择了preg,mass和pedi作为前三个最佳功能。它们在输出中标签为1。
PCA通常称为数据约简技术,是一种非常有用的特征选择技术,因为它使用线性代数将数据集转换为压缩形式。无涯教程可以借助scikit-learn Python库的PCA类来实现PCA特征选择技术。可以在输出中选择主要成分的数量。
在此示例中,将使用PCA从Pima Indians Diabetes数据集中选择最佳的3个主要成分。
from pandas import read_csv from sklearn.decomposition import PCA path = r'C:\pima-indians-diabetes.csv' names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] dataframe = read_csv(path, names=names) array = dataframe.values
接下来,将数组分为输入和输出组件-
X=array[:,0:8] Y=array[:,8]
以下代码行将从数据集中提取特征-
来源:LearnFk无涯教程网
pca = PCA(n_components = 3) fit = pca.fit(X) print("Explained Variance: %s") % fit.explained_variance_ratio_ print(fit.components_)
Explained Variance: [ 0.88854663 0.06159078 0.02579012] [[ -2.02176587e-03 9.78115765e-02 1.60930503e-02 6.07566861e-02 9.93110844e-01 1.40108085e-02 5.37167919e-04 -3.56474430e-03] [ 2.26488861e-02 9.72210040e-01 1.41909330e-01 -5.78614699e-02 -9.46266913e-02 4.69729766e-02 8.16804621e-04 1.40168181e-01] [ -2.24649003e-02 1.43428710e-01 -9.22467192e-01 -3.07013055e-01 2.09773019e-02 -1.32444542e-01 -6.39983017e-04 -1.25454310e-01]]
从上面的输出中可以看到3个主成分与源数据几乎没有相似之处。
顾名思义,特征重要性技术用于选择重要性特征,它基本上使用受过训练的监督分类器来选择要素,无涯教程可以在scikit-learn Python库的ExtraTreeClassifier类的帮助下实现此功能选择技术。
在此示例中,将使用ExtraTreeClassifier从Pima Indians Diabetes数据集中选择要素。
from pandas import read_csv from sklearn.ensemble import ExtraTreesClassifier path = r'C:\Desktop\pima-indians-diabetes.csv' names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] dataframe = read_csv(data, names=names) array = dataframe.values
接下来,将数组分为输入和输出组件-
X=array[:,0:8] Y=array[:,8]
以下代码行将从数据集中提取特征-
来源:LearnFk无涯教程网
model=ExtraTreesClassifier() model.fit(X, Y) print(model.feature_importances_)
[ 0.11070069 0.2213717 0.08824115 0.08068703 0.07281761 0.14548537 0.12654214 0.15415431]
从输出中,无涯教程可以看到每个属性都有分数。分数越高,该属性的重要性越高。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)