Python机器学习

数据特征选择

Python机器学习数据特征选择详细操作教程
在上一章中,我们详细介绍了如何为机器学习预处理和准备数据。在本章中,让我们详细了解数据特征选择及其涉及的各个方面。

数据特征选择的重要性

机器学习模型的性能与用于训练它的数据特征成正比。如果提供给它的数据特征不相关,则ML模型的性能将受到负面影响。另一方面,使用相关数据功能可以提高ML模型的准确性,尤其是线性和逻辑回归。
现在出现的问题是什么是自动特征选择?它可以定义为一个过程,借助该过程,我们可以选择数据中与我们感兴趣的输出或预测变量最相关的那些特征。也称为属性选择。
以下是在对数据建模之前自动选择特征的一些好处-
在数据建模之前执行特征选择将减少过拟合。 在数据建模之前执行特征选择将提高ML模型的准确性。 在数据建模之前执行特征选择将减少训练时间

功能选择技巧

以下是我们可以用来在Python中为ML数据建模的自动特征选择技术-

单变量选择

此特征选择技术在借助统计测试选择那些特征时非常有用,这些统计特征与预测变量具有最强的关系。我们可以借助scikit-learn Python库的SelectKBest0class来实现单变量特征选择技术。
示例
在此示例中,我们将使用Pima Indians Diabetes数据集在卡方统计检验的帮助下选择4个具有最佳特征的属性。
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
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
接下来,我们将数组分为输入和输出组件-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
X = array[:,0:8]
Y = array[:,8]
以下代码行将从数据集中选择最佳功能-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
test = SelectKBest(score_func=chi2, k=4)
fit = test.fit(X,Y)
我们还可以根据我们的选择汇总输出数据。在这里,我们将精度设置为2,并显示具有最佳功能的4个数据属性以及每个属性的最佳得分-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
set_printoptions(precision=2)
print(fit.scores_)
featured_data = fit.transform(X)
print ("\nFeatured data:\n", featured_data[0:4])
输出
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
[ 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个属性。
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
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
接下来,我们将数组分为输入和输出组件-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
X = array[:,0:8]
Y = array[:,8]
以下几行代码将从数据集中选择最佳功能-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
model = LogisticRegression()
rfe = RFE(model, 3)
fit = rfe.fit(X, Y)
print("Number of Features: %d")
print("Selected Features: %s")
print("Feature Ranking: %s")

输出

# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
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)

PCA,通常称为数据约简技术,是一种非常有用的特征选择技术,因为它使用线性代数将数据集转换为压缩形式。我们可以借助scikit-learn Python库的PCA类来实现PCA特征选择技术。我们可以在输出中选择主要成分的数量。

示例

在此示例中,我们将使用PCA从Pima Indians Diabetes数据集中选择最佳的3个主要成分。
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
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
接下来,我们将数组分为输入和输出组件-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
X = array[:,0:8]
Y = array[:,8]
以下代码行将从数据集中提取特征-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
pca = PCA(n_components = 3)
fit = pca.fit(X)
print("Explained Variance: %s") % fit.explained_variance_ratio_
print(fit.components_)

输出

# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
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数据集中选择要素。
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
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
接下来,我们将数组分为输入和输出组件-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
X = array[:,0:8]
Y = array[:,8]
以下代码行将从数据集中提取特征-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
model = ExtraTreesClassifier()
model.fit(X, Y)
print(model.feature_importances_)

输出

# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
[ 0.11070069 0.2213717 0.08824115 0.08068703 0.07281761 0.14548537 0.12654214 0.15415431]
从输出中,我们可以看到每个属性都有分数。得分越高,该属性的重要性就越高。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4