http://blog.csdn.net/w5310335/article/details/48972587

## 为什麽选取特征

GBDT（MART）概念简介

GBDT（MART） 迭代决策树入门教程 | 简介

## 如何在numpy数组中选取若干列或者行？

``````>>> import numpy as np
>>> tmp_a = np.array([[1,1], [0.4, 4], [1., 0.9]])
>>> tmp_a
array([[ 1. ,  1. ],
[ 0.4,  4. ],
[ 1. ,  0.9]])
>>> tmp_a[[0,1],:]  # 选第0、1行
array([[ 1. ,  1. ],
[ 0.4,  4. ]])
>>> tmp_a[np.array([True, False, True]), :]  # 选第0、2行
array([[ 1. ,  1. ],
[ 1. ,  0.9]])
>>> tmp_a[:,[0]]    # 选第0列
array([[ 1. ],
[ 0.4],
[ 1. ]])
>>> tmp_a[:, np.array([True, False])]  # 选第0列
array([[ 1. ],
[ 0.4],
[ 1. ]])
``````

## 训练GBDT

``````>>> from sklearn.ensemble import GradientBoostingClassifier
>>> gbdt.fit(training_data, training_labels)  # 训练。喝杯咖啡吧
max_depth=3, max_features=None, max_leaf_nodes=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, n_estimators=100,
random_state=None, subsample=1.0, verbose=0,
warm_start=False)
>>> gbdt.feature_importances_   # 据此选取重要的特征
array([  2.08644807e-06,   0.00000000e+00,   8.93452010e-04, ...,
5.12199658e-04,   0.00000000e+00,   0.00000000e+00])
>>> gbdt.feature_importances_.shape
(19630,)
``````

``````>>> gbdt_predict_labels = gbdt.predict(test_data)
>>> sum(gbdt_predict_labels==test_labels)  # 比 多项式贝叶斯 差许多
414
``````

``````>>> new_train_data = training_data[:, feature_importances>0]
>>> new_train_data.shape  # 只保留了1636个特征
(1998, 1636)
>>> new_test_data = test_data[:, feature_importances>0]
>>> new_test_data.shape
(509, 1636)
``````

## 使用多项式贝叶斯处理新数据

``````>>> from sklearn.naive_bayes import MultinomialNB
>>> bayes = MultinomialNB()
>>> bayes.fit(new_train_data, training_labels)
MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True)
>>> bayes_predict_labels = bayes.predict(new_test_data)
>>> sum(bayes_predict_labels == test_labels)   # 之前预测正确的样本数量是454
445
``````

## 使用伯努利贝叶斯处理新数据

``````>>> from sklearn.naive_bayes import BernoulliNB
>>> bayes2 = BernoulliNB()
>>> bayes2.fit(new_train_data, training_labels)
BernoulliNB(alpha=1.0, binarize=0.0, class_prior=None, fit_prior=True)
>>> bayes_predict_labels = bayes2.predict(new_test_data)
>>> sum(bayes_predict_labels == test_labels)   # 之前预测正确的样本数量是387
422
``````

## 使用Logistic回归处理新数据

``````>>> from sklearn.linear_model import LogisticRegression
>>> lr1 = LogisticRegression()
>>> lr1.fit(training_data, training_labels)
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
intercept_scaling=1, max_iter=100, multi_class='ovr',
penalty='l2', random_state=None, solver='liblinear', tol=0.0001,
verbose=0)
>>> lr1_predict_labels = lr1.predict(test_data)
>>> sum(lr1_predict_labels == test_labels)
446
``````

``````>>> lr2 = LogisticRegression()
>>> lr2.fit(new_train_data, training_labels)
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
intercept_scaling=1, max_iter=100, multi_class='ovr',
penalty='l2', random_state=None, solver='liblinear', tol=0.0001,
verbose=0)
>>> lr2_predict_labels = lr2.predict(new_test_data)
>>> sum(lr2_predict_labels == test_labels)  # 正确率略微提升
449
``````

（完）

## 转 ：scikit-learn的GBDT工具进行特征选取。的更多相关文章

1. scikit-learn的GBDT工具进行特征选取。

http://blog.csdn.net/w5310335/article/details/48972587 使用GBDT选取特征 2015-03-31 本文介绍如何使用scikit-learn的GB ...

2. scikit learn 模块 调参 pipeline+girdsearch 数据举例：文档分类 （python代码）

scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import ...

3. (原创)（三）机器学习笔记之Scikit Learn的线性回归模型初探

一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...

4. (原创)（四）机器学习笔记之Scikit Learn的Logistic回归初探

目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...

5. Scikit Learn

Scikit Learn Scikit-Learn简称sklearn,基于 Python 语言的,简单高效的数据挖掘和数据分析工具,建立在 NumPy,SciPy 和 matplotlib 上.

6. Scikit Learn: 在python中机器学习

转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...

7. 特征选取1-from sklearn.feature_selection import SelectKBest

sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

8. [模式识别].(希腊)西奥多里蒂斯&amp;lt;第四版&amp;gt;笔记5之__特征选取

1,引言 有关模式识别的一个主要问题是维数灾难.我们将在第7章看到维数非常easy变得非常大. 减少维数的必要性有几方面的原因.计算复杂度是一个方面.还有一个有关分类器的泛化性能. 因此,本章的主要任 ...

9. 吴裕雄 python 机器学习——数据预处理过滤式特征选取SelectPercentile模型

from sklearn.feature_selection import SelectPercentile,f_classif #数据预处理过滤式特征选取SelectPercentile模型 def ...

## 随机推荐

1. [OpenCV] Samples 12: laplace

先模糊再laplace,也可以替换为sobel等. 变换效果后录成视频,挺好玩. #include "opencv2/videoio/videoio.hpp" #include & ...

2. http协议和web应用有状态和无状态浅析

http协议和web应用有状态和无状态浅析 (2013-10-14 10:38:06) 转载▼ 标签: it   我们通常说的web应用程序的无状态性的含义是什么呢? 直观的说,“每次的请求都是独立的 ...

4. C安全编码--整数理解

建议和规则 建议: 理解编译器所使用的数据模型 使用rsize_t或size_t类型表示所有表示对象长度的整数值 理解整数转换规则 使用安全的整数库 对来自不信任来源的整数值实行限制 如果输入函数无法 ...

5. Foreman--Puppet类导入

一.Foreman环境: foreman建好后,系统默认创建了3个环境:production,development,common, 1. production: 在puppet.conf里已经定义其 ...

6. Spark：相关错误总结

http://blog.csdn.net/pipisorry/article/details/52916307 路径错误 spark FileNotFoundError: [Errno 2] No s ...

7. WPF 系统关闭模式

WPF App.xaml中ShutdownMode的属性值 OnLastWindowClose(默认值) 最后一个窗体关闭或调用Application对象的Shutdown()方法时,应用程序关闭. ...

8. MarkDown常用语法及word转MarkDown

介绍 Markdown 的目标是实现「易读易写」. 可读性,无论如何,都是最重要的.一份使用 Markdown 格式撰写的文件应该可以直接以纯文本发布,并且看起来不会像是由许多标签或是格式指令所构成. ...

9. poj_2315 最小费用最大流

题目大意 一个图上有N个顶点,从1到N标号,顶点之间存在一些无向边,边有长度,要求从顶点1走到顶点N,再从顶点N走回顶点1,其中不必要经过每个顶点,但是要求走的路径上的边只能经过一次.求出从1---& ...

10. python基础-第九篇-9.1初了解Python线程、进程、协程

了解相关概念之前,我们先来看一张图 进程: 优点:同时利用多个cpu,能够同时进行多个操作 缺点:耗费资源(重新开辟内存空间) 线程: 优点:共享内存,IO操作时候,创造并发操作 缺点:抢占资源 通过 ...