测量杂质有三种方法:



每种方法有哪些差异和适当的用例?
我有一个成功的随机森林模型,我想将它集成到另一个软件中,我知道我可以使用一些库(比如Java中的fastRF或ALGLIB的DecisionForest用于其他语言),但我如何使用R中训练的"模型"?我必须用新语言重新训练它吗?
另一种观点是以某种方式提取它,但我不知道该怎么做...
任何帮助将不胜感激
提前致谢
是否可以将RandomForests应用于非常小的数据集?我有一个包含许多变量的数据集,但每个只有25个观察值.随机森林产生合理的结果,低OOB误差(10-25%).关于使用的最小观测数量是否有任何经验法则?事实上,其中一个响应变量是不平衡的,如果我要对它进行二次采样,我最终会得到更少的观察结果.提前致谢
我正在研究随机森林分类.
我发现"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
我正在尝试提取我使用PySpark训练的随机森林对象的类概率.但是,我没有在文档中的任何地方看到它的示例,也不是它的方法RandomForestModel.
如何从RandomForestModelPySpark中的分类器中提取类概率?
以下是文档中提供的示例代码,它仅提供最终类(而不是概率):
from pyspark.mllib.tree import RandomForest
from pyspark.mllib.util import MLUtils
# Load and parse the data file into an RDD of LabeledPoint.
data = MLUtils.loadLibSVMFile(sc, 'data/mllib/sample_libsvm_data.txt')
# Split the data into training and test sets (30% held out for testing)
(trainingData, testData) = data.randomSplit([0.7, 0.3])
# Train a RandomForest model.
# Empty categoricalFeaturesInfo indicates all features are continuous.
# Note: Use larger numTrees in practice.
# Setting featureSubsetStrategy="auto" lets the algorithm choose.
model = RandomForest.trainClassifier(trainingData, …Run Code Online (Sandbox Code Playgroud) 我在Python上做一些机器学习任务.我需要构建RandomForest,然后构建一个图表,显示训练和测试样本的质量如何取决于随机森林中的树木数量.是否有必要每次使用一定数量的树木建立一个新的随机森林?或者我可以以某种方式迭代地添加树(如果可能的话,你能给出代码的例子如何做到这一点)?
这是我的代码:
set.seed(1)
#Boruta on the HouseVotes84 data from mlbench
library(mlbench) #has HouseVotes84 data
library(h2o) #has rf
#spin up h2o
myh20 <- h2o.init(nthreads = -1)
#read in data, throw some away
data(HouseVotes84)
hvo <- na.omit(HouseVotes84)
#move from R to h2o
mydata <- as.h2o(x=hvo,
destination_frame= "mydata")
#RF columns (input vs. output)
idxy <- 1
idxx <- 2:ncol(hvo)
#split data
splits <- h2o.splitFrame(mydata,
c(0.8,0.1))
train <- h2o.assign(splits[[1]], key="train")
valid <- h2o.assign(splits[[2]], key="valid")
# make random forest
my_imp.rf<- h2o.randomForest(y=idxy,x=idxx,
training_frame = train,
validation_frame = …Run Code Online (Sandbox Code Playgroud) 我通过scikit-learn图书馆学习机器学习.我使用以下代码将决策树分类器和随机森林分类器应用于我的数据:
def decision_tree(train_X, train_Y, test_X, test_Y):
clf = tree.DecisionTreeClassifier()
clf.fit(train_X, train_Y)
return clf.score(test_X, test_Y)
def random_forest(train_X, train_Y, test_X, test_Y):
clf = RandomForestClassifier(n_estimators=1)
clf = clf.fit(X, Y)
return clf.score(test_X, test_Y)
Run Code Online (Sandbox Code Playgroud)
为什么随机森林分类器的结果更好(100次运行,随机抽样2/3的数据用于训练,1/3用于测试)?
100%|???????????????????????????????????????| 100/100 [00:01<00:00, 73.59it/s]
Algorithm: Decision Tree
Min : 0.3883495145631068
Max : 0.6476190476190476
Mean : 0.4861783113770316
Median : 0.48868030937802126
Stdev : 0.047158171852401135
Variance: 0.0022238931724605985
100%|???????????????????????????????????????| 100/100 [00:01<00:00, 85.38it/s]
Algorithm: Random Forest
Min : 0.6846846846846847
Max : 0.8653846153846154
Mean : 0.7894823428836184
Median : 0.7906101571063208
Stdev : 0.03231671150915106
Variance: 0.0010443698427656967 …Run Code Online (Sandbox Code Playgroud) python machine-learning decision-tree random-forest scikit-learn
我对 Python 比较陌生,正在尝试准备一些数据来训练 RandomForest。由于各种原因,我们希望数据是离散的,所以有几个连续的变量需要离散化。我qcut在 Pandas 中找到了它,它似乎可以做我想做的事 - 我可以设置多个垃圾箱,它会将变量离散化到那么多垃圾箱中,试图保持每个垃圾箱中的计数均匀。
但是,输出的pandas.qcut是一个Intervals列表,scikit-learn中的RandomForest分类器需要一个字符串。我发现我可以使用.astype(str). 这是我正在做的事情的一个快速示例:
import pandas as pd
from random import sample
vals = sample(range(0,100), 100)
cuts = pd.qcut(vals, q=5)
str_cuts = pd.qcut(vals, q=5).astype(str)
Run Code Online (Sandbox Code Playgroud)
然后 str_cuts 是传入随机森林的变量之一。
但是,该系统的目的是训练 RandomForest,将其保存到文件中,然后允许某人在以后加载它并获得新测试实例的分类,这在训练时是不可用的。并且因为分类器是在离散化数据上训练的,所以新的测试实例需要在使用前进行离散化。所以我希望能够做的是在一个新实例中读取,将已经建立的离散化方案应用于它,将其转换为字符串,然后在随机森林中运行它。但是,我对“应用离散化方案”的最佳方式感到困惑。
有没有简单的方法来处理这个问题?我认为没有直接的方法可以将字符串转换回间隔。我可以从离散化(例如:)中获取所有 Interval 值的列表cuts.unique()并在测试时应用它,但这需要在随机森林旁边保存/加载离散化字典,这看起来很笨重,我担心会遇到问题试图重新创建一个分类变量(主要来自 R,它对分类变量的格式非常讲究)。或者还有其他我没有看到的解决方法吗?
我有一些高维重复测量数据,我对拟合随机森林模型感兴趣,以研究此类模型的适用性和预测效用。具体来说,我正在尝试实现LongituRF包中的方法。此处详细介绍了此包背后的方法:
Capitaine, L. 等。用于高维纵向数据的随机森林。Stat Methods Med Res (2020) doi:10.1177/0962280220946080。
方便地,作者提供了一些有用的数据生成功能进行测试。所以我们有
install.packages("LongituRF")
library(LongituRF)
Run Code Online (Sandbox Code Playgroud)
让我们生成一些数据,DataLongGenerator()其中 n=样本大小,p=预测变量的数量和 G=具有时间行为的预测变量的数量。
my_data <- DataLongGenerator(n=50,p=6,G=6)
Run Code Online (Sandbox Code Playgroud)
my_data是您期望的 Y(响应向量)、X(固定效应预测变量矩阵)、Z(随机效应预测变量矩阵)、id(样本标识符向量)和时间(时间测量向量)的列表。简单地拟合随机森林模型
model <- REEMforest(X=my_data$X,Y=my_data$Y,Z=my_data$Z,time=my_data$time,
id=my_data$id,sto="BM",mtry=2)
Run Code Online (Sandbox Code Playgroud)
这里大约需要 50 秒,所以请耐心等待
到目前为止,一切都很好。现在我清楚这里的所有参数,除了Z. 什么 Z 时候我要在我的实际数据上拟合这个模型?
看着my_data$Z。
dim(my_data$Z)
[1] 471 2
head(my_data$Z)
[,1] [,2]
[1,] 1 1.1128914
[2,] 1 1.0349287
[3,] 1 0.7308948
[4,] 1 1.0976203
[5,] 1 1.3739856
[6,] 1 0.6840415
Run Code Online (Sandbox Code Playgroud)
每行看起来像一个截距项(即 1)和从均匀分布中得出的值runif()。
的文档REEMforest()表明“Z [矩阵]:包含随机效应的 q 预测变量的 Nxq 矩阵。” 使用实际数据时如何指定这个矩阵?
我的理解是,传统Z是简单地一热(二进制)组变量(例如编码 …
random-forest ×10
python ×3
r ×3
scikit-learn ×2
alglib ×1
apache-spark ×1
binning ×1
data-mining ×1
gini ×1
h2o ×1
java ×1
longitudinal ×1
mixed-models ×1
pandas ×1
pyspark ×1
regression ×1
sample-size ×1