
正文
随机森林python函数 随机森林模型python
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
特征筛选(随机森林)
随机森林能够度量每个特征的重要性,我们可以依据这个重要性指标进而选择最重要的特征。sklearn中已经实现了用随机森林评估特征重要性,在训练好随机森林模型后,直接调用feature_importan ces 属性就能得到每个特征的重要性。
一般情况下,数据集的特征成百上千,因此有必要从中选取对结果影响较大的特征来进行进一步建模,相关的方法有:主成分分析、lasso等,这里我们介绍的是通过随机森林来进行筛选。
用随机森林进行特征重要性评估的思想比较简单,主要是看每个特征在随机森林中的每棵树上做了多大的贡献,然后取平均值,最后比较不同特征之间的贡献大小。
贡献度的衡量指标包括:基尼指数(gini)、袋外数据(OOB)错误率作为评价指标来衡量。
衍生知识点:权重随机森林的应用(用于增加小样本的识别概率,从而提高总体的分类准确率)
随机森林/CART树在使用时一般通过gini值作为切分节点的标准,而在加权随机森林(WRF)中,权重的本质是赋给小类较大的权重,给大类较小的权重。也就是给小类更大的惩罚。权重的作用有2个,第1点是用于切分点选择中加权计算gini值,表达式如下:
其中,N表示未分离的节点,N L 和N R 分别表示分离后的左侧节点和右侧节点,W i 为c类样本的类权重,n i 表示节点内各类样本的数量,Δi是不纯度减少量,该值越大表明分离点的分离效果越好。
第2点是在终节点,类权重用来决定其类标签,表达式如下:
参考文献:随机森林针对小样本数据类权重设置
这里介绍通过gini值来进行评价,我们将变量的重要性评分用VIM来表示,gini值用GI表示,假设有m个特征X 1 ,X 2 ,...X c ,现在要计算出每个特征X j 的gini指数评分VIM j ,即第j个特征在随机森林所有决策树中节点分裂不纯度的平均改变量,gini指数的计算公式如下表示:
其中,k表示有k个类别,p mk 表示节点m(将特征m逐个对节点计算gini值变化量)中类别k所占的比例。
特征X j 在节点m的重要性,即节点m分枝前后的gini指数变化量为:
其中GI l 和GI r 分别表示分枝后两个新节点的gini指数。
如果特征X j 在决策树i中出现的节点在集合M中,那么X j 在第i棵树的重要性为:
假设随机森林共有n棵树,那么:
最后把所有求得的重要性评分进行归一化处理就得到重要性的评分:
通过sklearn中的随机森林返回特征的重要性:
值得庆幸的是,sklearnsklearn已经帮我们封装好了一切,我们只需要调用其中的函数即可。
我们以UCI上葡萄酒的例子为例,首先导入数据集。
然后,我们来大致看下这时一个怎么样的数据集
输出为
可见共有3个类别。然后再来看下数据的信息:
输出为
可见除去class label之外共有13个特征,数据集的大小为178。
按照常规做法,将数据集分为训练集和测试集。
好了,这样一来随机森林就训练好了,其中已经把特征的重要性评估也做好了,我们拿出来看下。
输出的结果为
对的就是这么方便。
如果要筛选出重要性比较高的变量的话,这么做就可以
输出为
瞧,这不,帮我们选好了3个重要性大于0.15的特征了吗~
[1] Raschka S. Python Machine Learning[M]. Packt Publishing, 2015.
[2] 杨凯, 侯艳, 李康. 随机森林变量重要性评分及其研究进展[J]. 2015.
相关问答
Q1: 我用Python进行随机森林回归,训练好模型后用来预测,预测值却为一个定值,请问这是什么原因导致的?
随机森林是以决策树为基础的一种更高级的算法。随机森林可用于回归也可以用于分类。它的工作原理是生成多个分类器/模型随机森林python函数,各自独立地学习和作出预测。最后对这些预测进行集成随机森林python函数,因此优于任何一个单分类的做出预测,是一种优秀的机器学习模型。
之所以随机森林python函数你没能学习到有效的模型,可能是你的数据中的因子与预测指标的关联强度不够,因此学习到的是常数模型,也有可能是数据的处理流程或者模型的使用方法不对。网页链接这个网址上的课程完整讲解随机森林python函数了随机森林算法的使用,希望对你有帮助
Q2: 求问随机森林算法的简单实现过程?
随机森林(Random forest)指的是利用多棵树对样本进行训练并预测的一种分类器。 并且其输出的类别是由个别树输出的类别的众数而定。在机器学习中有一个地位很重要的包scikit-learn可实现随机森林算法。
原理:(随机森林的分类预测和回归预测sklearn.ensemble.RandomForestRegressor方法)
(1)给定训练集S,测试集T,特征维数F。确定参数:使用到的CART的数量t,每棵树的深度d,每个节点使用到的特征数量f,终止条件:节点上最少样本数s,节点上最少的信息增益m,对于第1-t棵树,i=1-t:
(2)从S中有放回的抽取大小和S一样的训练集S(i),作为根节点的样本,从根节点开始训练
(3)如果当前节点上达到终止条件,则设置当前节点为叶子节点,如果是分类问题,该叶子节点的预测输出为当前节点样本集合中数量最多的那一类c(j),概率p为c(j)占当前样本集的比例;如果是回归问题,预测输出为当前节点样本集各个样本值的平均值。然后继续训练其他节点。如果当前节点没有达到终止条件,则从F维特征中无放回的随机选取f维特征。利用这f维特征,寻找分类效果最好的一维特征k及其阈值th,当前节点上样本第k维特征小于th的样本被划分到左节点,其余的被划分到右节点。继续训练其他节点。
(4)重复(2)(3)直到所有节点都训练过了或者被标记为叶子节点。
(5)重复(2),(3),(4)直到所有CART都被训练过。
随机森林的简单实现过程如下:
一、 开发环境、编译环境:
PyCharm Community Edition 2016.2.3
Python2.7.10
二、 所用库及安装方法:
pandas[python自带]
sklearn:命令行pip install sklearn;如果没有安装pip,先使用easy_install pip安装pip;如果在MAC上没有权限,使用sudo pip install sklearn;
三、 代码介绍
1. 使用pandas读取本地excel的训练集和测试集,将属性集赋给X_train和Y_train;将要预测的集合赋给X_test和Y_test;
2. 使用DictVectorizer对数据进行规范化、标准化
3. 生成RandomForestRegressor对象,并将训练集传入fit方法中进行训练
4. 调用predict函数进行预测,并将结果存入y_predict变量中;
5. 使用mean_squared_error、score方法输出MSE、NMSE值对拟合度、稳定度进行分析;输出feature_importance,对影响最终结果的属性进行分析;
6. 详细代码见附录
四、 附录
# coding:utf-8
import pandas as pd
data_train = pd.read_excel('/Users/xiaoliu/Desktop/data_train.xlsx')
X_train = data_train[['CPI', 'GDP', 'PPI', 'AJR', 'BJFJ', 'FBDR', 'PCFD', 'PCFDED', 'BDR']]
y_train = data_train['FJ']
data_test = pd.read_excel('/Users/xiaoliu/Desktop/data_test.xlsx')
X_test = data_test[['CPI', 'GDP', 'PPI', 'AJR', 'BJFJ', 'FBDR', 'PCFD', 'PCFDED', 'BDR']]
y_test = data_test['FJ']
from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer(sparse=False)
X_train = vec.fit_transform(X_train.to_dict(orient='records'))
X_test = vec.transform(X_test.to_dict(orient='records'))
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor()
rf.fit(X_train,y_train)
y_predict = rf.predict(X_test)
print 'predict value:',y_predict
from sklearn.metrics import mean_squared_error
print 'MSE:', mean_squared_error(y_test, y_predict)
print 'NMES:',rf.score(X_test, y_test)
print rf.feature_importances_
随机森林python函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于随机森林模型python、随机森林python函数的信息别忘了在本站进行查找喔。







