赞
踩
“邻近算法,或者说K最邻近(KNN,K-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是K个最近的邻居的意思,说的是每个样本都可以用它最接近的K个邻近值来代表。近邻算法就是将数据集合中每一个记录进行分类的方法。简介KNN(K- Nearest Neighbor)法即K最邻近法,最初由 Cover和Hart于1968年提出,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。
距离公式
两个样本的距离可以通过如下公式计算,又叫欧式距离
1.欧几里得距离
欧几里得距离是我们在平面几何中最常用的距离计算方法,即两点之间的直线距离。
d(p,q)^2=(q1-p1)^2+(q2-p2)^2
2. 曼哈顿距离
曼哈顿距离是计算两点在一个网格上的路径距离,与上述的直线距离不同,它只允许沿着网格的水平和垂直方向移动。
d=|q1-q2|+|p1-p2|
KNN算法
收集数据集,包括特征与对应的类别标签
对数据进行预处理,例如数据清洗、归一化等。
选择一个合适的k值,即确定最近邻居的个数。
确定用于比较样本之间相似性的度量方法,常见的如欧几里得距离、曼哈顿距离等。
选择与待分类样本距离最近的k个训练样本
对于分类任务:查看K个最近邻居中最常见的类别,作为预测结果。
对于回归任务:预测结果可以是K个最近邻居的平均值或加权平均值。
使用适当的评价的评级骄傲指标评估模型的性能。
基于性能评估结果,可能需要返回并调整某些参数,如K值、距离度量方法等,以获得更好的性能。
K值过小:
容易受到异常点的影响
k值过大:
受到样本均衡的问题
- import numpy as np
- from sklearn.datasets import load_digits
- from sklearn.model_selection import train_test_split
- from sklearn.preprocessing import StandardScaler
- from sklearn.neighbors import KNeighborsClassifier
- from sklearn.metrics import accuracy_score
-
- # 加载手写数字数据集
- digits = load_digits()
-
- # 数据预处理
- X = digits.data
- y = digits.target
-
- # 归一化
- scaler = StandardScaler()
- X_scaled = scaler.fit_transform(X)
-
- # 拆分数据集
- X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
-
- # 训练模型
- knn = KNeighborsClassifier(n_neighbors=5)
- knn.fit(X_train, y_train)
-
- # 模型评估
- y_pred = knn.predict(X_test)
- accuracy = accuracy_score(y_test, y_pred)
- print("Accuracy:", accuracy)
-
- # 预测
- # 这里可以替换成你自己的手写数字图像数据
- # 注意需要先进行与训练数据相同的预处理操作
- # new_image = preprocess(new_image)
- # prediction = knn.predict(new_image)
仔细检查代码逻辑,确保每一步操作都符合预期;查阅相关文档和资料,了解每个步骤的具体实现方法;在遇到问题时,可以尝试调试代码,输出中间结果,以便更好地定位问题所在。
在这个实验中,使用了 KNN 算法对手写数字进行识别,通过 scikit-learn 提供的工具包来实现。以下是实验的主要步骤和结果总结:
数据准备: 使用了 scikit-learn 提供的 load_digits
函数加载了手写数字数据集,并将数据集划分为特征集 X
和标签集 y
。
数据预处理: 对特征数据进行了归一化处理,使用了 StandardScaler
对数据进行了标准化处理,以加快模型收敛速度,并提高模型性能。
数据拆分: 将数据集拆分成了训练集和测试集,其中80%的数据用于训练,20%用于测试。
模型训练和评估: 使用了 KNeighborsClassifier
构建了 KNN 模型,设置了 n_neighbors=5
,并在训集上训练了模型。然后,我们使用测试集对模型进行了评估,并计算了模型在测试集上的准确率。最终,得到了模型在测试集上的准确率为约0.9833。
实验结果分析: 实验结果表明,构建的 KNN 模型在手写数字识别任务上表现良好,具有较高的准确率。这表明 KNN 算法适用于简单的图像分类任务,并且在数据量较小的情况下也能取得较好的效果。在实验中,还可以尝试调整 KNN 模型的超参数,如 k 值、距离度量方式等,以进一步提高模型性能。
总的来说,通过这个实验,能够加深了对 KNN 算法在图像分类任务中的应用理解,同时也可以学习如何使用 scikit-learn 来构建和评估机器学习模型。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。