Я применяю случайный алгоритм леса в трех различных языках программирования в то же псевдо выборки набора данных (1000 набл, двоичном 1/0 зависимой переменной, 10 числовые объясняющие переменные):Random Forest Расхождение между R и Matlab & Python
- Matlab 2015a (то же самое для 2012a), используя команду"Treebagger" (часть статистики и машинного обучения Toolbox)
- R с помощью "RandomForest" пакет : https://cran.r-project.org/web/packages/randomForest/index.html
- Python с использованием "RandomForestClassifier" из sklearn.ensemble: http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html
Я также стараюсь, чтобы сохранить все параметры модели идентичны по языкам программирования (нет. деревьев, бутстрап-выборка всего образца, №. переменных, случайным образом отобранных в качестве кандидатов при каждом расколе, критерий для измерения качества раскола).
Хотя Matlab и Python производят в основном те же результаты (то есть probabilties), результаты R очень разные.
Какова возможная причина различия между результатами, полученными R с одной стороны, и Matlab & Python - с другой?
Я предполагаю, что есть некоторый параметр модели по умолчанию, который отличается от R, который я не знаю или который жестко закодирован в базовом пакете randomForest.
Точный код я побежал выглядит следующим образом:
Matlab:
b = TreeBagger(1000,X,Y, 'FBoot',1, 'NVarToSample',4, 'MinLeaf',1, 'Method', 'classification','Splitcriterion', 'gdi')
[~,scores,~] = predict(b,X);
Python:
clf = RandomForestClassifier(n_estimators=1000, max_features=4, bootstrap=True)
scores_fit = clf.fit(X, Y)
scores = pd.DataFrame(clf.predict_proba(X))
R:
results.rf <- randomForest(X,Y, ntree=1000, type = "classification", sampsize = length(Y),replace=TRUE,mtry=4)
scores <- predict(results.rf, type="prob",
norm.votes=FALSE, predict.all=FALSE, proximity=FALSE, nodes=FALSE)
Большое спасибо, я внедрил ваше предложенное решение, и результаты значительно улучшились. – Markkk
Чтобы быть точным: все три пакета программного обеспечения дают в основном одинаковые результаты. Во всяком случае, у меня есть быстрый вопрос: может ли кто-нибудь объяснить огромную разницу в времени вычислений между R & Python, с одной стороны, где результаты получены мгновенно, а Matlab, с другой стороны, где оценка модели и предсказание занимают несколько секунд каждая? – Markkk
Реализация R написана на языке Fortran. Вероятно, версия scikit - Cython. Я подозреваю, что версия Matlab - это чистый Matlab? – Zelazny7