1、前言
- 特征工程:数据和特征决定了机器学习的上限,而模型和算法只是必进这个上限而已。因此特征工程的本质就是一项工程活动,目的是最大限度地从原始数据中提取合适的特征,以供算法和模型使用。特征处理包括数据预处理、特征选择、降维等。
- 四个数据特征选择的方法:
- 单变量特征选定
- 递归特征消除
- 主要成分分析
- 特征的重要性
- 特征选定
- 特征选定是一个流程,能够选择有助于提高预测结果准确度的特征数据,或者有助于发现我们感兴趣的输出结果的特征数据。如果数据中包含无关的特征属性,会降低算法的准确度,对于预测新数据造成干扰,尤其是线性相关算法(如线性回归算法和逻辑回归算法)。因此,在开始建立模型之前,执行特征选定有助于:降低数据的拟合度、提高算法精度、减少训练时间。
- 相关文档:scikit-learn的特征选定文档
2、实验
from pandas import read_csv
from numpy import set_printoptions
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
print('#'*30,'单变量特征选定','#'*30)
'''
通过卡方检验(chi-squared)的方式来
选择四个对结果影响最大的数据特征。
'''
file_name = r'../pima_data.csv'
names = ['preg','plas','pres','skin','test','mass','pedi','age','class']
data = read_csv(file_name,names=names)
array = data.values
print(array)
X = array[:,0:8]
Y = array[:,8]
test = SelectKBest(score_func=chi2,k=4)
fit = test.fit(X,Y)
set_printoptions(precision=3)
print('scores:')
print(fit.scores_)
features = fit.transform(X)
print('features:')
print(features)
'''
############################## 单变量特征选定 ##############################
[[ 6. 148. 72. ..., 0.627 50. 1. ]
[ 1. 85. 66. ..., 0.351 31. 0. ]
[ 8. 183. 64. ..., 0.672 32. 1. ]
...,
[ 5. 121. 72. ..., 0.245 30. 0. ]
[ 1. 126. 60. ..., 0.349 47. 1. ]
[ 1. 93. 70. ..., 0.315 23. 0. ]]
scores:
[ 111.52 1411.887 17.605 53.108 2175.565 127.669 5.393
181.304]
features:
[[ 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. ]]
'''
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
print('#'*30,'递归特征消除','#'*30)
model = LogisticRegression()
rfe = RFE(model,3)
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 3 5 6 1 1 4]
'''
print('#'*30,'主要成分分析','#'*30)
from sklearn.decomposition import PCA
'''
通过使用线性代数来转换压缩数据,通常被称作为数据降维。
常见的降维方法除了主成分分析(PCA),还有线性判别分析(LDA)
它本身也是一个分类模型。PCA是一种无监督降维的方法,LDA是一种
有监督降维的方法,在聚类算法中,通常使用PCA对数据进行降维处理。
'''
array = data.values
X = array[:,0:8]
Y = array[:,8]
pca = PCA(n_components=3)
fit = pca.fit(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]]
'''
print('#'*30,'特征重要性','#'*30)
from sklearn.ensemble import ExtraTreesClassifier
'''
袋装决策树算法、随机森林算法和极端随机树算法都可以
用来计算数据特征的重要性。这三个算法都是集成算法。
'''
array = data.values
X = array[:,0:8]
Y = array[:,8]
model = ExtraTreesClassifier()
fit = model.fit(X,Y)
print(fit.feature_importances_)