📜  机器学习的K最近邻(KNN)算法(1)

📅  最后修改于: 2023-12-03 14:55:27.498000             🧑  作者: Mango

机器学习的K最近邻(KNN)算法

K最近邻(K Nearest Neighbors, KNN)是一种无监督学习方法,被广泛应用于分类和回归问题。

原理

KNN算法基于样本之间的相似度来进行分类或回归。对于给定的一个样本,算法会搜索训练集中与其最近的K个样本,然后根据这K个样本的标签进行分类或回归。

相似度通常使用欧几里得距离(Euclidean Distance)或曼哈顿距离(Manhattan Distance)来计算。在计算距离之前,需要对样本进行预处理,以确保它们具有相同的尺度和权重。

编程实现

KNN算法的实现通常依赖于机器学习框架或库,例如Scikit-Learn、TensorFlow、PyTorch等。

以下是使用Scikit-Learn实现KNN算法的示例代码:

from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
 
iris = load_iris()
X, y = iris.data, iris.target
 
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X, y)
 
print(knn.predict([[3, 5, 4, 2]])) # 输出预测结果

该代码使用鸢尾花数据集(Iris Dataset)来演示KNN算法。首先,加载数据集并划分为特征(X)和标签(y)。然后,创建一个KNN分类器(knn)并将其拟合到数据集上。最后,使用predict方法对新样本进行分类,并输出预测结果。

超参数调整

KNN算法中的关键超参数是K值(n_neighbors)。一个较小的K值会使算法更容易过拟合,而较大的K值会使算法更容易欠拟合。因此,需要使用交叉验证等技术来寻找最佳的K值。

以下是使用交叉验证来调整K值的示例代码:

from sklearn.model_selection import cross_val_score
 
# 尝试不同的K值
for k in range(1, 10):
    knn = KNeighborsClassifier(n_neighbors=k)
    scores = cross_val_score(knn, X, y, cv=5)
    print("K={0}, Accuracy={1}".format(k, scores.mean()))

该代码使用交叉验证来评估不同K值下的算法性能。对于每个K值,使用KNN分类器进行交叉验证并计算准确率的平均值。然后,选择具有最高准确率的K值作为最佳超参数。

总结

KNN算法是一种简单而又有效的机器学习算法,可以用于分类和回归问题。该算法的关键超参数是K值,需要使用交叉验证等技术来选择最佳值。在实际应用中,KNN算法经常与其他算法结合使用,以提高性能和准确率。