Я экспериментирую со случайными лесами с помощью scikit-learn, и я получаю отличные результаты моего тренировочного набора, но относительно плохие результаты на моем тестовом наборе ...
Вот проблема (по мотивам покера), которую я пытаюсь решить: с учетом карманных карт игрока А, карманных карт игрока Б и флопа (3 карты), у какого игрока лучшая рука? Математически это 14 входов (7 карт - один ранг и одна масть для каждого) и один выход (0 или 1).
Вот некоторые из моих результатов:
Training set size: 600k, test set size: 120k, number of trees: 25
Success rate in training set: 99.975%
Success rate in testing set: 90.05%
Training set size: 400k, test set size: 80k, number of trees: 100
Success rate in training set: 100%
Success rate in testing set: 89.7%
Training set size: 600k, test set size: 120k, number of trees: 5
Success rate in training set: 98.685%
Success rate in testing set: 85.69%
Вот соответствующий код, используемый:
from sklearn.ensemble import RandomForestClassifier
Forest = RandomForestClassifier(n_estimators = 25) #n_estimator varies
Forest = Forest.fit(inputs[:trainingSetSize],outputs[:trainingSetSize])
trainingOutputs = Forest.predict(inputs[:trainingSetSize])
testOutputs = Forest.predict(inputs[trainingSetSize:])
Похоже, что независимо от количества используемых деревьев, производительность на тренировочном наборе намного лучше, чем на тестовом наборе, несмотря на относительно большой обучающий набор и достаточно небольшое количество функций ...