Как включить путаницу для KNN в python? - PullRequest
0 голосов
/ 19 марта 2020

Я попытался включить матрицу путаницы для этого алгоритма KNN. И поскольку это уже настолько сложно, используя вложенную перекрестную проверку и оптимальные параметры поиска по сетке, я понятия не имею, где включить часть матрицы путаницы.

print(__doc__)

# Number of random trials
NUM_TRIALS = 30

# Load the dataset

X_iris = X.values
y_iris = y

# Set up possible values of parameters to optimize over
p_grid = {"n_neighbors": [1, 5, 10, 15]}

# We will use a Support Vector Classifier with "rbf" kernel
svm = KNeighborsClassifier()

# Arrays to store scores
non_nested_scores = np.zeros(NUM_TRIALS)
nested_scores = np.zeros(NUM_TRIALS)

# Loop for each trial
for i in range(NUM_TRIALS):

    # Choose cross-validation techniques for the inner and outer loops,
    # independently of the dataset.
    # E.g "GroupKFold", "LeaveOneOut", "LeaveOneGroupOut", etc.
    inner_cv = KFold(n_splits=4, shuffle=True, random_state=i)
    outer_cv = KFold(n_splits=4, shuffle=True, random_state=i)

    # Non_nested parameter search and scoring
    clf = GridSearchCV(estimator=svm, param_grid=p_grid, cv=inner_cv)
    clf.fit(X_iris, y_iris)
    non_nested_scores[i] = clf.best_score_

    # Nested CV with parameter optimization
    nested_score = cross_val_score(clf, X=X_iris, y=y_iris, cv=outer_cv)
    nested_scores[i] = nested_score.mean()

score_difference = non_nested_scores - nested_scores

print("Average difference of {:6f} with std. dev. of {:6f}."
      .format(score_difference.mean(), score_difference.std()))

# Plot scores on each trial for nested and non-nested CV
plt.figure()
plt.subplot(211)
non_nested_scores_line, = plt.plot(non_nested_scores, color='r')
nested_line, = plt.plot(nested_scores, color='b')
plt.ylabel("score", fontsize="14")
plt.legend([non_nested_scores_line, nested_line],
           ["Non-Nested CV", "Nested CV"],
           bbox_to_anchor=(0, .4, .5, 0))
plt.title("Non-Nested and Nested Cross Validation on Touch Classification Data set KNN",
          x=.5, y=1.1, fontsize="15")

# Plot bar chart of the difference.
plt.subplot(212)
difference_plot = plt.bar(range(NUM_TRIALS), score_difference)
plt.xlabel("Individual Trial #")
plt.legend([difference_plot],
           ["Non-Nested CV - Nested CV Score"],
           bbox_to_anchor=(0, 1, .8, 0))
plt.ylabel("score difference", fontsize="14")

И я попытался включить эту часть, чтобы включить Матрица смешения для моего алгоритма:

cm = confusion_matrix(y_test, preds)
tn, fp, fn, tp = confusion_matrix(y_test, preds).ravel()
cm = [[tp,fp],[fn,tn]]



ax= plt.subplot()
sns.heatmap(cm, annot=True, fmt = "d", cmap="Spectral"); #annot=True to annotate cells

# labels, title and ticks
ax.set_xlabel('ACTUAL LABELS');ax.set_ylabel('PREDICTED LABELS'); 
ax.set_title('KNN Confusion Matrix'); 
ax.xaxis.set_ticklabels(['11', '12','13','21','22','23','31','32','33']); ax.yaxis.set_ticklabels(['Soft', 'Tough']);

Я недостаточно хорошо понял алгоритм для матрицы смешения, и я не уверен, как правильно реализовать его для моего алгоритма KNN. В моем наборе данных у меня есть

y = ['11', '12','13','21','22','23','31','32','33'] #my labels
      Duration  Grand Mean  Max Mean Activation
0           64  136.772461           178.593750
1           67  193.445196           258.515625
2           67  112.382929           145.765625
3           88  156.530717           238.734375

#head of my feature matrix

1 Ответ

0 голосов
/ 19 марта 2020

сначала вам нужно будет спрогнозировать, используя лучшую оценку вашего GridSearchCV.

preds=clf.best_estimator_.predict(X_test)

, затем распечатайте матрицу путаницы, используя функцию confusion_matrix из sklearn.metrics

from sklearn.metrics import confusion_matrix
print confusion_matrix(y_test, preds)

И один раз у вас есть матрица путаницы, вы можете построить ее. Изменить: Поскольку у вас нет тестовых данных отдельно, вы будете тестировать на X_iris. Но всегда предпочтительнее разделять данные. На Sci-kit есть небольшой вопрос: как проще всего получить запутанную матрицу оценки при использовании GridSearchCV?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...