Machine learning 随机森林中变量重要性的回归量化
是否有可能量化变量的重要性,以计算出一个观测值归入一类的概率。类似于逻辑回归 例如: 如果我有以下自变量 1) 这个人养了多少只猫 2) 一个人养的狗的数量 3) 一个人养了多少只鸡 我的因变量是:一个人是否是善待动物组织的一部分 有没有可能这样说:“如果一个人收养的猫比他现有的动物多一只,那么他成为善待动物组织成员的可能性增加0.12” 我目前正在使用以下方法实现这一特定场景: 1) 利用训练数据建立随机森林模型 2) 预测客户属于某一特定类别的概率(Peta与非Peta) 3) 人为地将每次观察拥有的猫的数量增加1 4) 预测客户的新概率属于这两类中的一类 5) (4)概率和(2)概率之间的平均变化是一个人收养猫的概率的平均增加Machine learning 随机森林中变量重要性的回归量化,machine-learning,statistics,random-forest,logistic-regression,decision-tree,Machine Learning,Statistics,Random Forest,Logistic Regression,Decision Tree,是否有可能量化变量的重要性,以计算出一个观测值归入一类的概率。类似于逻辑回归 例如: 如果我有以下自变量 1) 这个人养了多少只猫 2) 一个人养的狗的数量 3) 一个人养了多少只鸡 我的因变量是:一个人是否是善待动物组织的一部分 有没有可能这样说:“如果一个人收养的猫比他现有的动物多一只,那么他成为善待动物组织成员的可能性增加0.12” 我目前正在使用以下方法实现这一特定场景: 1) 利用训练数据建立随机森林模型 2) 预测客户属于某一特定类别的概率(Peta与非Peta) 3) 人为地将每次
这有意义吗?方法论中有没有我没有想到的缺陷?有没有更好的方法可以做到这一点?如果您使用的是scikitlearn,您可以通过访问已安装的RandomForestClassifier的
功能\u重要性
属性轻松做到这一点。据SciKitLearn称:
作为决策节点使用的特征的相对等级(即深度)
树可用于评估该功能的相对重要性
关于目标变量的可预测性。特征
在树的顶部使用有助于最终预测
决定较大比例的输入样本。预期的
因此,它们所贡献的样本部分可以用作
估计特征的相对重要性。
平均
在几个随机树上的预期活动率可以
减少这种估计的方差,并将其用于特征分析
选择
属性feature\u importance\u
存储树中每个特征的平均深度。
这里有一个例子。让我们从导入必要的库开始
# using this for some array manipulations
import numpy as np
# of course we're going to plot stuff!
import matplotlib.pyplot as plt
# dummy iris dataset
from sklearn.datasets import load_iris
#random forest classifier
from sklearn.ensemble import RandomForestClassifier
一旦我们有了这些,我们将加载虚拟数据集,定义一个分类模型,并将数据拟合到模型中
data = load_iris()
# we're gonna use 100 trees
forest = RandomForestClassifier(n_estimators = 100)
# fit data to model by passing features and labels
forest.fit(data.data, data.target)
现在,我们可以使用特征重要性属性来获得每个特征的分数,这取决于它能够将数据分类到不同目标的程度
# find importances of each feature
importances = forest.feature_importances_
# find the standard dev of each feature to assess the spread
std = np.std([tree.feature_importances_ for tree in forest.estimators_],
axis=0)
# find sorting indices of importances (descending)
indices = np.argsort(importances)[::-1]
# Print the feature ranking
print("Feature ranking:")
for f in range(data.data.shape[1]):
print("%d. feature %d (%f)" % (f + 1, indices[f], importances[indices[f]]))
功能排名:
1.特征2(0.441183)
2.特征3(0.416197)
3.功能0(0.112287)
4.特征1(0.030334)
现在,我们可以将每个功能的重要性绘制为条形图,并决定是否值得保留它们。我们还绘制了误差条以评估显著性
plt.figure()
plt.title("Feature importances")
plt.bar(range(data.data.shape[1]), importances[indices],
color="b", yerr=std[indices], align="center")
plt.xticks(range(data.data.shape[1]), indices)
plt.xlim([-1, data.data.shape[1]])
plt.show()
我道歉。我没听清楚你说你想说什么。我假设你的响应变量是1或0。您可以尝试以下方法:
干杯 欢迎来到SO;由于这不是一个编程问题,我强烈建议您将其移动到其中一个或姐妹站点。如果您希望得到逻辑回归给出的结果,那么为什么不使用逻辑回归?也许您可以使用naive Bayes。您好Manny,感谢您抽出时间回答此问题,你的建议会给我每个变量的相对重要性,但它不会量化重要性,因为改变一个变量会带来多大的概率差异。