目录
KNN(K-近邻)算法是一种简单但有效的机器学习算法,主要用于分类任务。其基本思想是:如果一个新样本在特征空间中的K个最近邻的绝大多数属于某类别,则该样本也属于这个类别。
1、KNN的理论内容
1.1、算法流程:
- 输入:训练数据集D,测试数据集T,邻居数量K。
- 输出:测试数据集T中每个样本的类别标签。
- 过程:对于T中的每个样本,找到D中与之最近的K个样本,根据这K个样本的类别标签进行投票,多数决定的类别即为测试样本的类别。
1.2、输入输出:
- 输入:
- 训练数据集D:包含N个样本,每个样本特征向量为x,类别标签为y。
- 测试数据集T:包含M个样本,每个样本特征向量为t,需要预测其类别标签。
- 参数K:整数,指定邻居的数量。
- 输出:
- 对测试集T中的每个样本,输出其预测的类别标签。
1.3、数学原理:
- KNN算法基于闵可夫斯基距离(Minkowski distance),通常使用欧氏距离或曼哈顿距离。距离公式为:
- 类别预测依据距离度量,距离越近,相似度越高。
1.4、与其他算法的联系:
- KNN与决策树、支持向量机(SVM)等算法相比,KNN简单直观,易于实现,但可能需要大量的训练数据来获得较好的泛化能力。
- KNN与神经网络有一定的相似性,尤其是在神经网络的训练过程中,通过调整权重来寻找输入数据的近邻。
1.5、优缺点:
- 优点:不需要训练,避免过拟合,对噪声数据有较好的鲁棒性。
- 缺点:计算量大,对数据量敏感,对特征维度敏感,可能在小数据集上表现不佳。
1.6、应用场合:
- 分类问题:图像识别、文本分类等。
- 回归问题:最近邻回归(K-近邻回归)。
通过以上方面的深入理解,可以帮助我们更好地把握KNN算法的核心思想和应用范围。在实际应用中,根据具体问题调整K值和距离度量方法,可以使得KNN算法在不同领域发挥更好的效果。
2、KNN的代码实现
下面是使用Python实现KNN算法的一个简单例子。我们将使用`scikit-learn`库,因为它提供了高效的KNN实现,并处理了许多细节,例如距离计算和投票逻辑。
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
import numpy as np
# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建KNN分类器实例,设置K值为3
knn = KNeighborsClassifier(n_neighbors=3)
# 训练模型
knn.fit(X_train, y_train)
# 预测测试集
y_pred = knn.predict(X_test)
# 输出预测结果
print("预测结果:", y_pred)
# 评估模型
from sklearn.metrics import accuracy_score
print("准确率:", accuracy_score(y_test, y_pred))