自动化特征选择
作者:互联网
⭐在添加新特征或处理一般的的高维数据集,最好将特征的数量减少到只包含最有用的那些特征,并删除其余特征
然而,如何判断每个特征的作用呢?
三种基本的策略:
1、单变量统计
2、基于模型的选择
3、迭代选择
这些都是监督方法,需要划分测试集和训练集,并旨在训练集上拟合特征选择
1、单变量统计
⭐我们计算每个特征和目标值之间的关系是否存在统计显著性,并选择最高置信度的特征。
- 只单独考虑每个特征
- 若一个特征需与其他特征结合才具有信息量,则该特征会被舍弃
- 速度很快
sklearn中使用单变量特征选择:
1、选择一项测试:f_classif/f_regresion
2、确定p值,选择一种舍弃特征的方法(舍弃p值过大的特征)
-
SelectBest选择固定数量的k个特征 SelectPercentile选择固定百分比的特征
#cancer数据集,并添加没有信息量的噪声特征 from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.feature_selection import SelectKBest from sklearn.feature_selection import SelectPercentile import numpy as np cancer = load_breast_cancer() #获得确定的随机数 rng = np.random.RandomState(42) noise = rng.normal(size=(len(cancer.data),50)) #向数据中添加特征 #前30个来自数据集,后50个是噪声 X_w_noise = np.hstack([cancer.data,noise]) X_train, X_test, y_train, y_test = train_test_split(X_w_noise,cancer.target,random_state=0,test_size=.5) #使用f_classif和SelectPercentile(percentile=50) select = SelectPercentile(percentile=50) select.fit(X_train,y_train) #对训练集进行变换 X_train_selected = select.transform(X_train) print("X_train.shape:{}".format(X_train.shape)) print("X_train_selected.shape:{}".format(X_train_selected.shape)) ''' ``` X_train.shape:(284, 80) X_train_selected.shape:(284, 40) ``` ''' from matplotlib import pyplot as plt #用get_support方法查看哪些特征被选中 mask = select.get_support() print(mask) #将mask可视化:黑色为ture,白色为False plt.matshow(mask.reshape(1,-1),cmap='gray_r') plt.xlabel("sample index") ''' ``` [ True True True True True True True True True False True False True True True True True True False False True True True True True True True True True True False False False True False True False False True False False False False True False False True False False True False True False False False False False False True False True False False False False True False True False False False False True True False True False False False False] ``` '''
标签:False,特征选择,特征,train,自动化,test,True,select 来源: https://www.cnblogs.com/caolanying/p/16295625.html