极度随机树ExtraTreesClassifier
极度随机树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相关推荐
- 为什么极度随机树比随机森林更随机?这个极度随机的特性有什么好处?在训练阶段、极度随机数比随机森林快还是慢?
为什么极度随机树比随机森林更随机?这个极度随机的特性有什么好处?在训练阶段.极度随机数比随机森林快还是慢? ExtRa Trees是Extremely Randomized Trees的缩写,意思就是 ...
- 集成学习、Bagging算法、Bagging+Pasting、随机森林、极端随机树集成(Extra-trees)、特征重要度、包外评估
集成学习.Bagging算法.Bagging+Pasting.随机森林.极端随机树集成(Extra-trees).特征重要度.包外评估 目录
- ML之回归预测:利用十类机器学习算法(线性回归、kNN、SVM、决策树、随机森林、极端随机树、SGD、提升树、LightGBM、XGBoost)对波士顿数据集回归预测(模型评估、推理并导到csv)
ML之回归预测:利用十类机器学习算法(线性回归.kNN.SVM.决策树.随机森林.极端随机树.SGD.提升树.LightGBM.XGBoost)对波士顿数据集[13+1,506]回归预测(模型评估.推 ...
- rrt算法流程图_RRT算法移动机器人路径规划(快速扩展随机树).pdf
( ) 第 34 卷 第 5期 南京理工大学学报 自然科学版 Vo l. 34 No. 5 20 10年 10 月 Journal of N anj ing Un iversity of Scienc ...
- 随机森林(randomForest)和极限树或者叫做极端随机树(extraTree),
随机森林:是一个包含多个决策树的分类器, 并且其输出的类别是由个别树输出的类别的众数而定.,随机森林对回归的结果在内部是取得平均 但是并不是所有的回归都是取的平均,有些是取的和,以后会发博文来解释这样 ...
- 快速搜索随机树(RRT---Rapidly-exploring Random Trees)入门及在Matlab中演示
转载:http://blog.csdn.net/gpeng832/article/details/71249198?locationNum=1&fps=1 快速搜索随机树(RRT -Rap ...
- 【运动规划】RRT快速搜索随机树 Rapidly Exploring Random Tree
Randomized Kinodynamic Planning Steven M. LaValle James J. Kuffner, Jr. 1. Exploring the State Space ...
- [matlab] 7.快速搜索随机树(RRT---Rapidly-exploring Random Trees) 路径规划
RRT是一种多维空间中有效率的规划方法.它以一个初始点作为根节点,通过随机采样增加叶子节点的方式,生成一个随机扩展树,当随机树中的叶子节点包含了目标点或进入了目标区域,便可以在随机树中找到一条由从初始 ...
- 决策树与剪枝、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 ...
最新文章
- 作业11:最优前缀码
- 王兴:一鸣开始动手了
- Tomcat虚拟路径
- sql 以a开头的所有记录_#9#猴子聊数据分析之常见的SQL笔试题和面试题(下)
- javascript html 生成 pdf
- 1.4 matlab数值数据的类型分类
- 用c语言画滚动的圆,求__C语言实现圆球滚动{高手速来}
- P5494-[模板]线段树分裂
- Android Sdk 国内镜像下载地址
- Java核心(四)你不知道的数据集合
- 关于QueryRunner数据查询以及常用方法
- 资深程序员的笔记:工作多年对于编程语言的理解,新手建议了解!
- 关于php的函数,总结关于PHP文件函数有哪些
- 人到中年,别再挥霍你的“同情心”了
- 规划以及安装Exchange2007
- OEA中的AutoUI重构(1) - Command自动生成
- 字典攻击——彩虹表攻击与防御
- 收藏:常见物联网通信技术概览
- week05-继承、多态、抽象类与接口
- 【老生谈算法】matlab实现多种滤波器算法源码——多种滤波器
热门文章
- VTK:Animation用法实战
- opengl加载显示3D模型ms3d类型文件
- opengl加载显示3D模型PLY类型文件
- OpenCASCADE绘制测试线束:拓扑命令之拓扑变换
- boost::system::system_error相关的测试程序
- boost::has_range_iterator相关的测试程序
- boost::locale::generator用法的测试程序
- boost::hana::partition用法的测试程序
- boost::geometry::reverse_dispatch用法的测试程序
- ITK:在图像上叠加标签图