在机器学习和统计学中,特征选择(英语:feature selection)也被称为变量选择属性选择变量子集选择。它是指:为了构建   模型而选择相关特征(即属性、指标)子集的过程。使用特征选择技术有三个原因:

  • 简化模型,使之更易于被研究人员或用户理解,
  • 缩短训练时间,
  • 改善通用性、降低过拟合(即降低方差)。
本文以之前决策树预测中的泰坦尼克号数据为例,试图通过特征筛选来选择最佳的特征组合,并且提到预测准确性的目标。
机器学习之决策树预测——泰坦尼克号乘客数据实例可参考我之前的博客:点击打开链接
代码如下:
# 导入pandas并且更名为pd。
import pandas as pd
# 从互联网读取titanic数据。
titanic = pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')# 分离数据特征与预测目标。
y = titanic['survived']
X = titanic.drop(['row.names', 'name', 'survived'], axis = 1)# 对对缺失数据进行填充。
X['age'].fillna(X['age'].mean(), inplace=True)
X.fillna('UNKNOWN', inplace=True)# 分割数据,采样25%用于测试。
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=33)# 类别型特征向量化。
from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer()
X_train = vec.fit_transform(X_train.to_dict(orient='record'))
X_test = vec.transform(X_test.to_dict(orient='record'))# 输出处理后特征向量的维度。
print (len(vec.feature_names_))# 使用决策树模型依靠所有特征进行预测,并作性能评估。
from sklearn.tree import DecisionTreeClassifier
dt = DecisionTreeClassifier(criterion='entropy')
dt.fit(X_train, y_train)
dt.score(X_test, y_test)
0.81762917933130697
# 从sklearn导入特征筛选器。
from sklearn import feature_selection
# 筛选前20%的特征,使用相同配置的决策树模型进行预测,并且评估性能。
fs = feature_selection.SelectPercentile(feature_selection.chi2, percentile=20)
X_train_fs = fs.fit_transform(X_train, y_train)
dt.fit(X_train_fs, y_train)
X_test_fs = fs.transform(X_test)
dt.score(X_test_fs, y_test)
0.82370820668693012
# 通过交叉验证的方法,按照固定间隔的百分比筛选特征,并作图展示性能随特征筛选比例的变化。
from sklearn.cross_validation import cross_val_score
import numpy as nppercentiles = range(1, 100, 2)
results = []for i in percentiles:fs = feature_selection.SelectPercentile(feature_selection.chi2, percentile = i)X_train_fs = fs.fit_transform(X_train, y_train)scores = cross_val_score(dt, X_train_fs, y_train, cv=5)results = np.append(results, scores.mean())
print results# 找到体现最佳性能的特征筛选的百分比。
opt = np.where(results == results.max())[0]
print ('Optimal number of features %d' %percentiles[opt])

import pylab as pl
pl.plot(percentiles, results)
pl.xlabel('percentiles of features')
pl.ylabel('accuracy')
pl.show()

# 使用最佳筛选后的特征,利用相同配置的模型在测试集上进行性能评估。
from sklearn import feature_selection
fs = feature_selection.SelectPercentile(feature_selection.chi2, percentile=7)
X_train_fs = fs.fit_transform(X_train, y_train)
dt.fit(X_train_fs, y_train)
X_test_fs = fs.transform(X_test)
dt.score(X_test_fs, y_test)
0.8571428571428571

对上述输出作总结,可以发现:

(1)初步处理特征后,训练与测试数据均有474个维度的特征
(2)全部维度用于训练模型,测试集准确性约为81.76%
(3)筛选前20%维度特征,相同模型配置下预测,测试集表现的准确性为82.37%
(4)如果按照固定的间隔采用不同的百分比的特征进行训练与测试,通过交叉验证得出的准确性有很大的波动,最好的模型的性能表现在选取7%维度的特征的时候
参考文献:
https://zh.wikipedia.org/zh-hans/%E7%89%B9%E5%BE%81%E9%80%89%E6%8B%A9
 Python机器学习及实践——从零开始通往Kaggle竞赛之路

机器学习中的特征选择——决策树模型预测泰坦尼克号乘客获救实例相关推荐

  1. 决策树模型之泰坦尼克号乘客是否生还预测

    泰坦尼克号乘客数据查验 import pandas as pd #利用pandas的read_csv模块直接从互联网收集泰坦尼克号乘客数据 titanic = pd.read_csv('http:// ...

  2. 数据分享|PYTHON用决策树分类预测糖尿病和可视化实例

    全文下载链接:http://tecdat.cn/?p=23848 在本文中,决策树是对例子进行分类的一种简单表示.它是一种有监督的机器学习技术,数据根据某个参数被连续分割.决策树分析可以帮助解决分类和 ...

  3. 应用分类算法,预测泰坦尼克号乘客幸存结果

    应用分类算法,预测泰坦尼克号乘客幸存结果 一.业务场景 二.数据集说明 三.操作步骤 阶段一.启动HDFS.Spark集群服务和zeppelin服务器 阶段二.准备案例中用到的数据集 阶段三.对数据集 ...

  4. 【机器学习】什么是决策树模型?如何去构建决策树?何时使用决策树?何时使用神经网络?

    系列文章目录 第十三章 Python 机器学习入门之决策树 目录 系列文章目录 前言 一.决策树模型 1 什么是决策树模型? 2 决策树学习的过程 二.如何确定在节点使用的特征 1 熵的定义 2 什么 ...

  5. 机器学习中规则化和模型选择知识

    1 问题      模型选择问题:对于一个学习问题,可以有多种模型选择.比如要拟合一组样本点,可以使用线性回归,也可以用多项式回归.那么使用哪种模型好呢(能够在偏差和方差之间达到平衡最优)? 还有一类 ...

  6. 《machine learning in action》机器学习 算法学习笔记 决策树模型

    决策树模型 重要任务:是为了理解数据中所蕴含的知识信息,因此决策树可以使用不熟悉的数据集合,并从中提取出一系列规则,这些机器根据数据集创建规则的过程就是机器学习的过程. 优点:计算复杂度不高,输出结果 ...

  7. 【机器学习笔记】【决策树】【泰坦尼克号幸存者的预测】

    目录 一.导入库以及相关的数据 1.导入所需要的库 2.导入指定的数据集 3.查看数据的相关信息 1.data.info() 2.data.head() 二.数据的预处理 1.处理数据中的空缺值 2. ...

  8. 机器学习中的集成学习模型实战完整讲解

    2019-12-03 13:50:23 集成学习模型实践讲解 --沂水寒城 无论是在机器学习领域还是深度学习领域里面,通过模型的集成来提升整体模型的性能是一件非常有效的事情,当前我们所接触到的比较成熟 ...

  9. 机器学习中的惩罚线性回归模型应用(two)

    机器学习的主要目的还是分类和回归.笔者认为分类问题可以进行回归处理,通过对每个类别标签设置实数值(+1,0),进行回归预测,并设定阈值以判断出合适的类别(这里涉及到一个真正/真负/假正/假负,并绘制R ...

最新文章

  1. 将您的窗口最前端显示
  2. CDS – One Concept, Two Flavors
  3. linux 查看cpu和磁盘使用情况
  4. 人工神经网络matlab啊6,MATLAB人工神经网络教程
  5. opencv_python关于Qt的错误
  6. sql server numeric 可存几位小数_想成为优秀SQL高手?你就差这些细节
  7. 爬取三千条数据需要多久_存储-性能,IOPS,带宽,吞吐量,1TB数据需要多久写完...
  8. 如何修改mysql物理文件存放地址_如何防封号物理地址和网络地址修改攻略
  9. 小米10T系列新机曝光:后置64MP三摄 辨识度超高
  10. Java:结合JavaSocket编程开发文本处理程序
  11. html怎样在雪景里插入文字,配雪景的唯美文字
  12. 手把手教你R语言CIBERSORT计算免疫浸润+Rproject的使用
  13. 百度指数-批量查询器
  14. VisionPro如何引用VPP?
  15. win10内存占用率过高怎么办?Win10电脑内存占用率很高的原因和解决方法
  16. 《大国大城》读书笔记
  17. lcd显示数字+0x30
  18. obs 推流编码在哪设置_浮动课堂 | 讲讲OBS直播软件的简单设置
  19. We should: Good Good Study, Day Day Up
  20. Opencv c++从影像分帧开始,制作数据集

热门文章

  1. EMQX集群部署:haproxy负载均衡+tls认证
  2. 【P05】小巧简单的 OP+ClassAB 低压供电耳放
  3. [C/C++]7-3 谷歌的招聘
  4. vue3不在手动引入import {ref} from ‘vue‘ 等 也能照样运行项目
  5. linux脚本编写后怎么退出,linux脚本编写退出拍摄pdf
  6. 数电课设之一路交通灯
  7. 有奖互动 | 打工人、爱码士都看这里
  8. lecture11-hopfiled网络与玻尔兹曼机
  9. ioa的app开发和android区别,ioA 7000
  10. 桌面支持--PLM软件必须右键用管理员账号打开