我是数据科学/ml 的新手,正在使用 sklearn 库对数据进行分类。我目前正在使用具有 5 折交叉验证的 KNeighborsClassifier,同时调整 k 值,但它生成的图形看起来很奇怪。
我在 2 个不同的 CSV 文件中有我的训练数据和测试数据,并像这样加载它们:
trainData = pd.read_csv('train.csv',header='infer')
testData = pd.read_csv('test.csv',header='infer')
然后我分离分类器(Y 是我的数据集中作为分类的列的名称):
trainY = trainData['Y']
trainX = trainData.drop(['Y'],axis=1)
testY = testData['Y']
testX = testData.drop(['Y'],axis=1)
我使用 sklearn KNeighborsClassifier 进行 5 折交叉验证,同时将 k 值从 2 调整到 20:
trainAcc = []
testAcc = []
for i in range(2,20):
clf = KNeighborsClassifier(n_neighbors=i, metric='minkowski', p=2)
trainScores = cross_val_score(estimator=clf, X=trainX, y=trainY, cv=5, n_jobs=4)
testScores= cross_val_score(estimator=clf, X=testX, y=testY, cv=5, n_jobs=4)
trainAcc.append((i, trainScores.mean()))
testAcc.append((i, testScores.mean()))
然后我打印图表:
plt.plot([x[0] for x in trainAcc],[x[1] for x in trainAcc], 'ro-', [x[0] for x in testAcc],[x[1] for x in testAcc], 'bv--')
但是我得到了一些奇怪的东西:
谁能解释我哪里出错了,为什么我的图表看起来像这样。
谢谢。
编辑:这确实很奇怪,因为当我在不进行交叉验证的情况下运行它时,我会得到一个更正常的图表,如下所示:
clf.fit(X=trainX, y=trainY)
predTrainY = clf.predict(trainX)
predTestY = clf.predict(testX)
trainAcc.append(accuracy_score(trainY, predTrainY))
testAcc.append(accuracy_score(testY, predTestY))