data-science - 使用 knn 绘制虹膜数据图,在每次执行时都会给出不同的图。(在 anaconda 中使用 spyder)
问题描述
嗨,我是数据科学和 python 的新手,我正在尝试使用 pandas matplotlib 编写一个 knn 分类程序。我正在使用 spyder 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()
解决方案
将数据集拆分为训练数据和测试数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1, stratify=y)
将 'random_state' 设置为 1 可确保我们每次都获得相同的拆分,以便我们可以重现我们的结果。
推荐阅读
- php - 更新 csv 文件内容后读取 csv 文件返回错误数据
- ember.js - 如何检测 EmberJS 中的一段时间不活动?
- java - 如何对 LinkedList 的字符串数据进行排序
- java - Spring Boot 模块中的“错误:无法找到或加载主类”
- ruby-on-rails - Rails 5:找不到具有友好ID的记录
- docker - Windows docker 容器中的 jfrog-cli - x509:由未知机构签署的证书
- angular - 如何使用角度材料将 Mat-table 中的选定行数据绑定到 angular 中的弹出输入字段
- google-oauth - 谷歌 oauth 和刷新令牌混淆/问题
- unity3d - 如何在垂直轴上移动轭
- vue.js - 必须在一个页面上添加 3 个组件