标签: random-forest

随机森林由R包方供应随机数据

我正在研究随机森林分类.

我发现"party"包中的cforest通常比"randomForest"表现更好.
然而,似乎cforest容易过度装配.

一个玩具的例子

这是一个随机数据集,包括二进制因子的响应和从rnorm()生成的10个数值变量.

# Sorry for redundant preparation.
data <- data.frame(response=rnorm(100))
data$response <- factor(data$response < 0)
data <- cbind(data, matrix(rnorm(1000), ncol=10))
colnames(data)[-1] <- paste("V",1:10,sep="")
Run Code Online (Sandbox Code Playgroud)

执行cforest,使用无偏的参数集(可能推荐).

cf <- cforest(response ~ ., data=data, controls=cforest_unbiased())
table(predict(cf), data$response)
#       FALSE TRUE
# FALSE    45    7
# TRUE      6   42
Run Code Online (Sandbox Code Playgroud)

无意义数据的预测性能相当好.

另一方面,randomForest诚实地说.

rf <- randomForest(response ~., data=data)
table(predict(rf),data$response)
#       FALSE TRUE
# FALSE    25   27
# TRUE     26   22
Run Code Online (Sandbox Code Playgroud)

这些差异来自哪里?
我担心我会以错误的方式使用cforest.

让我在cforest中加入一些额外的观察:

  1. 变量的数量对结果影响不大.
  2. 与使用一些现实解释变量的那些相比,变量重要性值(由varimp(cf)计算)相当低.
  3. ROC曲线的AUC接近1.

我很感激你的意见.

附加说明

有些人想知道为什么训练数据集应用于predict().
我没有准备任何测试数据集,因为预测是针对OOB样本进行的,而cforest则不然.
cf http://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm

r random-forest

9
推荐指数
1
解决办法
5402
查看次数

RandomForest包中的负%IncMSE是什么意思?

我使用RandomForest来解决回归问题.我importance(rf,type=1)以前得到变量的%IncMSE,其中一个有负%IncMSE.这是否意味着此变量对模型不利?我搜索了互联网以获得一些答案,但我没有找到明确的答案.我还在模型的摘要中找到了一些奇怪的东西(附后见下文),虽然我定义ntrees为800 ,但似乎只使用了一棵树.

模型:

rf<-randomForest(var1~va2+var3+..+var35,data=d7depo,ntree=800,keep.forest=FALSE, importance=TRUE)

summary(rf)
                Length Class  Mode     
call                6  -none- call     
type                1  -none- character
predicted       26917  -none- numeric  
mse               800  -none- numeric  
rsq               800  -none- numeric  
oob.times       26917  -none- numeric  
importance         70  -none- numeric  
importanceSD       35  -none- numeric  
localImportance     0  -none- NULL     
proximity           0  -none- NULL     
ntree               1  -none- numeric  
mtry                1  -none- numeric  
forest              0  -none- NULL     
coefs               0  -none- NULL     
y               26917  -none- numeric  
test                0  -none- NULL     
inbag               0  -none- …
Run Code Online (Sandbox Code Playgroud)

statistics r prediction random-forest

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

在R中使用插入符训练后如何计算ROC下的ROC和AUC?

我使用了caret包的train函数和10倍交叉验证.我还设置了某个类的概率预测类classProbs = TRUEtrControl,如下所示:

myTrainingControl <- trainControl(method = "cv", 
                              number = 10, 
                              savePredictions = TRUE, 
                              classProbs = TRUE, 
                              verboseIter = TRUE)

randomForestFit = train(x = input[3:154], 
                        y = as.factor(input$Target), 
                        method = "rf", 
                        trControl = myTrainingControl, 
                        preProcess = c("center","scale"), 
                        ntree = 50)
Run Code Online (Sandbox Code Playgroud)

我得到的输出预测如下.

  pred obs    0    1 rowIndex mtry Resample

1    0   1 0.52 0.48       28   12   Fold01
2    0   0 0.58 0.42       43   12   Fold01
3    0   1 0.58 0.42       51   12   Fold01 …
Run Code Online (Sandbox Code Playgroud)

r random-forest roc r-caret

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

随机森林的简单解释

我试图了解随机森林如何用简单的英语而不是数学来运作.谁能给我一个关于这个算法如何工作的非常简单的解释?

据我所知,我们提供功能和标签,而不告诉算法哪个功能应归类为哪个标签?因为我曾经做过基于概率的朴素贝叶斯,我们需要告诉哪个特征应该是哪个标签.我完全离开了吗?

如果我能得到任何非常简单的解释,我将非常感激.

algorithm classification random-forest

9
推荐指数
3
解决办法
6172
查看次数

Python - 随机森林 - 迭代添加树

我在Python上做一些机器学习任务.我需要构建RandomForest,然后构建一个图表,显示训练和测试样本的质量如何取决于随机森林中的树木数量.是否有必要每次使用一定数量的树木建立一个新的随机森林?或者我可以以某种方式迭代地添加树(如果可能的话,你能给出代码的例子如何做到这一点)?

python random-forest scikit-learn

9
推荐指数
1
解决办法
4456
查看次数

随机森林超参数调整scikit-learn使用GridSearchCV

我正在尝试使用随机森林来解决我的问题(下面是波士顿数据集的示例代码,而不是我的数据).我打算GridSearchCV用于超参数调整,但不同参数的值范围应该是多少?我怎么知道我选择的范围是正确的?

我正在互联网上阅读它并且有人建议在第二次网格搜索中尝试"放大"最佳值(例如,如果它是10则尝试[5,20,50]).

这是正确的方法吗?我应该对随机森林所需的所有参数使用这种方法吗?这种方法可能会错过"好"的组合,对吧?

import numpy as np
from sklearn.grid_search import GridSearchCV
from sklearn.datasets import load_digits
from sklearn.ensemble import RandomForestRegressor
digits = load_boston()
X, y = dataset.data, dataset.target
model = RandomForestRegressor(random_state=30)
param_grid = { "n_estimators"      : [250, 300],
           "criterion"         : ["gini", "entropy"],
           "max_features"      : [3, 5],
           "max_depth"         : [10, 20],
           "min_samples_split" : [2, 4] ,
           "bootstrap": [True, False]}
grid_search = GridSearchCV(clf, param_grid, n_jobs=-1, cv=2)
grid_search.fit(X, y)
print grid_search.best_params_
Run Code Online (Sandbox Code Playgroud)

python random-forest scikit-learn grid-search

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

scikit-learn(python)中的平衡随机森林

我想知道在scikit-learn软件包的最新版本中是否有平衡随机森林(BRF)的实现.BRF用于不平衡数据的情况.它可以作为普通RF工作,但是对于每次自举迭代,它通过欠采样来平衡普遍性类.例如,给定两个类N0 = 100,N1 = 30个实例,在每个随机抽样中,它从第一个类中抽取(替换)30个实例,从第二个类抽取相同数量的实例,即它在一个树上训练一个树.平衡数据集.有关更多信息,请参阅本文.

RandomForestClassifier()确实有'class_weight ='参数,可能设置为'balanced',但我不确定它是否与bootrapped训练样本的下采样有关.

classification random-forest scikit-learn

9
推荐指数
2
解决办法
3361
查看次数

使用多个分类器时 - 如何测量整体的性能?[SciKit学习]

我有一个分类问题(预测一个序列是否属于一个类),我决定使用多种分类方法,以帮助过滤掉误报.

(问题在于生物信息学 - 将蛋白质序列分类为神经肽前体序列.如果有人感兴趣,这是原始文章,以及用于生成特征和训练单个预测变量的代码).

现在,分类器具有大致相似的性能指标(在10倍CV的训练集上具有83-94%的准确度/精度/等),因此我的"天真"方法是简单地使用多个分类器(随机森林,ExtraTrees,SVM) (线性内核),SVM(RBF内核)和GRB),并使用简单多数投票.

我的问题是:我如何获得不同分类器和/或投票预测的绩效指标?也就是说,我想看看使用多个分类器是否可以提高我的性能,或者它们的组合是什么.

我的直觉可能是使用ROC分数,但我不知道如何"结合"结果并从分类器的组合中获得结果.(也就是说,要查看单独的每个分类器的ROC曲线[已知],然后使用分类器组合查看ROC曲线或训练数据的AUC).

(我目前使用随机森林和ExtraTrees方法使用"预测概率"过滤预测,然后我任意过滤预测得分低于'0.85'的结果.另外一层过滤是"有多少分类器同意这种蛋白质的正分类").

非常感谢你!!

(网站实施,我们使用多个分类器 - http://neuropid.cs.huji.ac.il/)

整个shebang是使用SciKit learn和python实现的.引文和所有!)

python machine-learning bioinformatics random-forest scikit-learn

8
推荐指数
1
解决办法
4749
查看次数

安装graphviz,没有名为graphviz的模块

我一直在尝试安装 graphviz 并与 python 连接来绘制决策树的一些节点。我读过很多与我有同样问题的线程,但我执行了大部分解决方案,但我仍然无法执行我的决策树:(

我不是程序员,我只是一个简单的经济学家,正在尝试学习机器学习模型,所以对我来说很难阅读其他线程中提供的大部分解决方案。

我已经可以conda install -c anaconda graphviz在我的cmd中安装并且conda install -c anaconda pydot安装完成了。(我还从GraphViz页面下载了rar包)

然后我尝试导入 graphviz,但 python 显示以下错误No module named 'graphviz'

因此,我尝试使用以下 cd 添加到我的环境中的新路径C:\Program Files (x86)\Graphviz2.38\bin,但我仍然遇到同样的问题。

我试图在我的间谍代码中运行以下脚本,但没有成功

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

import pydot
from IPython.display import Image, display
# import graphviz as gv

from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.externals.six import StringIO  
from sklearn.tree import DecisionTreeRegressor, DecisionTreeClassifier, 
export_graphviz
from …
Run Code Online (Sandbox Code Playgroud)

python graphviz decision-tree python-3.x random-forest

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

TF-IDF 和非 TF-IDF 功能的准确性

我运行具有 TF-IDF 和非 TF-IDF 特征的随机森林算法。

总共特征数量约为 130k(在对 TF-IDF 特征进行特征选择之后),训练集的观察数量约为 120k。

其中大约 500 个是非 TF-IDF 功能。

问题是随机森林在同一测试集上的准确性等

- 只有非 TF-IDF 的特征是 87%

- TF-IDF 和非 TF-IDF 特征为 76%

准确性的显着恶化在我的脑海中引发了一些问题。

我与模型训练的相关代码如下:

drop_columns = ['labels', 'complete_text_1', 'complete_text_2']

# Split to predictors and targets
X_train = df.drop(columns=drop_columns).values
y_train = df['labels'].values


# Instantiate, train and transform with tf-idf models
vectorizer_1 = TfidfVectorizer(analyzer="word", ngram_range=(1,2), vocabulary=tf_idf_feature_names_selected)
X_train_tf_idf_1 = vectorizer_1.fit_transform(df['complete_text_1'])

vectorizer_2 = TfidfVectorizer(analyzer="word", ngram_range=(1,2), vocabulary=tf_idf_feature_names_selected)
X_train_tf_idf_2 = vectorizer_2.fit_transform(df['complete_text_2'])


# Covert the general features to sparse array
X_train = …
Run Code Online (Sandbox Code Playgroud)

python machine-learning tf-idf random-forest

8
推荐指数
1
解决办法
635
查看次数