K近邻算法实现

一. 算法简介 

1."近朱者赤,近墨者黑"是对K近邻算法最好的描述,K近邻算法是一种简单而有效的监督学习算法,用于分类和回归问题。

2.K近邻算法是一种懒惰(延迟)学习算法,它根据数据样本之间的距离来进行分类或回归预测。该算法的基本思想是:对于给定的未知样本,找到离它最近的K个已知样本,根据这K个样本的标签来进行分类或回归预测。

二.算法的原理

1.核心思想:

K近邻算法基于实例之间的相似度进行分类或回归。其核心思想是,如果一个样本在特征空间中的K个最近邻中的大多数属于某个类别,则该样本也属于该类别。在分类问题中,K近邻算法通过统计K个最近邻中各类别的数量,并选择最多的类别作为预测结果。在回归问题中,K近邻算法通过计算K个最近邻样本的平均值或加权平均值作为预测结果。

2.k值的选定:

在K近邻算法中,k值的选定是一个重要的参数,它表示用于预测新样本的最近邻居的数量。选择适当的k值对K近邻算法的性能和准确率有着重要影响。通常情况下,k值的选择应该考虑以下几个方面:

  1. 数据集的大小:如果数据集较小,选择较小的k值可能更合适,以避免过拟合。而对于较大的数据集,选择较大的k值可能更合适,以充分利用更多的邻居信息。

  2. 类别的平衡性:如果不同类别的样本数量差别较大,那么选择较大的k值可能更合适,以避免对少数类别的过度依赖。而对于类别较为平衡的数据集,选择较小的k值可能更合适。

  3. 噪声和异常值:如果数据集中存在噪声或异常值,选择较大的k值可以降低它们对分类结果的影响。

  4. 所以一般k值较小;k通常取奇数,避免产生相等占比的情况。

3.距离向量:

在K近邻算法中,距离向量是用于衡量样本之间的相似度或距离的向量。常用的距离度量方法包括欧氏距离、曼哈顿距离、闵可夫斯基距离等。

(1)欧式距离:

\sqrt{\left ( {x_{1}}^{2}-{x_{2}}^{2} \right )+({y_{1}}^{2}-{y_{2}}^{2})}

(2)曼哈顿距离:

\left | {x_{1}}^{} -x_{2}\right |+\left | y_{1} -y_{2}\right |

三. K近邻算法的实现步骤

1.加载数据集:从文件或其他数据源中加载训练数据。

2.数据预处理:对数据进行清洗、去除异常值、归一化等处理,以便更好地应用算法。

3.计算距离:对于给定的未知样本,计算它与训练集中每个样本的距离,常用的距离度量包括欧式距离、曼哈顿距离等。

4.:选择K值:选择K的值,即选择离未知样本距离最近的K个样本。

5.进行分类或回归预测:根据选择的K个样本的标签,进行分类或回归预测。

6.评估模型:使用测试集评估模型的准确率或其他评估指标。

四.在Python中实现

1.实现

步骤1:导入必要的库

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

步骤2:创建示例数据集

make_classification函数生成一个二维的分类数据集,其中包含700个样本,3个特征,每个类别有1个相关特征

X, y = make_classification(n_samples=700, n_features=3, n_informative=1, n_redundant=0, n_clusters_per_class=1, random_state=64)

步骤3:将数据集划分为训练集和测试集,60%的训练集和40%的测试集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=42)

步骤4:设置K值为3

knn = KNeighborsClassifier(n_neighbors=3)

步骤5:进行拟合

knn.fit(X_train, y_train)

步骤6:对测试数据进行预测

y_pred = knn.predict(X_test)

步骤7:计算准确率

accuracy = accuracy_score(y_test, y_pred)
print("准确率:", accuracy)

步骤8:绘制散点图

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

X, y = make_classification(n_samples=700, n_features=3, n_informative=1, n_redundant=0, n_clusters_per_class=1, random_state=64)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=64)

# 选取k值
knn = KNeighborsClassifier(n_neighbors=3) knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)

# 计算准确率
 accuracy = accuracy_score(y_test, y_pred) print("准确率:", accuracy)

# 绘制散点图
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文字体为黑体
plt.rcParams['axes.unicode_minus'] = False
plt.xlabel('每一周打一次篮球')
plt.ylabel('每天喝王老吉')
plt.title('Scatter Plot of Data Set')
plt.show()

 2.结果:

3.遇到的问题及解决方法

问题:之前的样本选取的太少了,特征只选了两个,导致最后面的散点图准确率太少了,相似的点太少了:

解决方法:把样本(特征向量)选取的大一点,测试集由原来的30%改成40%,出来的散点图就是第一个图。

五.总结

从本次实验中,我明白了K近邻算法是一种简单而有效的分类和回归算法。K近邻算法的简单性也使得它成为一种常用的分类和回归方法之一,通过计算样本之间的相似度,K近邻算法可以对新样本进行分类或回归预测。总结起来,K近邻算法的关键是选择合适的k值和距离度量方法。合理选择这些参数,结合适当的特征选择和数据预处理,可以提高算法的准确性。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值