1、数据特征选定(Pima Indians 印第安人医疗数据)
1、特征选择
特征工程:
特征工程包含了数据预处理、特征选择、数据降维。前面介绍了数据预处理,这次我们着手对数据进行特征选择,在原始数据中提取最合适的特征用于算法和模型。
特征工程的作用:在此套用书上的话,“数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限”,因此对数据做好特征工程显得尤为必要。
1.1、单变量特征选定
特征选定:如果数据中包含无关的特征属性,会降低算法的准确度,对预测结果造成干扰,尤其是线性相关算法(如线性回归算法和逻辑回归算法),因此我们筛选出有助于提高预测结果准确度的特征数据,剔除掉无关的特征数据。
①导入数据
import pandas as pd
names=['preg','plas','pres','skin','test','mass','pedi','age','class']
df=pd.read_csv('pima_data.csv',names=names)
X=df.iloc[:,0:8].values
Y=df.iloc[:,8].values
# 输出前5行
df.head()
②通过卡方检验选定数据特征
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
import numpy as np
# 通过卡方检验(chi-squared)的方式来选择四个结果影响最大的数据特征
skb=SelectKBest(score_func=chi2,k=4)
fit=skb.fit(X,Y)
features=fit.transform(X)
np.set_printoptions(precision=3)
# 输出卡方检验对每个数据特征的评分
print("数据特征评分:\n",fit.scores_)
# 无排序输出得分最高的四个数据特征
print("评分最高的前4个数据特征:\n",features)
1.2、递归特征消除(RFE)
递归特征消除(RFE)使用一个基模型来进行多轮训练,每轮训练后消除若干权值系数的特征,在基于新的特征集进行下一轮训练。通过每一次基模型的精度,找到对最终预测结果影响最大的数据特征。
①导入数据
import pandas as pd
names=['preg','plas','pres','skin','test','mass','pedi','age','class']
df=pd.read_csv('pima_data.csv',names=names)
X=df.iloc[:,0:8].values
Y=df.iloc[:,8].values
# 输出前5行
df.head()
②通过递归消除来选定特征
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
lr=LogisticRegression()
rfe=RFE(lr,4)
fit=rfe.fit(X,Y)
print('特征个数:')
print(fit.n_features_)
print('被选定的特征:')
print(fit.support_)
print('特征排名:')
print(fit.ranking_)
1.3、主要成分分析(PCA)
主要成分分析(PCA)是使用线性代数来转换压缩数据,通常被称为数据降维。
常见的降维方法除了主要成分分析(PCA),还有线性判别分析(LDA),它本身也是一个分类模型。
PCA和LDA本质都是将原始样本映射到低纬度的样本空间。但两者的映射目标不一样:
PCA是为了让映射后的样本具有最大发散性;而LDA是为了让映射后的样本有最好 的分类性能。
PCA是一种无监督的降维方法,在聚类算法中,通常会利用PCA对数据进行降维处理,以便数据的分析和可视化。
LDA是一种有监督的降维方法。
①导入数据
import pandas as pd
names=['preg','plas','pres','skin','test','mass','pedi','age','class']
df=pd.read_csv('pima_data.csv',names=names)
X=df.iloc[:,0:8].values
Y=df.iloc[:,8].values
# 输出前5行
df.head()
②通过主要成分分析选定数据特征
from sklearn.decomposition import PCA
pca=PCA(n_components=3)
fit=pca.fit(X)
print('解释方差:%s' % fit.explained_variance_ratio_)
print(fit.components_)
1.4、特征的重要性
袋装决策树算法(Bagged Decision Trees)、随机森林算法和极端随机数算法都可以用来计算数据特征的重要性。这三种算法都是集成算法中的袋装算法。
①导入数据
import pandas as pd
names=['preg','plas','pres','skin','test','mass','pedi','age','class']
df=pd.read_csv('pima_data.csv',names=names)
X=df.iloc[:,0:8].values
Y=df.iloc[:,8].values
# 输出前5行
df.head()
②通过决策树计算特征的重要性
from sklearn.ensemble import ExtraTreesClassifier
etc=ExtraTreesClassifier()
fit=etc.fit(X,Y)
print('输出不同特征数据的得分:')
print(fit.feature_importances_)