0

こんにちは、データ サイエンスと Python は初めてです。pandas、matplotlib を使用して knn 分類プログラムを作成しようとしていました。私はスパイダー Ide を使用しています。各実行プロットは変化し続けます。私は非常に混乱しています、それは正しいですか、それとも私はいくつかの間違いをしました、

import numpy as np
from matplotlib import pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import roc_curve, auc,accuracy_score
import pandas as pd 
iris_predict={ 0:'Iris-setosa' ,1:'Iris-versicolor',2:'Iris-virginica'}  
neighbors=list(range(1,30))
train_result= []
test_result = []
iris= pd.read_csv ('G:\\IMAGE-DATASETS\\iriscsv\\Iris.csv')
iris['iris_num']=[iris_class[i] for i in iris['Species']]

y=iris['iris_num']
X= iris.drop(['Id','Species'],axis=1)   
x_train, x_test, y_train, y_test = train_test_split(X,iris.iris_num, test_size=0.25)

for i in neighbors :
    knn=  KNeighborsClassifier(n_neighbors=i, 
                       weights='uniform',
                       algorithm='kd_tree', 
                       leaf_size=30, 
                       p=2, 
                       metric='minkowski', 
                       metric_params=None)
    knn.fit(x_train,y_train)
    train_pred = knn.predict(x_train)
    train_result.append(accuracy_score(train_pred,y_train))
    y_pred  = knn.predict(x_test)
    test_result.append(accuracy_score(y_pred,y_test))

   #graph 
   iris_color_bar= np.array(['setosa', 'versicolor', 'virginica'], dtype='<U10')
   fig= plt.figure(figsize=(10,10)) # plotting area
   fig.clf() # to avoid previous figure overlap
   plt.title('iris data')

   plt.xlabel('p')
   plt.ylabel('auc_score')

   plt.plot(neighbors, test_result, c='r', label='test')
   plt.plot(neighbors, train_result, c='b', label='train')
   plt.legend()
  #plt.scatter(x,y,c=y, cmap=plt.cm.get_cmap('Set1', 3), data=iris)
  #formatter = plt.FuncFormatter(lambda i, *args:iris_color_bar[int( i)])
  #plt.colorbar(ticks=[0, 1, 2],format=formatter)
  plt.show()

初回実行時

2 回目の実行時 何らかの結論を導き出せるように、プロットを固定するにはどうすればよいですか?

4

1 に答える 1