首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随机森林分类器概率

随机森林分类器概率
EN

Data Science用户
提问于 2018-04-23 17:47:36
回答 2查看 4.6K关注 0票数 2

我的数据集有140 k行,5个属性,1个减值作为目标变量(值可以是0(客户流失),也可以是1(客户不流失))。我把我的数据集分成80%的训练和20%的测试。我的数据集严重不平衡。84%的数据集有0作为目标变量,只有16%的数据集有1作为目标变量。

我的培训数据集的特性重要性如下:

ColumnA = 28%,ColumnB = 27%,AnnualFee- 17%,ColumnD - 17%,ColumnE - 11%

我最初想对我的模型做一个非常简单的检查。在创建了一个随机森林分类器之后,我在一个只有5行的数据集中测试了模型。除了列AnnualFee之外,我保持所有变量不变。下面是我的测试数据集的快照:

代码语言:javascript
复制
 Column A   Column B    AnnualFee   ColumnD ColumnE
 4500       3.9          5%         2.1      7
 4500       3.9          10%        2.1      7
 4500       3.9          15%        2.1      7
 4500       3.9          20%        2.1      7
 4500       3.9          25%        2.1      7

我预计,随着年费的增加,客户流失的可能性也会增加。但我的rf.predict_proba(X_test)似乎到处都是。我不知道为什么会发生这种情况:

我尝试了两种不同的代码,但这两种代码似乎都出现了异常:

代码1:

代码语言:javascript
复制
rf = RandomForestClassifier(n_estimators = 400,random_state = 0, 
min_samples_split=2,min_samples_leaf=5,
                      class_weight = {0:.0001,1:.9999})
rf.fit(X_train, Y_train )

代码2:不是我的代码-在线上得到的

代码语言:javascript
复制
from sklearn.model_selection import StratifiedKFold
from sklearn.model_selection import GridSearchCV
clf_4 = RandomForestClassifier(class_weight = {0:1,1:5})
estimators_range = np.array([2,3,4,5,6,7,8,9,10,15,20,25])
depth_range = np.array([11,21,35,51,75,101,151,201,251,301,401,451,501])
kfold = 5
skf = StratifiedKFold(n_splits = kfold,random_state = 42)

model_grid = [{'max_depth': depth_range, 'n_estimators': estimators_range}]
grid = GridSearchCV(clf_4, model_grid, cv = StratifiedKFold(n_splits = 5, 
random_state = 42),n_jobs = 8, scoring = 'roc_auc')
grid.fit(X_train,Y_train)

我真的很感激在这方面的任何帮助!

EN

回答 2

Data Science用户

发布于 2018-04-24 02:18:51

  1. 你说“到处都是”是什么意思?你试过实际使用诸如准确性分数、AUC等评分标准吗?这些将在确定您的模型的性能方面发挥至关重要的作用。我建议中华民国从一开始就开始,因为由于阶级不平衡,准确性会引起很大的误导。
  2. 你用的权重没什么意义。您通常会使用类似于n_samples / (n_classes * np.bincount(y))的东西来进行加权,但是由于sklearn提供了类的自动平衡,所以您可能应该通过设置class_weights='balanced'http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html来使用它。
票数 2
EN

Data Science用户

发布于 2019-04-24 14:08:04

你可以直接执行单调性。sklearns RF似乎不支持这一点(https://stats.stackexchange.com/questions/383423/how-to-enforce-a-monotonic-answer-in-a-single-feature-in-a-binary-classification),但XGBoost (https://xgboost.readthedocs.io/en/latest/tutorials/monotonic.html)和其他一些人支持。

当然,一般说来,改进模型是很好的(请参阅Carlo的初步回答);而且,你对单调性的直觉可能在现实中并不成立。

票数 2
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/30704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档