随机森林做特征重要性排序和特征选择
随机森林模型介绍:
随机森林模型不仅在预测问题上有着广泛的应用,在特征选择中也有常用。
随机森林是以决策树为基学习器的集成学习算法。随机森林非常简单,易于实现,计算开销也很小,更令人惊奇的是它在分类和回归上表现出了十分惊人的性能。
随机森林模型在拟合数据后,会对数据属性列,有一个变量重要性的度量,在sklearn中即为随机森林模型的 feature_importances_ 参数,这个参数返回一个numpy数组对象,对应为随机森林模型认为训练特征的重要程度,float类型,和为1,特征重要性度数组中,数值越大的属性列对于预测的准确性更加重要。
随机森林(RF)简介:
只要了解决策树的算法,那么随机森林是相当容易理解的。随机森林的算法可以用如下几个步骤概括:
- 1、用有抽样放回的方法(bugging)从样本集中选取n个样本作为一个训练集
- 2、用抽样得到的样本集生成一棵决策树。在生成数的每一个结点:
- 1、随机不重复地选择d个特征
- 2、利用这d个特征分别对样本集进行划分,找到最佳的划分特征(可用基尼系数(CART数)、增益率(C4.5)或者信息增益(ID3)判别)
- 3、重复步骤1到步骤2共k次,k即为随机森林中决策树的个数。
- 4、用训练得到的随机森林对测试样本进行预测,并用票选法决定预测的结果。
下图比较直观地展示了随机森林算法:
随机森林的随机性体现在:
- 选取样本时 有放回的随机选取。
会导致不同的树,分别学到整体数据集的一部分特征,最终大家投票,得到最终的预测结果。
sklearn提供前剪枝技术。个人解读,
1.随机森林已经通过随机选择样本和特征,保证了随机性,不用后剪枝应该也能避免过拟合
2.后剪枝是为了避免过拟合,随机森林随机选择变量与树的数量,已经避免了过拟合,没必要去后剪枝了。
3.一般rf要控制的是树的规模,而不是树的置信度,后剪枝的作用其实被集成方法消解了,所以用处不大。
特征重要性评估:
sklearn 已经帮我们封装好了一切。
1、 以UCI上葡萄酒的例子为例,首先导入数据集。
数据集介绍:数据集
特征:
- Alcohol
- Malic acid
- Ash
- Alcalinity of ash
- Magnesium
- Total phenols
- Flavanoids
- Nonflavanoid phenols
- Proanthocyanins
- Color intensity
- Hue
- OD280/OD315 of diluted wines
- Proline
# 导入数据
import pandas as pd
url = 'http://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data'
df = pd.read_csv(url, header = None)
df.columns = ['Class label', 'Alcohol', 'Malic acid', 'Ash', 'Alcalinity of ash', 'Magnesium', 'Total phenols', 'Flavanoids', 'Nonflavanoid phenols', 'Proanthocyanins', 'Color intensity', 'Hue', 'OD280/OD315 of diluted wines', 'Proline']
2、数据初探
#初看数据
df.head(5)
# 标签类别
set(df['Class label']) #{1, 2, 3}
df.shape # (178, 14)
# 统计缺失值
df.isna().sum()
df.describe()
可见除去class label之外共有13个特征,数据集的大小为178。无缺失值。
3、 建模
将数据集分为训练集和测试集。
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
x = df.iloc[:, 1:].values
y = df.iloc[:, 0].values
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 0)
feat_labels = df.columns[1:]
forest = RandomForestClassifier(n_estimators=10000, random_state=0, n_jobs=-1,max_depth=3)
forest.fit(x_train, y_train)
score = forest.score(x_test, y_test) # score=0.98148
forest.feature_importances_
importances = forest.feature_importances_
indices = np.argsort(importances)[::-1] # 下标排序
for f in range(x_train.shape[1]): # x_train.shape[1]=13print("%2d) %-*s %f" % \(f + 1, 30, feat_labels[indices[f]], importances[indices[f]]))
4、设置特征选择阈值:
threshold = 0.15
x_selected = x_train[:, importances > threshold]
x_selected.shape #(124, 3)
查看选择的特征具体情况。
x_selected_columns = feat_labels[importances > threshold]
Index([‘Flavanoids’, ‘Color intensity’, ‘Proline’], dtype=‘object’)
说明仅仅选择了’Flavanoids’, ‘Color intensity’, 'Proline’3列。
import pandas as pd
x_select_pd = pd.DataFrame(x_selected,columns=x_selected_columns)
x_select_pd
特征选择完毕。
产出:
在做特征选择是特性工程最后一步,一般先进行相关性分,消除两两变量的线性相关性,然后再进行随机森林进行重要特征的筛选。
随机森林做特征重要性排序和特征选择相关推荐
- 利用随机森林进行特征重要性排序
第一步就是导包,这里我们主要需要用到的就是sklearn和pandas 我们先对自己的数据集进行一下处理 import numpy as np import pandas as pd testset= ...
- 随机森林的特征重要性排序
OOB计算 用未被选择到的学习的数据,做验证集计算.不必另外做validation了 Feature Selection 如果没有做好这部分,也是有缺点的: 其中最致命的就是,可能得到的是错误的答案, ...
- 随机森林对特征重要性排序
two methods: 1.Mean decrease impurity 不纯度降低 大概是对于每颗树,按照impurity(gini /entropy /information gain)给特征 ...
- 随机森林计算特征重要性_随机森林中计算特征重要性的3种方法
随机森林计算特征重要性 The feature importance describes which features are relevant. It can help with a better ...
- 利用随机森林对特征重要性进行评估 方法一
https://hal.archives-ouvertes.fr/file/index/docid/755489/filename/PRLv4.pdf 前言 随机森林是以决策树为基学习器的集成学习算法 ...
- python随机森林特征重要性_基于随机森林识别特征重要性(翻译)
博主Slav Ivanov 的文章<Identifying churn drivers with Random Forests >部分内容翻译.博主有一款自己的产品RetainKit,用A ...
- 利用随机森林对特征重要性进行评估
文章目录 1 前言 2 随机森林(RF)简介 3 特征重要性评估 4 举个例子 5 参考文献 1 前言 随机森林是以决策树为基学习器的集成学习算法.随机森林非常简单,易于实现,计算开销也很小,更令人惊 ...
- 可视化随机森林的特征重要性
可视化随机森林的特征重要性 # 查看随机森林的特征重要性 import numpy as np import matplotlib.pyplot as plt from sklearn.ensembl ...
- 使用XGboost模块XGBClassifier、plot_importance来做特征重要性排序——修改f1,f2等字段
如果你还不知道如何使用XGboost模块XGBClassifier.plot_importance来做特征重要性排序,戳这个网址即可. 下面我们讲一个全网都没好好讲的问题:如何修改f1,f2成对应的特 ...
最新文章
- 2021牛客暑期多校训练营4 Tree Xor (区间异或上一个数+区间求交)
- 大学计算机数学基础2,大学计算机基础(第2版)
- SimpleDateFormat处理 dd-MMM-yy类型日期
- Java可视化开发开源框架
- 使用HanLP增强Elasticsearch分词功能
- IOS 文本文字下面添加下划线
- 关于Web面试的基础知识点--Html+Css(三)
- 飞龙的安卓逆向系列教程
- SQL Server数据库持续集成简介
- [渝粤教育] 西南科技大学 机械制造装备及工艺 在线考试复习资料(1)
- Arcface训练vgg2face数据集——数据制作
- Android TV开发
- 苹果计算机开机进入安全模式,苹果电脑开机步骤
- HFSS同轴馈电矩形贴片天线馈电点以及尺寸的计算
- android gpu 视频编码,Android Mp4视频录制(OpenGL实现篇,附DEMO)
- 微信小程序 #项目笔记# | 从0到1实现外卖点餐系统小程序
- mysql 签到_签到功能,用mysql还是redis?
- Unity中模型的面数问题
- 计算机server无法启动服务,win7不能启动server服务提示错误1068的解决方法
- 数据优化 | CnOpenData国家基金项目数据
热门文章
- matlab读取指定路径excel文件,MATLAB读取Excel文件
- mysql 插入怎么知道id_如何知道刚刚插入数据库那条数据的id
- 在linux中安装Qt4.8,在linux 如何安装qt 4.8.1
- 用软件测试管理效率,软件测试攻略(一):效率工具分享
- actorx importer 下载_红色新店开业无线端PSD模板_psd素材免费下载_ 640*6001像素(编号:13631922)...
- osg第三方插件的编译方法(以jpeg插件来讲解)
- 一些Setup Factory 教程的链接
- ubuntu nginx php7,ubuntu 16 安装php7+nginx
- java任何表达式都可以当作语句_在Java语言中语句用分号终止,并不是所有的表达式都可以构成语句...
- php 小数点 乘法,js小数点数字相乘、把小数点四舍五入保留两位小数