因此,我一直在对一组数据使用KNN,在train_test_split阶段的random_state = 4。尽管使用了随机状态,但准确性,分类报告,预测等的输出每次都不同。想知道为什么会这样吗?
这里是数据的开头:(根据all_time_runs和顺序预测位置)
order position all_time_runs
0 10 NO BAT 1304
1 2 CAN BAT 7396
2 3 NO BAT 6938
3 6 CAN BAT 4903
4 6 CAN BAT 3761
这是分类和预测的代码:
#splitting data into features and target
X = posdf.drop('position',axis=1)
y = posdf['position']
knn = KNeighborsClassifier(n_neighbors = 5)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 42)
#fitting the KNN model
knn.fit(X_train, y_train)
#predicting with the model
prediction = knn.predict(X_test)
#knn score
score = knn.score(X_test, y_test)
尽管train_test_split
有一个与之相关的随机因素,必须解决它以避免产生随机结果,这不是您应该解决的唯一因素。
KNN是一个模型,它接受测试集的每一行,找到最接近的k
训练集向量,并根据多数决定对它进行分类,即使是平局,该决定也是随机的。您需要set.seed(x)
,以确保该方法是可复制的。
基于邻居的分类是基于实例的学习或非一般性学习的一种:它不尝试构建一般的内部模型,而只是存储训练数据的实例。分类是通过每个点的最近邻居的简单多数投票计算得出的:向查询点分配的数据类在该点的最近邻居内具有最多的代表。