邻居数 KNN 算法
Posted
技术标签:
【中文标题】邻居数 KNN 算法【英文标题】:Number of neighbours KNN algorithm 【发布时间】:2012-04-27 19:40:58 【问题描述】:我在 matlab 中应用了 KNN 算法对手写数字进行分类。数字最初是 8*8 的矢量格式,然后拉伸形成一个 1*64 的矢量。因此,每次我将第一个数字与所有其余数据集(非常大)进行比较时,然后将第二个数字与其余数据集等等等等等等。现在我的问题是,不是 1 个邻居是最佳选择吗总是?由于我使用的是欧几里得距离,(我选择更接近的那个)为什么我还要选择 2 或 3 个以上的邻居,因为我得到了最接近的数字?
谢谢
【问题讨论】:
假设你有一个 7 写错了,看起来和你现在检查的 1 完全一样。你得到错误的结果。现在,在 5 个最佳匹配中,7 多于 1 的可能性有多大? 伙计们,获得 90.21% 的成功率正常吗?在 1593 位数据集上? @TestTest 我不是图像识别专家,我通常将 ML 用于其他目的,但 90.2% 对我来说听起来不错。 【参考方案1】:您必须考虑噪音。假设您的某些分类示例可能被错误分类,或者其中一个奇怪地与其他示例非常接近 - 它们不同,但实际上只是一个“故障”。在这些情况下 - 根据这个偏离轨道的示例进行分类可能会导致错误。
根据个人经验,通常最好的结果是在 k=3/5/7 时实现的,但这取决于实例。
如果您想获得最佳性能 - 您应该使用 cross validation top 为您的特定实例选择最佳 k
。
此外,KNN 通常只使用奇数作为k
,以避免“平局”
【讨论】:
伙计们,获得 90.21% 的成功率正常吗?在 1593 位数据集上?【参考方案2】:一个演示 ML Knn 算法的简单程序
Knn 算法通过使用一组数据训练计算机并传递输入以获得预期输出来工作。例如:-考虑一个父母想要训练他的孩子识别“兔子”的照片,这里父母将展示 n 张兔子的照片,如果照片属于兔子,那么我们喊兔子,否则我们将继续前进,就像这样这种方法通过输入一组数据来对计算机进行监督以获得预期的输出
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)))
【讨论】:
以上是关于邻居数 KNN 算法的主要内容,如果未能解决你的问题,请参考以下文章