该笔记为个人学习笔记,看的课程是B站-数学建模老哥:6 Python数据特征选定_哔哩哔哩_bilibili
数据集来源:数学建模老哥-python基础和机器学习(四)数据导入+数据理解+数据可视化-CSDN博客
目录
2.3.3数据特征选定
2.3.3.1特征选定
2.3.3.2单变量特征选定
#使用卡方检验单变量特征选定
from pandas import read_csv
from numpy import set_printoptions
# SelectKBest是一个用于特征选择的元转换器,它根据得分来选择最佳的k个特征。
# 它基于单变量统计测试来选择特征,这些测试可以检测特征和目标变量之间的相关性。
from sklearn.feature_selection import SelectKBest
# chi2(卡方)是一种用于非参数统计检验的方法,常用于分类问题中的特征选择。
# 它测试了每个非负特征和目标类别之间的独立性。
# 在特征选择上下文中,chi2分数越高,特征和目标之间的相关性就越强。
# 因此,SelectKBest类可以使用chi2分数来选择与目标变量最相关的k个特征。
from sklearn.feature_selection import chi2
filename = 'pima.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names=names)
array = data.values
X= array[:,0:8]
Y = array[:,8]
# 这里指定score_func为chi2,即使用卡方检验作为评分函数
# k=4表示我们想要选择与目标变量Y最相关的4个特征
test=SelectKBest(score_func=chi2,k=4)
fit = test.fit(X,Y)
set_printoptions(precision=3)
# 打印出每个特征与目标变量之间的卡方分数
# 这些分数越高,表示特征与目标变量之间的相关性越强
print(fit.scores_)
# 使用transform方法将原始特征数据X转换为仅包含选定的k个最佳特征的新数据集
features = fit.transform(X)
print(features)
输出结果:
[ 111.52 1411.887 17.605 53.108 2175.565 127.669 5.393 181.304]
[[148. 0. 33.6 50. ]
[ 85. 0. 26.6 31. ]
[183. 0. 23.3 32. ]
...
[121. 112. 26.2 30. ]
[126. 0. 30.1 47. ]
[ 93. 0. 30.4 23. ]]
2.3.3.3递归特征消除
#RFE ---基于模型训练出影响大的若干特征
from pandas import read_csv
from sklearn.feature_selection import RFE
#逻辑回归方程
from sklearn.linear_model import LogisticRegression
filename = 'pima.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names=names)
array = data.values
X= array[:,0:8]
Y = array[:,8]
# 创建一个逻辑回归模型的实例
model = LogisticRegression()
# 使用逻辑回归模型作为基估计器,并指定要选择的特征数量为3,来创建一个RFE实例
# RFE(Recursive Feature Elimination)是一种用于特征选择的递归方法
# 它通过构建模型并考虑系数或特征重要性来逐步排除最不重要的特征
rfe = RFE(model, n_features_to_select=3) #选取3个特征
# 使用fit方法训练RFE实例,传入特征数据X和目标变量Y
# 这个过程会递归地减少特征的数量,直到达到指定的特征数量为止
fit = rfe.fit(X, Y)
print('特征个数:')
print(fit.n_features_)
print('被选特征:')
print(fit.support_)
print('特征排名:')
print(fit.ranking_)
输出结果:
特征个数:
3
被选特征:
[ True False False False False True True False]
特征排名:
[1 2 4 5 6 1 1 3]
[0.104 0.247 0.096 0.083 0.071 0.14 0.119 0.14 ]
2.3.3.4主成分分析
#PCA
from pandas import read_csv
from sklearn.decomposition import PCA
filename = 'pima.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names=names)
array = data.values
X= array[:,0:8]
Y = array[:,8]
pca=PCA(n_components=3) #将原始数据X的维度降低到了3维
fit = pca.fit(X) #对X进行了拟合,以找到X中最重要的主成分
print('解释方差:%s'%fit.explained_variance_ratio_)
print(fit.components_)
输出结果:
解释方差:[0.889 0.062 0.026]
[[-2.022e-03 9.781e-02 1.609e-02 6.076e-02 9.931e-01 1.401e-02
5.372e-04 -3.565e-03]
[-2.265e-02 -9.722e-01 -1.419e-01 5.786e-02 9.463e-02 -4.697e-02
-8.168e-04 -1.402e-01]
[-2.246e-02 1.434e-01 -9.225e-01 -3.070e-01 2.098e-02 -1.324e-01
-6.400e-04 -1.255e-01]]
2.3.3.5特征重要性
#Extra Trees classifier --极度随机树分类器,Extra Trees classifier通过构建多个决策树来进行预测,并通过投票或平均的方式来决定最终的分类结果。这种集成学习方法通过结合多个弱学习器的预测结果来提高整体的预测性能。
from pandas import read_csv
from sklearn.ensemble import ExtraTreesClassifier
filename = 'pima.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names=names)
array = data.values
X= array[:,0:8]
Y = array[:,8]
model = ExtraTreesClassifier()
fit = model.fit(X,Y)
print("成分:")
print(fit.feature_importances_) #重要成分
输出结果:
成分:
[0.113 0.228 0.1 0.077 0.077 0.146 0.12 0.139]
2.3.3.6总代码
#使用卡方检验单变量特征选定
from pandas import read_csv
from numpy import set_printoptions
# SelectKBest是一个用于特征选择的元转换器,它根据得分来选择最佳的k个特征。
# 它基于单变量统计测试来选择特征,这些测试可以检测特征和目标变量之间的相关性。
from sklearn.feature_selection import SelectKBest
# chi2(卡方)是一种用于非参数统计检验的方法,常用于分类问题中的特征选择。
# 它测试了每个非负特征和目标类别之间的独立性。
# 在特征选择上下文中,chi2分数越高,特征和目标之间的相关性就越强。
# 因此,SelectKBest类可以使用chi2分数来选择与目标变量最相关的k个特征。
from sklearn.feature_selection import chi2
filename = 'pima.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names=names)
array = data.values
X= array[:,0:8]
Y = array[:,8]
# 这里指定score_func为chi2,即使用卡方检验作为评分函数
# k=4表示我们想要选择与目标变量Y最相关的4个特征
test=SelectKBest(score_func=chi2,k=4)
fit = test.fit(X,Y)
set_printoptions(precision=3)
# 打印出每个特征与目标变量之间的卡方分数
# 这些分数越高,表示特征与目标变量之间的相关性越强
print(fit.scores_)
# 使用transform方法将原始特征数据X转换为仅包含选定的k个最佳特征的新数据集
features = fit.transform(X)
print(features)
#RFE ---基于模型训练出影响大的若干特征
from pandas import read_csv
from sklearn.feature_selection import RFE
#逻辑回归方程
from sklearn.linear_model import LogisticRegression
filename = 'pima.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names=names)
array = data.values
X= array[:,0:8]
Y = array[:,8]
# 创建一个逻辑回归模型的实例
model = LogisticRegression()
# 使用逻辑回归模型作为基估计器,并指定要选择的特征数量为3,来创建一个RFE实例
# RFE(Recursive Feature Elimination)是一种用于特征选择的递归方法
# 它通过构建模型并考虑系数或特征重要性来逐步排除最不重要的特征
rfe = RFE(model, n_features_to_select=3) #选取3个特征
# 使用fit方法训练RFE实例,传入特征数据X和目标变量Y
# 这个过程会递归地减少特征的数量,直到达到指定的特征数量为止
fit = rfe.fit(X, Y)
print('特征个数:')
print(fit.n_features_)
print('被选特征:')
print(fit.support_)
print('特征排名:')
print(fit.ranking_)
#PCA
from pandas import read_csv
from sklearn.decomposition import PCA
filename = 'pima.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names=names)
array = data.values
X= array[:,0:8]
Y = array[:,8]
pca=PCA(n_components=3) #将原始数据X的维度降低到了3维
fit = pca.fit(X) #对X进行了拟合,以找到X中最重要的主成分
print('解释方差:%s'%fit.explained_variance_ratio_)
print(fit.components_)
#Extra Trees classifier --极度随机树分类器,Extra Trees classifier通过构建多个决策树来进行预测,并通过投票或平均的方式来决定最终的分类结果。这种集成学习方法通过结合多个弱学习器的预测结果来提高整体的预测性能。
from pandas import read_csv
from sklearn.ensemble import ExtraTreesClassifier
filename = 'pima.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names=names)
array = data.values
X= array[:,0:8]
Y = array[:,8]
model = ExtraTreesClassifier()
fit = model.fit(X,Y)
print("成分:")
print(fit.feature_importances_) #重要成分