【python机器学习手册】第10章 特征选择

#10.1 VT(方差阈值化)
from sklearn import datasets
from sklearn.feature_selection import VarianceThreshold#载入方差阈值函数
iris=datasets.load_iris()
features=iris.data
target=iris.target
thresholder=VarianceThreshold(threshold=0.5)#方差小于等于0.5的删除,含有信息比较少的列(特征)删除
features_high_variance=thresholder.fit_transform(features)#用thresholder规定的规则进行计算转换
features_high_variance[0:5]
array([[5.1, 1.4, 0.2],
       [4.9, 1.4, 0.2],
       [4.7, 1.3, 0.2],
       [4.6, 1.5, 0.2],
       [5. , 1.4, 0.2]])
#10.3 处理高度相关性的特征
import pandas as pd
import numpy as np
features=np.array([[1,1,1],#创建一个包含两个高度相关特征的特征矩阵(数组)
                  [2,2,0],
                  [3,3,1],
                  [4,4,0],
                  [5,5,1],
                  [6,6,0],
                  [7,7,1],
                  [8,7,0],
                  [9,7,1]])
dataframe=pd.DataFrame(features)#把数组转为数据框(表格)
corr_matrix=dataframe.corr().abs()#创建一个相关矩阵(由各列之间的相关系数组成),返回数据绝对值
print(corr_matrix)
          0         1         2
0  1.000000  0.976103  0.000000
1  0.976103  1.000000  0.034503
2  0.000000  0.034503  1.000000
upper=corr_matrix.where(np.triu(np.ones(corr_matrix.shape),k=1).astype(np.bool))#点点还是逗号!
#triu上三角,tril下三角,ones函数返回给定形状和类型的数组##astype修改数据类型
to_drop=[column for column in upper.columns if any(upper[column]>0.95)]
#这里给定的是corr_matrix的形状和类型,第k条对角线上方的元素全部置零。
#k=0(默认值),为主对角线,k<0为主对角线左下方,k>0为主对角线右上方。
dataframe.drop(dataframe.columns[to_drop],axis=1)#显示去掉相关特征后的特征数据框
0 2
0 1 1
1 2 0
2 3 1
3 4 0
4 5 1
5 6 0
6 7 1
7 8 0
8 9 1
#10.4删除与分类任务不相关的特征
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2,f_classif
#分类型用卡方,数值型用F检验
from sklearn.datasets import load_iris
iris = load_iris()#分类型数据,计算特征和目标向量的卡方统计量
features=iris.data
target=iris.target
features=features.astype(int)#把数据转化为整数型
chi2_selector = SelectKBest(chi2, k=2)#选择k个最佳特征,卡方表示观测值和期望值之间的差异
features_kbest=chi2_selector.fit_transform(features,target)#进行计算、转化
print(features.shape)
print(features_kbest.shape)
(150, 4)
(150, 2)
fvalue_selector=SelectKBest(f_classif, k=2)#数值型使用F检验
features_kbest2=fvalue_selector.fit_transform(features,target)
print(features.shape)
print(features_kbest2.shape)#特征减少到2个特征
(150, 4)
(150, 2)
#10.4的第二种方法
from sklearn.feature_selection import SelectPercentile
fvalue_selector2=SelectPercentile(f_classif,percentile=75)#选择前75%的特征
features_kbest3=fvalue_selector2.fit_transform(features,target)#进行计算、转化
print(features.shape)
print(features_kbest3.shape)
(150, 4)
(150, 3)
#10.5 递归式消除(递归式:自己调用自己)
from sklearn.datasets import make_regression#用于生成可回归的数据
from sklearn.feature_selection import RFECV
from sklearn import datasets,linear_model
features,target=make_regression(n_samples=10000,#生成一万个样本
                               n_features=100,#每个样本特征为100个
                               n_informative=2,#对回归有效的特征数量
                               random_state=1)#相当于种子数
ols=linear_model.LinearRegression()
rfecv=RFECV(estimator=ols,step=1,scoring="neg_mean_squared_error")
#训练模型为最小二乘法,步长为1,评估使用均方误差
rfecv.fit(features,target)
rfecv.transform(features)
rfecv.n_features_#查看最优特征数量
9
rfecv.support_#查看哪些特征应该被保留
array([False, False, False, False, False,  True, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False,  True,  True, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False,  True, False, False, False, False,
       False, False, False,  True,  True,  True, False, False, False,
       False,  True,  True, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False])
rfecv.ranking_#查看特征排名,和上面的对比,差一个下划线
array([88, 59, 42, 81, 92,  1, 65, 55, 58, 38, 73,  3, 37, 35, 84, 48, 61,
       28, 11, 79, 17, 13, 33, 27, 14, 30, 32, 20, 78, 16,  2, 40,  4, 75,
       82, 62, 54, 86,  1,  1, 64, 67, 19, 51, 91, 71,  9, 26, 90, 63, 39,
       83, 77, 10, 36, 80, 52, 47,  1, 44, 29, 60, 68, 72, 70, 23,  1,  1,
        1, 25,  6, 18, 41,  1,  1, 56,  7, 66, 57, 74, 69, 24, 76,  5, 50,
        8, 12, 34, 89, 22, 15, 31, 46, 53, 21, 87, 85, 43, 45, 49])

上一篇:语音识别2 -- Listen,Attend,and Spell (LAS)


下一篇:测试开发进阶——spring boot——MVC——thymeleaf模板——打开网页