Извлечение классификации модели SVM в Python - PullRequest
0 голосов
/ 24 декабря 2018

Я впервые использую SVM в Python.Я также использовал 5 перекрестных проверок для проверки точности модели.

Цель модели - определить, является ли выход дефектом или нет.Я хотел бы провести перекрестную проверку выходной классификации по сравнению с исходным набором данных.Другими словами, я хотел бы понять, какие продукты были классифицированы как дефект, а какие конкретно не классифицированы как дефект.Как мне это сделать?

Мой код:

from sklearn.svm import SVC  
svclassifier_rbf = SVC(kernel='rbf')  
clf = svclassifier_rbf.fit(X_train, y_train)  

from sklearn.metrics import classification_report, confusion_matrix  
print(confusion_matrix(y_test,y_pred_A_rbf))  
print(classification_report(y_test,y_pred_A_rbf)

)

Спасибо, Нимиш

Ответы [ 4 ]

0 голосов
/ 30 декабря 2018

У вас есть много способов проверить, насколько точен ваш y_pred.По сути, вы должны соответствовать y_pred и y_test.Если вы новичок в этой области и сталкиваетесь с проблемами при интерпретации матриц и отчетов о путанице, вы можете просто напечатать ваш y_pred в CSV-файле и сравнить его с y_test.Это даст вам реальную ситуацию по сценарию.

np.savetxt("filename.csv",y_pred,delimiter=",",fmt="%.5f")
0 голосов
/ 24 декабря 2018

вы можете получить записи, которые прогнозируются как дефекты, используя следующий код.Я предполагаю, что X_test - это ваши тестовые входные данные.

print(X_test[y_pred_A_rbf==1])
0 голосов
/ 24 декабря 2018

Я не вижу перекрестной проверки части кода.Предположим, что вы сделали это, и это выглядит примерно так:

from sklearn.model_selection import KFold
from sklearn.svm import SVC 

kf = KFold(n_splits = 5, shuffle = True)
for train_index, test_index in kf.split(X):
    X_train, X_test = X[train_index], X[test_index]
    y_train = y_true[train_index]
    svclassifier_rbf = SVC(kernel='rbf') 
    svclassifier_rbf.fit(X_train, y_train)
    ###### NEXT LINE NEEDED #######
    y_pred_A_rbf[test_index] = svclassifier_rbf.predict(X_test)

В вашем коде отсутствует svclassifier_rbf.predict(X_test)

Это используется для прогнозирования ваших классов.Теперь вы можете взять значения переменной y_pred_A_rbf и передать ее в матрицу путаницы, чтобы прочитать ваши истинные положительные стороны, истинные отрицательные значения, ложные положительные значения и ложные отрицательные значения.Типичная запутанная матрица в Python может быть отображена на следующем рисунке:

Confusion Matrix in Python

Теперь, когда у вас есть два массива фактических и предсказанных меток,вы можете сделать что-то вроде , если фактическая метка и предсказанная метка верны, или, другими словами, 1, то они являются истинными положительными значениями и правильно классифицированы , аналогично, вы можете сделать следующее дляистинные отрицания, ложные срабатывания и ложные отрицания для изучения того, какие записи были предсказаны и классифицированы правильно или неправильно.

Например, если вы хотите узнать, какие записи были правильно классифицированы как положительный класс (в данном случаевозможно, допустим дефект), вы можете сделать:

tp = np.where((y_true == 1) & (y_pred == 1), 'True Positive', 'Else')

Теперь вы получите индексы всех записей, которые были должным образом классифицированы как положительный класс.

0 голосов
/ 24 декабря 2018

Если вы работаете над проблемами классификации, просто чтобы проверить точность и поведение модели, используйте

from sklearn.metrics import accuracy_score
accuracy_score(y_test,clf.predict(your_X_test))

См. Мою ссылку на git для классификации документов. Я использовал наивный байес поверх функций векторизатора tfidf / count.

Классификация документов с использованием MultinomialNB

Надеюсь, это поможет вам в классификации документов

...