Sklearn: как получить среднеквадратичную ошибку при классификации данных обучения

Я пытаюсь решить некоторые проблемы классификации, используя sklearn впервые в Python, и мне было интересно, как лучше всего рассчитать ошибку моего классификатора (например, SVM) исключительно на данных обучения.

Мой пример кода для расчета точности и rmse выглядит следующим образом:

    svc = svm.SVC(kernel='rbf', C=C, decision_function_shape='ovr').fit(X_train, y_train.ravel())
    prediction = svc.predict(X_test)
    svm_in_accuracy.append(svc.score(X_train,y_train))
    svm_out_rmse.append(sqrt(mean_squared_error(prediction, np.array(list(y_test)))))
    svm_out_accuracy.append((np.array(list(y_test)) == prediction).sum()/(np.array(list(y_test)) == prediction).size)

Я знаю, что из 'sklearn.metrics import mean_squared_error' я могу получить MSE для сравнения вне выборки. Что я могу сделать в sklearn, чтобы получить метрику ошибок в том, насколько моя модель хорошо / плохо классифицируется на данных обучения? Я спрашиваю об этом, потому что знаю, что мои данные не являются идеально линейно разделимыми (что означает, что классификатор неправильно классифицирует некоторые элементы), и я хочу знать, как лучше всего получить метрику ошибок, показывающую, насколько они были отключены. Любая помощь будет оценена по достоинству!


person Joe J.    schedule 02.02.2018    source источник
comment
Для классификации. вы можете использовать точность, отзывчивость и точность.   -  person Sociopath    schedule 02.02.2018
comment
Это очень широко, так как зависит от вашего конкретного вопроса, а не от скрытого вопроса. Прежде всего, RMSE предназначен только для регрессии. Для классификации используйте показатели @AkshayNevrekar или дополнительно AUC или Log-Loss. Может быть полезно изучить матрицу путаницы или ROC-ruve. Но это действительно зависит от вашей проблемы (количество классов, баланс классов, ложные срабатывания или ложные отрицательные результаты являются большей проблемой и т. Д.). Sklearn поддерживает все названные показатели, см. здесь   -  person Marcus V.    schedule 02.02.2018


Ответы (1)


Для оценки своего классификатора вы можете использовать следующие показатели:

from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report
from sklearn.metrics import roc_curve
from sklearn.metrics import roc_auc_score

Матрица путаницы имеет предсказанные метки как заголовки столбцов, а истинные метки - это метки строк. На главной диагонали матрицы неточностей указано количество правильно присвоенных меток. Любые недиагональные элементы содержат количество неправильно присвоенных меток. Из матрицы неточностей вы также можете рассчитать точность, точность и отзыв. И отчет о классификации, и матрица неточностей просты в использовании - вы передаете тестовые и прогнозируемые метки функциям:

print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))

[[1047    5]
 [   0  448]]

            precision    recall  f1-score   support

        0.0       1.00      1.00      1.00      1052
        1.0       0.99      1.00      0.99       448

avg / total       1.00      1.00      1.00      1500

Другие функции метрик вычисляют и строят рабочие характеристики приемника (ROC) и площадь под кривой (AUC) ROC. О ОКР можно прочитать здесь:

http://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_curve.html

http://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html

person KRKirov    schedule 02.02.2018