机器学习-KNN
前言
KNN可以说是最简单的分类算法之一,同时也是最常用的分类算法之一。KNN算法是有监督学习的分类算法,与机器学习算法Kmeans有点像,但却是有本质区别的
定义
- 一个样本a在特征空间中离它最近的K个最近的样本中,大多数属于某个类别,则a样本也属于这个类别
- 如何计算其他样本与a样本的距离?
- 一般时候我们使用 欧式距离
- 二维空间:
- N维空间:
K值的选择
- K值过小 容易受到异常点的影响
- K值过大 容易受到样本均衡的问题
- 如何选择K值
- 使用交叉验证
KNN流程步骤
- 计算 样本a与训练集中每个样本点的距离(欧式距离)
- 对计算出来的所有距离进行排序
- 选取前K个最小距离的样本
- 根据K个样本中哪个类别多,样本a就属于哪个类别
代码
导入使用包 numpy matplotlib Counter
from collections import Counter import matplotlib.pyplot as plt import numpy as np
使用 loadtxt 加载数据 数据样本 前两列为特征值,最后一列为标签值
x_new 为新样本
data = np.loadtxt("exe2.txt",delimiter=',') x = data[:,:2] y = data[:,-1] x_new = np.array([70.534788289883,50.8558115276420])
画图展示
plt.scatter(x[y==0, 0], x[y==0, 1], color='r') plt.scatter(x[y==1, 0], x[y==1, 1], color='g') plt.scatter(x_new[0], x_new[1], color='b') plt.show()
list 用于储存 新样本点到每个样本的距离
argsort函数 会将元素从小到大排序,并返回索引
list = [] for i in x: distance = np.sqrt(np.sum(i - x_new)**2) list.append(distance) list_sort = np.argsort(list) print(list_sort) k = 6 ten_y = [y[i] for i in list_sort[:k]] print(Counter(ten_y))
完整代码
from collections import Counter import matplotlib.pyplot as plt import numpy as np data = np.loadtxt("exe2.txt",delimiter=',') x = data[:,:2] y = data[:,-1] x_new = np.array([70.534788289883,50.8558115276420]) # 0 类用红色表示 1 类用绿色表示 新样本用 蓝色表示 plt.scatter(x[y==0, 0], x[y==0, 1], color='r') plt.scatter(x[y==1, 0], x[y==1, 1], color='g') plt.scatter(x_new[0], x_new[1], color='b') plt.show() # 用于报存距离 list = [] for i in x: distance = np.sqrt(np.sum(i - x_new)**2) list.append(distance) list_sort = np.argsort(list) print(list_sort) k = 6 ten_y = [y[i] for i in list_sort[:k]] print(Counter(ten_y))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理