机器学习之数据特征选定

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
# ======================================================================
# 1、单变量特征选定
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. ]]

'''

# ======================================================================
# 2、递归特征消除
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]
'''

# ======================================================================
# 3、主要成分分析
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]]
'''

# ======================================================================
# 4、特征重要性
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_)

你可能感兴趣的:(机器学习,python,sklearn)