标签: random-forest

如何在GridSearchCV(随机森林分类器Scikit)上获得最佳估算器

我正在运行GridSearch CV来优化scikit中分类器的参数.一旦完成,我想知道哪些参数被选为最佳参数.

每当我这样做,我得到一个AttributeError: 'RandomForestClassifier' object has no attribute 'best_estimator_',并且不知道为什么,因为它似乎是文档的合法属性.

from sklearn.grid_search import GridSearchCV

X = data[usable_columns]
y = data[target]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

rfc = RandomForestClassifier(n_jobs=-1,max_features= 'sqrt' ,n_estimators=50, oob_score = True) 

param_grid = {
    'n_estimators': [200, 700],
    'max_features': ['auto', 'sqrt', 'log2']
}

CV_rfc = GridSearchCV(estimator=rfc, param_grid=param_grid, cv= 5)

print '\n',CV_rfc.best_estimator_
Run Code Online (Sandbox Code Playgroud)

产量:

`AttributeError: 'GridSearchCV' object has no attribute 'best_estimator_'
Run Code Online (Sandbox Code Playgroud)

python random-forest scikit-learn cross-validation

37
推荐指数
2
解决办法
7万
查看次数

如何使用Scikit Learn调整随机森林中的参数?

class sklearn.ensemble.RandomForestClassifier(n_estimators=10,
                                              criterion='gini', 
                                              max_depth=None,
                                              min_samples_split=2,
                                              min_samples_leaf=1, 
                                              min_weight_fraction_leaf=0.0, 
                                              max_features='auto', 
                                              max_leaf_nodes=None, 
                                              bootstrap=True, 
                                              oob_score=False,
                                              n_jobs=1, 
                                              random_state=None,
                                              verbose=0, 
                                              warm_start=False, 
                                              class_weight=None)
Run Code Online (Sandbox Code Playgroud)

我使用的是随机森林模型,包含9个样本和大约7000个属性.在这些样本中,我的分类器识别出3个类别.

我知道这远非理想条件,但我试图找出哪些属性在特征预测中最重要.哪些参数最适合优化功能重要性?

我尝试了不同的,n_estimators并注意到"重要特征"(即feature_importances_阵列中的非零值)的数量急剧增加.

我已经阅读了文档,但如果有任何人有这方面的经验,我想知道哪些参数最适合调整,并简要说明原因.

python parameters machine-learning random-forest scikit-learn

34
推荐指数
3
解决办法
3万
查看次数

使用sklearn中的RandomForestClassifier进行不平衡分类

我有一个数据集,其中类是不平衡的.类为'1'或'0',其中类'1':'0'的比例为5:1.你如何计算每个类的预测误差和相应的重新平衡权重在sklearn中随机森林,类似于以下链接:http: //www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm#平衡

python classification machine-learning random-forest scikit-learn

32
推荐指数
3
解决办法
3万
查看次数

`sample_weight`对`DecisionTreeClassifier`在sklearn中的工作方式有何作用?

我从这个文档中读到:

"可以通过从每个类中抽取相同数量的样本来完成类平衡,或者最好通过将每个类的样本权重(sample_weight)的总和归一化为相同的值."

但是,我仍然不清楚它是如何工作的.如果我设置sample_weight一个只有两个可能值的数组,1's和2's,这是否意味着带有2's的样本1在进行装袋时的采样频率是采样的两倍?我想不出一个实际的例子.

decision-tree random-forest scikit-learn

32
推荐指数
2
解决办法
2万
查看次数

如何在Python sklearn的随机森林中解决过度拟合问题?

我正在使用python sklearn包中实现的RandomForestClassifier来构建二进制分类模型.以下是交叉验证的结果:

Fold 1 : Train: 164  Test: 40
Train Accuracy: 0.914634146341
Test Accuracy: 0.55

Fold 2 : Train: 163  Test: 41
Train Accuracy: 0.871165644172
Test Accuracy: 0.707317073171

Fold 3 : Train: 163  Test: 41
Train Accuracy: 0.889570552147
Test Accuracy: 0.585365853659

Fold 4 : Train: 163  Test: 41
Train Accuracy: 0.871165644172
Test Accuracy: 0.756097560976

Fold 5 : Train: 163  Test: 41
Train Accuracy: 0.883435582822
Test Accuracy: 0.512195121951
Run Code Online (Sandbox Code Playgroud)

我使用"价格"功能来预测"质量",这是一个序数值.在每个交叉验证中,有163个训练样例和41个测试示例.

显然,过度拟合发生在这里.那么sklearn提供的任何参数都可以用来克服这个问题吗?我在这里找到了一些参数,例如min_samples_split和min_sample_leaf,但我不太明白如何调整它们.

提前致谢!

python machine-learning decision-tree random-forest scikit-learn

27
推荐指数
1
解决办法
3万
查看次数

随机森林调整 - 树木深度和树木数量

我有关于调整随机森林分类器的基本问题.树木的数量与树木深度之间是否有任何关系?树深度是否必须小于树木的数量?

random-forest

27
推荐指数
3
解决办法
4万
查看次数

随机森林产出解释

我为我的数据运行了一个随机的森林,并以矩阵的形式得到了输出.它适用于分类的规则是什么?

PS我希望客户的个人资料作为输出,例如来自纽约的人,在科技行业工作,等等.

如何解释随机森林的结果?

profiling r random-forest output

26
推荐指数
3
解决办法
5万
查看次数

如何在R的randomForest中使用classwt?

我有一个高度不平衡的数据集,目标类实例的比例如下(编辑:) 60000:1000:1000:1000 60000:1000:1000:50(即总共4个类).我想用它randomForest来预测目标类.

因此,为了减少类不平衡,我使用sampsize参数,将其设置为(编辑:) 和其他一些值,但没有太多使用它.实际上,虽然其他级别预测的改进非常微小,但是在我玩的时候,第一类的准确性有所下降.c(5000, 1000, 1000, 50) sampsizerandomForest()

虽然挖通过档案,我遇到的两个特点strata,这是classwtclasswt那些用于胶印级的不平衡问题.

所有文件classwt都是旧的(通常属于2007年,2008年),所有文件都建议不要使用包的randomForest功能,因为它没有完全实现其完整的功能.所以,第一个问题是:现在完全在实施的R包?如果是,传递参数的是什么?(假设目标变量中有4个类的上述情况)Rfortranclasswt
randomForestc(1, 10, 10, 10)classwtsampsize

据说抵消类不平衡问题的另一个论点是分层抽样,它总是与之结合使用sampsize.我理解strata文档中的内容,但是没有足够的文档或示例可以清楚地了解strata用于克服类不平衡问题.所以,第二个问题是:
什么类型的参数都将被传递给randomForest60000:1000:1000:50?它代表什么?

我想在问题中没有明确提到的单词权重应该在答案中起主要作用.

r random-forest

25
推荐指数
1
解决办法
2万
查看次数

r random forest error - 新数据中预测变量的类型不匹配

我试图在R(quantregForest)中使用分位数回归森林函数,它建立在随机森林包上.我收到类型不匹配错误,我无法理解为什么.

我用它训练模型

qrf <- quantregForest(x = xtrain, y = ytrain)
Run Code Online (Sandbox Code Playgroud)

哪个工作没有问题,但当我尝试用新数据测试时

quant.newdata <- predict(qrf, newdata= xtest)
Run Code Online (Sandbox Code Playgroud)

它给出以下错误:

Error in predict.quantregForest(qrf, newdata = xtest) : 
Type of predictors in new data do not match types of the training data.
Run Code Online (Sandbox Code Playgroud)

我的培训和测试数据来自单独的文件(因此是单独的数据框),但具有相同的格式.我已经检查了预测变量的类

sapply(xtrain, class)
sapply(xtest, class)
Run Code Online (Sandbox Code Playgroud)

这是输出:

> sapply(xtrain, class)
pred1     pred2     pred3     pred4     pred5     pred6     pred7     pred8 
"factor" "integer" "integer" "integer"  "factor"  "factor" "integer"  "factor" 
pred9    pred10    pred11    pred12 
"factor"  "factor"  "factor"  "factor" 


> sapply(xtest, class)
pred1     pred2     pred3     pred4 …
Run Code Online (Sandbox Code Playgroud)

r random-forest

24
推荐指数
5
解决办法
3万
查看次数

如何更改pandas中多列的数据类型

我正在尝试在 pandas 数据帧上运行随机森林。我知道数据框中没有空值或无穷大,但当我拟合模型时不断收到 ValueError 。大概这是因为我有 flaot64 列而不是 float32;我还有很多 bool 和 int 类型的列。有没有办法将所有 float 列更改为 float32?

我尝试重写 CSV,并且相对确定问题不在于此。我以前从未在 float64 上运行随机森林时遇到过问题,所以我不确定这次出了什么问题。

labels = electric['electric_ratio']
electric = electric[[x for x in electric.columns if x != 'electric_ratio']]
electric_list = electric.columns
first_train, first_test, train_labels, test_labels = train_test_split(electric, labels)
rf = RandomForestRegressor(n_estimators = 1000, random_state=88)
rf_1 = rf.fit(first_train, train_labels)
Run Code Online (Sandbox Code Playgroud)

我希望这适合模型,但始终得到

ValueError: Input contains NaN, infinity or a value too large for dtype('float32').
Run Code Online (Sandbox Code Playgroud)

python machine-learning pandas random-forest jupyter-notebook

24
推荐指数
3
解决办法
3万
查看次数