我在matlab中应用了KNN算法对手写数字进行分类。这些数字最初是矢量格式的8*8,然后经过拉伸形成矢量1*64。所以每次我比较第一个数字与所有其他数据集(这是相当大的),然后第二个数字与其他数据集等等。现在我的问题是,不是1个邻居总是最好的选择吗?既然我使用的是欧几里德距离(我选择了更接近的那个),既然我得到了最接近的数字,为什么还要选择2到3个邻居呢?
谢谢
发布于 2012-04-16 21:29:15
你必须把噪音考虑进去。假设可能你的一些分类错误的例子,或者可能其中一个与其他例子奇怪地非常接近-这些例子是不同的,但它实际上只是一个“小故障”。在这些情况下,根据这种情况进行分类可能会导致错误。
从个人经验来看,当k=3/5/7时通常会获得最好的结果,但它取决于实例。
如果你想获得最佳的性能,你应该使用cross validation,为你的特定实例选择最优的k。
此外,通常只使用奇数作为KNN的k,以避免“绘制”。
发布于 2019-10-27 11:10:14
一个演示ML算法的简单程序
Knn算法的工作原理是用一组数据训练计算机,并传递输入以获得预期输出。例如:-考虑一位家长想要训练他的孩子识别" Rabbit“的图片,在这里家长将显示n张一只兔子的照片,如果照片属于Rabbit,那么我们就喊Rabbit否则我们将继续前进,在这种方法中,监督是通过馈送一组数据来对计算机进行管理,以获得预期的输出
from sklearn.neigbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
import pandas as pd
import numpy as np
df=pd.read_csv("D:\\heart.csv")
new_data{"data":np.array(df[["age","gende","cp","trestbps","chol","fbs","restecg","thalach","exang","oldpeak","slope","ca","thal"]],ndmin=2),"target":np.array(df["target"]),"target_names":np.array(["No_problem","Problem"])}
X_train,X_test,Y_train,Y_test=train_test_split(new_data["data"],new_data["target"],random_state=0)
kn=KNeighborsClassifier(n_neighbors=3)
kn.fit(X_train,Y_train)
x_new=np.array([[71,0,0,112,149,0,1,125,0,1.6,1,0,2]])
res=kn.predict(x_new)
print("The predicted k value is : {}\n".format(res))
print("The predicted names is : {}\n".format(new_data["target_names"][res])
print("Score is : {:.2f}".format(kn.score(X_train,Y_train)))https://stackoverflow.com/questions/10174755
复制相似问题