特征选择
特征工程:
1、特征提取 :从文字,图像等数据中提取信息作为特征
2、特征创造 :把现有特征进行组合,或仙湖计算,得到新的特征
3、特征选择 :从所有的特征种,选择出有意义的,对模型有帮助的特征,避免所有特征都导图模型取训练的情况。在特征选择之前,跟数据提供者开会。
下面案例所用到的数据获取地址——>这里下载
1.过滤法
首先导入数据
import pandas as pd
data = pd.read_csv("../数据/digit recognizor.csv")
data.head()
这个数据亮较大,如果使用支持向量机和神经网络,可能会直接跑不出来,使用KNN跑一次大概需要半个小时,用这个数据更能体现特征工程的重要性。
过滤法:
全部特征—> 最佳特征子集->算法->模型评估
方差过滤
无论接下来的特征工程要做什么,都要优先消除方差为0的特征。
from sklearn.feature_selection import VarianceThreshold
selector = VarianceThreshold()#实例化,默认方差为0
x_var0 = selector.fit_transform(x)
x_var0.shape#查看数据维度
pd.DataFrame(x_var0).head()#查看数据前五行
删除了方差为0的特征,但是还剩下708个特征,明显还需要进一步选择,可以设置方差阈值
import numpy as np
x_fsvar =VarianceThreshold(np.median(x.var().values)).fit_transform(x)
#将中位数设置为阈值,砍掉一般的特征
x.var().values
np.median(x.var().values)#中位数
x_fsvar.shape#利用中位数过滤后的维度
当特征时二分类时,特征的取值就是伯努利随机变量。
若特征时伯努利随机变量,假设p=0.8,即二分类特征种某种分类占到80%以上的时候删除特征
x_bvar = VarianceThreshold(0.8*(1-0.8)).fit_transform(x)
x_bvar.shape
差过滤对模块的影响
KNN VS 随机森林在不同方差过滤效果下的对比
导入库
from sklearn.ensemble import RandomForestClassifier as RFC
from sklearn.neighbors import KNeighborsClassifier as KNN
from sklearn.model_selection import cross_val_score
import numpy as np
提取数据
x = data.iloc[:,1:]
y = data.iloc[:,0]
使用中位数过滤特征
x_fsvar = VarianceThreshold(np.median(x.var().values)).fit_transform(x)
**KNN 方差过滤前 **
35分钟才能运行完
cross_val_score(KNN(),x,y,cv=5).mean()
4小时才能运行完
%%timeit 可以用来计算运行这个cell种代码所需的时间,一般是运行7次取平均值
cross_val_score(KNN(),x,y,cv=5).mean()
方差过滤后
20分钟
cross_val_score(KNN(),x_fsvar,y,cv=<