邻居数KNN算法

问题描述 投票:2回答:2

我在matlab中应用了KNN算法对手写数字进行分类。这些数字最初是矢量格式的8 * 8,并经过拉伸形成1 * 64的矢量。因此,每次我将第一个数字与所有其余数据集(相当大)进行比较时,然后将第二个数字与其余数据集进行比较等等,等等。现在我的问题是,不是一个邻居是最佳选择吗?总是?由于我使用的是欧几里德距离,(我选择一个更接近的距离)为什么我得到最近的数字后还要再选择2或3个邻居?

谢谢

algorithm matlab knn
2个回答
1
投票

您必须考虑噪音。假设您的某些分类示例分类有误,或者其中一个奇怪地与其他示例非常接近-不同,但实际上只是“小故障”。在这些情况下-根据此示例进行分类可能会导致错误。

根据个人经验,通常对于k = 3/5/7可获得最佳结果,但它取决于实例。

如果要获得最佳性能-您应该使用cross validation,请为您的特定实例选择最佳k

此外,对于KNN,通常仅使用奇数作为k,以避免“绘制”


0
投票

一个用于演示ML Knn算法的简单程序

Knn算法通过用一组数据训练计算机并传递输入以获得预期的输出来工作。例如:-假设父母想训练他的孩子识别“兔子”的图片,在这里父母会显示n幅有关Rabbit的照片,如果照片属于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)))
© www.soinside.com 2019 - 2024. All rights reserved.