繁体   English   中英

随机森林分类器Matlab v / s Python

[英]Random Forest Classifier Matlab v/s Python

我在Python和MATLAB中使用了随机森林分类器。 在集合中有10棵树,我在Python中的准确度达到了80%左右,而在MATLAB中只有30%的准确率。 即使当MATLAB的随机森林生长有100或200个发束时,这种差异仍然存在。

这两种编程语言之间存在这种差异的可能原因是什么?

MATLAB代码如下:

load 'path\to\feature vector'; % Observations X Features, loaded as segment_features
load 'path\to\targetValues'; % Observations X Target value, loaded as targets
% Set up Division of Data for Training, Validation, Testing
trainRatio = 70/100;
valRatio = 0/100;
testRatio = 30/100;
[trainInd,valInd,testInd] = dividerand(size(segment_features,1),trainRatio,...
    valRatio,testRatio);

% Train the Forest
B=TreeBagger(10,segment_features(trainInd,:), target(trainInd),...
    'OOBPred','On');

% Test the Network
outputs_test = predict(B,segment_features(testInd, :));
outputs_test = str2num(cell2mat(outputs_test));
targets_test = target(testInd,:);
Accuracy_test=sum(outputs_test==targets_test)/size(testInd,2);

oobErrorBaggedEnsemble = oobError(B);
plot(oobErrorBaggedEnsemble)
xlabel 'Number of grown trees';
ylabel 'Out-of-bag classification error';

问题

用两种不同的编程语言(例如MATLAB和Python)实现随机森林会产生不同的结果有很多原因。

首先,请注意,在相同数据上训练的两个随机森林的结果在设计上永远不会是相同的:随机森林通常会在每个分割处随机选择特征,并在每棵树的构造中使用引导样本。

其次,不同的编程语言可能为随机森林的超参数设置了不同的默认值(例如,scikit-learn的随机森林分类器使用gini作为其默认标准来衡量分割的质量。)

第三,这取决于数据的大小(您在问题中未指定)。 较小的数据集将在随机森林的结构中产生更大的可变性,进而,它们的输出在一个森林与另一个森林之间的差异会更大。

最后,决策树容易受到输入数据变化的影响(轻微的数据扰动会产生非常不同的树)。 随机森林试图通过种植许多树木来获得更稳定,更准确的解决方案,但通常10棵(甚至100或200棵)树木往往不足以获得稳定的产出。

寻求解决方案

我可以推荐几种策略。 首先,确保将数据加载到每个程序中的方式相同。 MATLAB是否以与Python不同的方式误读了关键变量,从而导致变量变得不可预测(例如,将数字变量误读为字符串变量?)。

其次,一旦您确信两个程序中的数据加载相同,请仔细阅读随机森林函数的文档,并确保在两个程序中指定相同的超参数(例如,标准)。 您要确保每个创建的随机森林都尽可能类似。

第三,可能有必要增加树木的数量,以便从森林中获得更稳定的产出。 确保两个实现中的树数相同。

第四,程序之间的潜在差异可能来自将数据分为训练集和测试集的方式。 可能有必要确保某种方法允许您在两种编程语言之间复制相同的交叉验证集(例如,如果每个记录都有唯一的ID,则将具有偶数的那些分配给训练,将具有奇数的那些分配给训练。测试)。

最后,您还可以通过在每种编程语言中创建多个目录林并比较各个迭代的平均准确度数来受益。 这些将使您更好地了解精度差异是否真正可靠,显着或只是偶然。

祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM