特征选择
2017-11-07 22:02
375 查看
这篇主要整理一下,从kaggle的房价预测和泰坦尼克号两个比赛的tutorials 和 discuss学习到的方法
一、单变量与目标关系
1、连续型变量:点阵图
从图片可以看出,基本是一个线性关系,旁边存在的两个点可能是异常值
2、离散型变量:box图
可以看出,基本也是符合线性关系的。
3、双变量(组合特征):柱状图
二、各特征之间关系
通过画图逐个去检查各变量与目标的关系,在特征维度很大的时候,便显得不太合适了
我们需要一个能从一堆特征中,快速挑选出重要特征的方法。
1、热力图
#correlation matrix
corrmat = df_train.corr()
f, ax = plt.subplots(figsize=(12, 9))
sns.heatmap(corrmat, vmax=.8, square=True);
可以从图片的深浅度,得出横纵坐标对应的两个变量之间的关系度,越趋向于白色则关系越紧密,黑色反之。
从这个热力图,我们可以得出两种讯息:
1、最重要的,我们想知道哪些特征与目标(SalePrice)关系最紧密,从图中可以看出,比如OverallQual、GrLiveArea等
2、我们还可以得出哪些特征是相似的,比较明显的看出TotalBsmtSF和1stFlrSF是极相似的,我们可以考虑只取其中一列特征即可,同样的还有GarageCars和GarageArea,从字面上理解,车库面积和车库停车数也应该是相似度很高的特征。
当我们只想选出与目标相关性最大的K个特征的时候,可以使用以下的热力图
#saleprice correlation matrix
k = 10 #number of variables for heatmap
cols = corrmat.nlargest(k, 'SalePrice')['SalePrice'].index
cm = np.corrcoef(df_train[cols].values.T)
sns.set(font_scale=1.25)
hm = sns.heatmap(cm, cbar=True, annot=True, square=True, fmt='.2f', annot_kws={'size': 10}, yticklabels=cols.values, xticklabels=cols.values)
plt.show()
这样我们就很轻松的得出了k(=10)个与SalePrice相关度按高到低排序的特征。
2、sklearn方法-SelectKBest
待补充
一、单变量与目标关系
1、连续型变量:点阵图
var = 'GrLivArea' data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1) data.plot.scatter(x=var, y='SalePrice', ylim=(0,800000))
从图片可以看出,基本是一个线性关系,旁边存在的两个点可能是异常值
2、离散型变量:box图
var = 'OverallQual' data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1) f, ax = plt.subplots(figsize=(8, 6)) fig = sns.boxplot(x=var, y="SalePrice", data=data) fig.axis(ymin=0, ymax=800000);
可以看出,基本也是符合线性关系的。
#看看各性别的获救情况 fig = plt.figure() fig.set(alpha=0.2) # 设定图表颜色alpha参数 Survived_m = data_train.Survived[data_train.Sex == 'male'].value_counts() Survived_f = data_train.Survived[data_train.Sex == 'female'].value_counts() df=pd.DataFrame({u'男性':Survived_m, u'女性':Survived_f}) df.plot(kind='bar', stacked=True) plt.title(u"按性别看获救情况") plt.xlabel(u"性别") plt.ylabel(u"人数") plt.show(
3、双变量(组合特征):柱状图
#然后我们再来看看各种舱级别情况下各性别的获救情况 fig=plt.figure() fig.set(alpha=0.65) # 设置图像透明度,无所谓 plt.title(u"根据舱等级和性别的获救情况") ax1=fig.add_subplot(141) data_train.Survived[data_train.Sex == 'female'][data_train.Pclass != 3].value_counts().plot(kind='bar', label="female highclass", color='#FA2479') ax1.set_xticklabels([u"获救", u"未获救"], rotation=0) ax1.legend([u"女性/高级舱"], loc='best') ax2=fig.add_subplot(142, sharey=ax1) data_train.Survived[data_train.Sex == 'female'][data_train.Pclass == 3].value_counts().plot(kind='bar', label='female, low class', color='pink') ax2.set_xticklabels([u"未获救", u"获救"], rotation=0) plt.legend([u"女性/低级舱"], loc='best') ax3=fig.add_subplot(143, sharey=ax1) data_train.Survived[data_train.Sex == 'male'][data_train.Pclass != 3].value_counts().plot(kind='bar', label='male, high class',color='lightblue') ax3.set_xticklabels([u"未获救", u"获救"], rotation=0) plt.legend([u"男性/高级舱"], loc='best') ax4=fig.add_subplot(144, sharey=ax1) data_train.Survived[data_train.Sex == 'male'][data_train.Pclass == 3].value_counts().plot(kind='bar', label='male low class', color='steelblue') ax4.set_xticklabels([u"未获救", u"获救"], rotation=0) plt.legend([u"男性/低级舱"], loc='best') plt.show()
二、各特征之间关系
通过画图逐个去检查各变量与目标的关系,在特征维度很大的时候,便显得不太合适了
我们需要一个能从一堆特征中,快速挑选出重要特征的方法。
1、热力图
#correlation matrix
corrmat = df_train.corr()
f, ax = plt.subplots(figsize=(12, 9))
sns.heatmap(corrmat, vmax=.8, square=True);
可以从图片的深浅度,得出横纵坐标对应的两个变量之间的关系度,越趋向于白色则关系越紧密,黑色反之。
从这个热力图,我们可以得出两种讯息:
1、最重要的,我们想知道哪些特征与目标(SalePrice)关系最紧密,从图中可以看出,比如OverallQual、GrLiveArea等
2、我们还可以得出哪些特征是相似的,比较明显的看出TotalBsmtSF和1stFlrSF是极相似的,我们可以考虑只取其中一列特征即可,同样的还有GarageCars和GarageArea,从字面上理解,车库面积和车库停车数也应该是相似度很高的特征。
当我们只想选出与目标相关性最大的K个特征的时候,可以使用以下的热力图
#saleprice correlation matrix
k = 10 #number of variables for heatmap
cols = corrmat.nlargest(k, 'SalePrice')['SalePrice'].index
cm = np.corrcoef(df_train[cols].values.T)
sns.set(font_scale=1.25)
hm = sns.heatmap(cm, cbar=True, annot=True, square=True, fmt='.2f', annot_kws={'size': 10}, yticklabels=cols.values, xticklabels=cols.values)
plt.show()
这样我们就很轻松的得出了k(=10)个与SalePrice相关度按高到低排序的特征。
2、sklearn方法-SelectKBest
待补充
相关文章推荐
- 特征选择常用算法综述
- 特征选择常用算法综述
- 【scikit-learn】交叉验证及其用于参数选择、模型选择、特征选择的例子
- 结合Scikit-learn介绍几种常用的特征选择方法
- 水利水能规划—水电站水库特征参数选择——正文
- 基于随机森林的特征选择算法
- 特征处理与特征选择
- 特征选择(Feature Selection ) 转载
- 特征选择
- 【Scikit-Learn 中文文档】特征选择 - 监督学习 - 用户指南 | ApacheCN
- 机器学习 特征选择概述
- 文本分类特征选择方法
- 特征选择与特征权重计算的区别
- 挑子学习笔记:特征选择——基于假设检验的Filter方法
- 数据挖掘中的特征预处理以及特征选择
- 特征选择-卡方检验用于特征选择
- 特征选择
- 文本特征选择之互信息和卡方
- 文本分类入门(十一)特征选择方法之信息增益
- 机器学习(周志华) 参考答案 第十一章 特征选择与稀疏学习 11.1