Я сделаю попытку предоставить лучший способ интерпретации ваших результатов. В случаях, когда у вас несбалансированный набор данных, точность не будет хорошим способом измерить вашу производительность.
Вот типичный пример:
Представьте, что у вас есть заболевание, которое присутствует в только 0,01% людей. Если вы прогнозируете, что ни у кого нет заболевания, у вас есть точность 99,99%, но ваша модель не является хорошей моделью.
В этом примере оказывается, что ваш набор контрольных данных (обычно называемый набором тестовых данных) не сбалансирован классы, и вы получаете точность 90% при вызове метода classifier.score. В этом случае точность не является хорошим способом интерпретации модели. Вместо этого вам следует взглянуть на другие метрики.
Другие распространенные метрики - это посмотреть на точность и вызвать , чтобы определить, как работает ваша модель. В этом случае, поскольку все истинные положительные значения прогнозируются как отрицательные, ваша точность И ваш отзыв будут равны 0, что означает, что ваша модель не очень хорошо дифференцируется.
В дальнейшем, если у вас есть несбалансированные классы, может быть лучше проверить различные пороговые значения оценки и посмотрите на такие показатели, как ROC_AU C. Эти метрики смотрят на оценки вероятности, выведенные моделью (предикат_пробы для sklearn) и тестируют различные пороги. Возможно, ваша модель хорошо работает при более низком пороговом значении, и положительные случаи неизменно оцениваются выше, чем отрицательные.
Вот еще одна статья о ROC_AU C.
Sci-kit learn имеет несколько различных показателей метри c, которые вы можете использовать, они расположены здесь .
Вот один из способов реализации RO C AU C в вашем коде.
X = dataset.iloc[:, 1:11].values
y=dataset.iloc[:,11].values
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=1,shuffle='true')
XBench_test=benchmarkData.iloc[:, 1:11].values
YBench_test=benchmarkData.iloc[:,11].values
classifier=RandomForestClassifier(n_estimators=35,criterion='entropy',max_depth=30,min_samples_split=2,min_samples_leaf=1,max_features='sqrt',class_weight='balanced',bootstrap='true',random_state=0,oob_score='true')
classifier.fit(X_train,y_train)
#use predict_proba
y_pred=classifier.predict_proba(X_test)
y_pred_benchmark=classifier.predict_proba(XBench_test)
from sklearn.metrics import roc_auc_score
## instead of measuring accuracy use ROC AUC)
print("Accuracy on test data: {:.4f}".format(roc_auc_score(X_test, y_test)))\*This gives 80%*\
print("Accuracy on benchmark data: {:.4f}".format(roc_auc_score(XBench_test, YBench_test))) \*This gives 90%*\