极度随机树ExtraTreesClassifier

1 声明

本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理。

2 极度随机树ExtraTreesClassifier简介

Extremely Randomized Trees Classifier(极度随机树) 是一种集成学习技术,它将森林中收集的多个去相关决策树的结果聚集起来输出分类结果。极度随机树的每棵决策树都是由原始训练样本构建的。在每个测试节点上,每棵树都有一个随机样本,样本中有k个特征,每个决策树都必须从这些特征集中选择最佳特征,然后根据一些数学指标(一般是基尼指数)来拆分数据。这种随机的特征样本导致多个不相关的决策树的产生。

在构建森林的过程中,对于每个特征,计算用于分割特征决策的数学指标(如使用基尼指数)的归一化总缩减量,这个值称为基尼要素的重要性。基尼重要性按降序排列后,可根据需要选择前k个特征。

3 极度随机树ExtraTreesClassifier代码示例

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.ensemble import ExtraTreesClassifierimport  matplotlib
# 自定义字体,以兼容中文显示
myfont = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\STKAITI.TTF')
df_pre = pd.read_csv('../input/PlayTennis.txt',sep="\t")
# 拆分X(自变量)和y(因变量)#X = df.drop('Play Tennis', axis=1)
df=df_pre.drop('Day', axis = 1)
#分类类型转数值型,通过字典映射转换
weather_mapper = {'Sunny': 1, 'Overcast': 2,'Rain':3}
df['Outlook'].replace(weather_mapper, inplace=True)temperature_mapper = {'Hot': 1, 'Mild': 2,'Cool':3}
df['Temperature'].replace(temperature_mapper, inplace=True)humidity_mapper = {'High': 1, 'Normal': 2}
df['Humidity'].replace(humidity_mapper, inplace=True)wind_mapper = {'Weak': 1, 'Strong': 0}
df['Wind'].replace(wind_mapper, inplace=True)playTennis_mapper={"Yes":1,"No":0}
df['PlayTennis'].replace(playTennis_mapper, inplace=True)
print(df.head())
y = df['PlayTennis']
X = df.loc[ :,'Outlook':'Wind']
#X = df.drop('PlayTennis', axis = 1)
#print(X.head())# 5棵树、2个特征、评判指标是熵
extra_tree_forest = ExtraTreesClassifier(n_estimators=5,criterion='entropy', max_features=2)
extra_tree_forest.fit(X, y)# 计算每个特征的重要性水平
feature_importance = extra_tree_forest.feature_importances_# 标准化特征的重要性水平
feature_importance_normalized = np.std([tree.feature_importances_ for tree inextra_tree_forest.estimators_],axis=0)
#画图
# Plotting a Bar Graph to compare the models
plt.bar(X.columns, feature_importance_normalized)
plt.xlabel('特征',fontproperties = myfont)
plt.ylabel('特征重要性',fontproperties = myfont)
plt.title('特征重要性比较',fontproperties = myfont)
plt.show()

4 计算示意:

熵公示:

其中c为唯一类标签的个数,p i为所属分类的行占比。

-- 构造数据
CREATE TABLE PlayTennis(
DayNo varchar(10),
Outlook varchar(10),
Temperature varchar(10),
Humidity varchar(10),
Wind varchar(10),
PlayTennis varchar(10)
);insert into `PlayTennis`(`DayNo`,`Outlook`,`Temperature`,`Humidity`,`Wind`,`PlayTennis`) values ('D1','Sunny','Hot','High','Weak','No');
insert into `PlayTennis`(`DayNo`,`Outlook`,`Temperature`,`Humidity`,`Wind`,`PlayTennis`) values ('D2','Sunny','Hot','High','Strong','No');
insert into `PlayTennis`(`DayNo`,`Outlook`,`Temperature`,`Humidity`,`Wind`,`PlayTennis`) values ('D3','Overcast','Hot','High','Weak','Yes');
insert into `PlayTennis`(`DayNo`,`Outlook`,`Temperature`,`Humidity`,`Wind`,`PlayTennis`) values ('D4','Rain','Mild','High','Weak','Yes');
insert into `PlayTennis`(`DayNo`,`Outlook`,`Temperature`,`Humidity`,`Wind`,`PlayTennis`) values ('D5','Rain','Cool','Normal','Weak','Yes');
insert into `PlayTennis`(`DayNo`,`Outlook`,`Temperature`,`Humidity`,`Wind`,`PlayTennis`) values ('D6','Rain','Cool','Normal','Strong','No');
insert into `PlayTennis`(`DayNo`,`Outlook`,`Temperature`,`Humidity`,`Wind`,`PlayTennis`) values ('D7','Overcast','Cool','Normal','Strong','Yes');
insert into `PlayTennis`(`DayNo`,`Outlook`,`Temperature`,`Humidity`,`Wind`,`PlayTennis`) values ('D8','Sunny','Mild','High','Weak','No');
insert into `PlayTennis`(`DayNo`,`Outlook`,`Temperature`,`Humidity`,`Wind`,`PlayTennis`) values ('D9','Sunny','Cool','Normal','Weak','Yes');
insert into `PlayTennis`(`DayNo`,`Outlook`,`Temperature`,`Humidity`,`Wind`,`PlayTennis`) values ('D10','Rain','Mild','Normal','Weak','Yes');
insert into `PlayTennis`(`DayNo`,`Outlook`,`Temperature`,`Humidity`,`Wind`,`PlayTennis`) values ('D1','Sunny','Mild','Normal','Strong','Yes');
insert into `PlayTennis`(`DayNo`,`Outlook`,`Temperature`,`Humidity`,`Wind`,`PlayTennis`) values ('D12','Overcast','Mild','High','Strong','Yes');
insert into `PlayTennis`(`DayNo`,`Outlook`,`Temperature`,`Humidity`,`Wind`,`PlayTennis`) values ('D13','Overcast','Hot','Normal','Weak','Yes');
insert into `PlayTennis`(`DayNo`,`Outlook`,`Temperature`,`Humidity`,`Wind`,`PlayTennis`) values ('D14','Rain','Mild','High','Strong','No');-- 计算熵
WITH CTE1 AS
(
SELECT  DISTINCT COUNT(PlayTennis)OVER(PARTITION BY PlayTennis) gp,tatal
FROM PlayTennis,(SELECT COUNT(*) tatal FROM PlayTennis) A
)SELECT SUM(-(gp/tatal)*LOG(2,gp/tatal)) entropy_s  FROM
(SELECT gp,tatal
FROM CTE1)A-- 0.940285959354754

假设第一棵决策树选择了特征Outlook 和Temperature,则

-- 计算OutLook特征的信息增益
WITH CTE2 AS
(SELECT  DISTINCT COUNT(PlayTennis)OVER(PARTITION BY Outlook,PlayTennis
ORDER BY PlayTennis) gp,
COUNT(1)OVER(PARTITION BY Outlook ) num,
Outlook,PlayTennis,
(SELECT COUNT(*) tatal FROM PlayTennis) tatal
FROM PlayTennis
)SELECT 0.940285959354754-SUM(-(num/tatal)*(gp/num)*LOG(2,gp/num)) Gain_S_OutLook
FROM CTE2-- 0.246749820735977

同理

第二棵决策树选择了特征Temperature 和Wind,则Gain计算如下:

第三棵决策树选择了特征Outlook和Humidity,则Gain计算如下:

第四棵决策树选择了特征Temperature和Humidity,则Gain计算如下:

第五棵决策树选择了特征Wind 和 Humidity,则Gain计算如下:

则各个特征的gain(信息增益)汇总如下:

Outlook:0.246+0.246= 0.492

Temperature:0.029+0.029+0.029 = 0.087

Humidity:=0.151+0.151+0.151 = 0.453

Wind:0.048+0.048 = 0.096

所以极度随机树来确定的最重要变量是特征 Outlook。

注:因特征选择的随机性,这里计算的特征重要水平可能有差异。

5 总结

Refer :

https://www.geeksforgeeks.org/ml-extra-tree-classifier-for-feature-selection/

https://machinelearningmastery.com/extra-trees-ensemble-with-python/

极度随机树ExtraTreesClassifier相关推荐

  1. 为什么极度随机树比随机森林更随机?这个极度随机的特性有什么好处?在训练阶段、极度随机数比随机森林快还是慢?

    为什么极度随机树比随机森林更随机?这个极度随机的特性有什么好处?在训练阶段.极度随机数比随机森林快还是慢? ExtRa Trees是Extremely Randomized Trees的缩写,意思就是 ...

  2. 集成学习、Bagging算法、Bagging+Pasting、随机森林、极端随机树集成(Extra-trees)、特征重要度、包外评估

    集成学习.Bagging算法.Bagging+Pasting.随机森林.极端随机树集成(Extra-trees).特征重要度.包外评估 目录

  3. ML之回归预测:利用十类机器学习算法(线性回归、kNN、SVM、决策树、随机森林、极端随机树、SGD、提升树、LightGBM、XGBoost)对波士顿数据集回归预测(模型评估、推理并导到csv)

    ML之回归预测:利用十类机器学习算法(线性回归.kNN.SVM.决策树.随机森林.极端随机树.SGD.提升树.LightGBM.XGBoost)对波士顿数据集[13+1,506]回归预测(模型评估.推 ...

  4. rrt算法流程图_RRT算法移动机器人路径规划(快速扩展随机树).pdf

    ( ) 第 34 卷 第 5期 南京理工大学学报 自然科学版 Vo l. 34 No. 5 20 10年 10 月 Journal of N anj ing Un iversity of Scienc ...

  5. 随机森林(randomForest)和极限树或者叫做极端随机树(extraTree),

    随机森林:是一个包含多个决策树的分类器, 并且其输出的类别是由个别树输出的类别的众数而定.,随机森林对回归的结果在内部是取得平均 但是并不是所有的回归都是取的平均,有些是取的和,以后会发博文来解释这样 ...

  6. 快速搜索随机树(RRT---Rapidly-exploring Random Trees)入门及在Matlab中演示

    转载:http://blog.csdn.net/gpeng832/article/details/71249198?locationNum=1&fps=1   快速搜索随机树(RRT -Rap ...

  7. 【运动规划】RRT快速搜索随机树 Rapidly Exploring Random Tree

    Randomized Kinodynamic Planning Steven M. LaValle James J. Kuffner, Jr. 1. Exploring the State Space ...

  8. [matlab] 7.快速搜索随机树(RRT---Rapidly-exploring Random Trees) 路径规划

    RRT是一种多维空间中有效率的规划方法.它以一个初始点作为根节点,通过随机采样增加叶子节点的方式,生成一个随机扩展树,当随机树中的叶子节点包含了目标点或进入了目标区域,便可以在随机树中找到一条由从初始 ...

  9. 决策树与剪枝、bagging与随机森林、极端随机树、Adaboost、GBDT算法原理详解

    目录 1.决策树 1.1 ID3 1.2 C4.5 1.3 CART 1.4 预剪枝和后剪枝 2 bagging与随机森林 2.1 bagging 2.2 随机森林 3 极端随机树 4 GBDT 5 ...

最新文章

  1. 作业11:最优前缀码
  2. 王兴:一鸣开始动手了
  3. Tomcat虚拟路径
  4. sql 以a开头的所有记录_#9#猴子聊数据分析之常见的SQL笔试题和面试题(下)
  5. javascript html 生成 pdf
  6. 1.4 matlab数值数据的类型分类
  7. 用c语言画滚动的圆,求__C语言实现圆球滚动{高手速来}
  8. P5494-[模板]线段树分裂
  9. Android Sdk 国内镜像下载地址
  10. Java核心(四)你不知道的数据集合
  11. 关于QueryRunner数据查询以及常用方法
  12. 资深程序员的笔记:工作多年对于编程语言的理解,新手建议了解!
  13. 关于php的函数,总结关于PHP文件函数有哪些
  14. 人到中年,别再挥霍你的“同情心”了
  15. 规划以及安装Exchange2007
  16. OEA中的AutoUI重构(1) - Command自动生成
  17. 字典攻击——彩虹表攻击与防御
  18. 收藏:常见物联网通信技术概览
  19. week05-继承、多态、抽象类与接口
  20. 【老生谈算法】matlab实现多种滤波器算法源码——多种滤波器

热门文章

  1. VTK:Animation用法实战
  2. opengl加载显示3D模型ms3d类型文件
  3. opengl加载显示3D模型PLY类型文件
  4. OpenCASCADE绘制测试线束:拓扑命令之拓扑变换
  5. boost::system::system_error相关的测试程序
  6. boost::has_range_iterator相关的测试程序
  7. boost::locale::generator用法的测试程序
  8. boost::hana::partition用法的测试程序
  9. boost::geometry::reverse_dispatch用法的测试程序
  10. ITK:在图像上叠加标签图