我正在研究随机森林分类.
我发现"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中加入一些额外的观察:
我很感激你的意见.
有些人想知道为什么训练数据集应用于predict().
我没有准备任何测试数据集,因为预测是针对OOB样本进行的,而cforest则不然.
cf http://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm
我使用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) 我使用了caret包的train函数和10倍交叉验证.我还设置了某个类的概率预测类classProbs = TRUE中trControl,如下所示:
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) 我试图了解随机森林如何用简单的英语而不是数学来运作.谁能给我一个关于这个算法如何工作的非常简单的解释?
据我所知,我们提供功能和标签,而不告诉算法哪个功能应归类为哪个标签?因为我曾经做过基于概率的朴素贝叶斯,我们需要告诉哪个特征应该是哪个标签.我完全离开了吗?
如果我能得到任何非常简单的解释,我将非常感激.
我在Python上做一些机器学习任务.我需要构建RandomForest,然后构建一个图表,显示训练和测试样本的质量如何取决于随机森林中的树木数量.是否有必要每次使用一定数量的树木建立一个新的随机森林?或者我可以以某种方式迭代地添加树(如果可能的话,你能给出代码的例子如何做到这一点)?
我正在尝试使用随机森林来解决我的问题(下面是波士顿数据集的示例代码,而不是我的数据).我打算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) 我想知道在scikit-learn软件包的最新版本中是否有平衡随机森林(BRF)的实现.BRF用于不平衡数据的情况.它可以作为普通RF工作,但是对于每次自举迭代,它通过欠采样来平衡普遍性类.例如,给定两个类N0 = 100,N1 = 30个实例,在每个随机抽样中,它从第一个类中抽取(替换)30个实例,从第二个类抽取相同数量的实例,即它在一个树上训练一个树.平衡数据集.有关更多信息,请参阅本文.
RandomForestClassifier()确实有'class_weight ='参数,可能设置为'balanced',但我不确定它是否与bootrapped训练样本的下采样有关.
我有一个分类问题(预测一个序列是否属于一个类),我决定使用多种分类方法,以帮助过滤掉误报.
(问题在于生物信息学 - 将蛋白质序列分类为神经肽前体序列.如果有人感兴趣,这是原始文章,以及用于生成特征和训练单个预测变量的代码).
现在,分类器具有大致相似的性能指标(在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
我一直在尝试安装 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) 我运行具有 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) random-forest ×10
python ×5
scikit-learn ×4
r ×3
algorithm ×1
graphviz ×1
grid-search ×1
prediction ×1
python-3.x ×1
r-caret ×1
roc ×1
statistics ×1
tf-idf ×1