一、k近邻算法简介
1.什么是k-近邻算法
根据“邻居” 来推断你的类别
1.1 k-近邻算法概念
- 定义:
如果一个样本在特征空间中的与它最相似地k个样本,这k个样本属于同一个类别,则该样本也属于这个类别。
- 距离公式
(1).欧式距离(高中学的距离公式)
1.2 KNN算法流程总结
1)计算已知类别数据集中的点与当前点之间的距离
2)按距离递增次序排序
3)选取与当前点距离最小的k个点
4)统计前k个点所在的类别出现的频率
5)返回前k个点出现频率最高的类别作为当前点的预测分类
2 K-近邻算法API
sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)
- 参数介绍:
- n_neighbors:int,可选(默认= 5),k_neighbors查询默认使用的邻居数
- algorithm:{‘auto’,‘ball_tree’,‘kd_tree’,‘brute’}
快速k近邻搜索算法,默认参数为auto,可以理解为算法自己决定合适的搜索算法。除此之外,用户也可以自己指定搜索算法ball_tree、kd_tree、brute方法进行搜索,
brute是蛮力搜索,也就是线性扫描,当训练集很大时,计算非常耗时。
kd_tree,构造kd树存储数据以便对其进行快速检索的树形数据结构,kd树也就是数据结构中的二叉树。以中值切分构造的树,每个结点是一个超矩形,在维数小于20时效率高。
ball tree是为了克服kd树高维失效而发明的,其构造过程是以质心C和半径r分割样本空间,每个节点是一个超球体。
3 案例
3.1 步骤分析
- 1.获取数据集
- 2.数据基本处理(该案例中省略)
- 3.特征工程(该案例中省略)
- 4.机器学习
- 5.模型评估(该案例中省略)
3.2 代码过程
- 步骤一:导入模块
from sklearn.neighbors import KNeighborsClassifier
- 步骤二:构造数据集
- 数据集格式一:
x = [[0], [1], [2], [3]]
y = [0, 0, 1, 1]
- 数据集格式二:
x = [[39,0,31],[3,2,65],[2,3,55],[9,38,2],[8,34,17],[5,2,57],[21,17,5],[45,2,9]]
y = [0,1,2,2,2,2,1,1]
- 步骤三:机器学习 – 模型训练
# 实例化API
estimator = KNeighborsClassifier(n_neighbors=1)
# 使用fit方法进行训练
estimator.fit(x, y)
estimator.predict([[1]])
# 数据集格式二对应的测试数据
# estimator.predict([[23,3,17]])
4. 存在问题
1.距离公式是否还有其他公式
2.如何选取k值地大小?
3.api中其他参数地具体含义