机器学习算法-K-近邻算法
1.K-近邻算法
1.1、 K近邻算法简介
1、什么是K-近邻算法
1.1 K-近邻算法(KNN)概念
K Nearest Neighbor 算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法,总体来说KNN算法是相对比较容易理解的算法
-
定义
如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
-
距离公式
两个样本的距离可以通过如下公式计算,又叫欧氏距离
二维平面上点a(x1,y1)与b(x2,y2)间的欧氏距离:
$$
d_{12}=\sqrt{(x1-x2)^2+(y1-y2)^2}
$$三维空间点a(x1,y1,z1)与b(x2,y2,z3)间的欧氏距离:
$$
d_{12}=\sqrt{(x1-x2)^2+(y1-y2)^2+(z1-z2)^2}
$$n维空间点a(x11,x12,...,x1n)与b(x21,x22,...,x2n)间的欧氏距离(两个n维向量):
$$
d_{12}=\sqrt{\sum_{k=1}^n(x_{1k}-x_{2k})^2}
$$
1.2 电影类型分析
序号 | 电影名称 | 搞笑镜头 | 拥抱镜头 | 打斗镜头 | 电影类型 |
---|---|---|---|---|---|
1 | 功夫熊猫 | 39 | 0 | 31 | 喜剧片 |
2 | 二次曝光 | 2 | 3 | 55 | 爱情片 |
3 | 代理情人 | 9 | 38 | 2 | 爱情片 |
4 | 叶问3 | 3 | 2 | 65 | 动作片 |
5 | 新步步惊心 | 8 | 34 | 17 | 爱情片 |
6 | 谍影重重 | 5 | 2 | 57 | 动作片 |
7 | 美人鱼 | 21 | 17 | 5 | 喜剧片 |
8 | 宝贝当家 | 45 | 2 | 9 | 喜剧片 |
9 | 唐人街探案 | 23 | 3 | 17 | ? |
《唐人街探案》vs《二次曝光》
$$
\begin{aligned} d&=\sqrt{\sum_{i=1}^n(x_i-y_i)2}\\ &=\sqrt{(23-2)^2+(3-3)^2+(17-55)^2}\\ &=43.42 \end{aligned}
$$
分别计算每个电影和被预测电影的距离,然后求解:
序号 | 电影名称 | 搞笑镜头 | 拥抱镜头 | 打斗镜头 | 电影类型 | 距离 | k=5时 |
---|---|---|---|---|---|---|---|
1 | 功夫熊猫 | 39 | 0 | 31 | 喜剧片 | 21.47 | v |
2 | 二次曝光 | 2 | 3 | 55 | 爱情片 | 43.42 | |
3 | 代理情人 | 9 | 38 | 2 | 爱情片 | 40.57 | v |
4 | 叶问3 | 3 | 2 | 65 | 动作片 | 52.01 | |
5 | 新步步惊心 | 8 | 34 | 17 | 爱情片 | 34.44 | v |
6 | 谍影重重 | 5 | 2 | 57 | 动作片 | 43.87 | |
7 | 美人鱼 | 21 | 17 | 5 | 喜剧片 | 18.55 | v |
8 | 宝贝当家 | 45 | 2 | 9 | 喜剧片 | 23.43 | v |
9 | 唐人街探案 | 23 | 3 | 17 | ? | ---- |
5个最近的样本中3个喜剧片,2个爱情片,因此《唐人街探案》为 喜剧片。
1.3 KNN算法流程总结
1)计算已知类别数据集中的点与当前点之间的距离
2)按距离递增次序排序
3)选取与当前点距离最小的K个点
4)统计前k个点所在的类别出现的频率
5)返回前k个点出现频率最高的类别作为当前点的预测分类
2 总结
-
K-近邻算法简介
-
定义:就是通过你的“邻居”来判断你属于哪个类别
-
如何计算你到你的“邻居”的距离:一半使用欧氏距离
-
1.2、 K近邻算法api初步使用
1、Scikit-learn工具介绍
scikit-learn: machine learning in Python — scikit-learn 1.4.1 documentation
1.1 安装
#pip3 install scikit-learn==0.19.1 pip3 install scikit-learn==1.2.0
安装好之后可以使用命令查看安装是否成功
import sklearn
-
注:安装scikit-learn 需要Numpy,Scipy等库
1.2 Scikit-learn包含的内容
-
Classification
-
Identifying which category an object belongs to.
-
-
Regression
-
Predicting a continuous-valued attribute associated with an object.
-
-
Clustering
-
Automatic grouping of similar objects into sets.
-
-
Dimensionality reduction
-
Reducing the number of random variables to consider.
-
-
Model selection
-
Comparing, validating and choosing parameters and models.
-
-
Preprocessing
-
Feature extraction and normalization.
-
2 K近邻算法API
-
sklearn.neighbors.KNeighborsClassfier(n_neighbors=5)
-
n_neighbors: int,可选(默认=5),k_neighbors查询默认使用的邻居数
-
3 案例
3.1 步骤分析
-
1.获取数据集
-
2.数据集基本处理
-
3.特征工程
-
4.机器学习
-
5.模型评估
3.2 代码过程
code
# 导入模块 from sklearn.neighbors import KNeighborsClassifier # 构造数据集 x = [[0], [1], [2], [3]] y = [0, 0, 1, 1] # 机器学习--模型训练 # 实例化api estimator = KNeighborsClassifier(n_neighbors=2) # 使用fit方法训练 estimator.fit(x, y) ret = estimator.predict([[1]]) print("预测结果:\n", ret) ret = estimator.predict([[3]]) print("预测结果:\n", ret)
4 小结
-
sklearn的优势
-
文档多,且规范
-
包含的算法多
-
实现起来容易
-
-
knn中的api
-
sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)
-
1.3、距离度量
1 距离公式的基本性质
在机器学习过程中,对于函数dist(.,.),若它是一“距离度量”(distance measure),则需满足一些基本性质:
-
非负性:dist(Xi,Xj) >= 0;
-
同一性:dist(xi,xj) =0. 当且仅当Xi=Xj;
-
对称性:dist(xi,xj)=dist(xj,xi);
-
直递性:dist(xi,xj) <= dist(xi,xk)+dist(xk,xj)
直递性常被直接称为“三角不等式”。
2 常见的距离公式
2.1 欧氏距离(Euclidean Distance):
欧氏距离是最容易只直观理解的距离度量方法
-
两个样本的距离可以通过如下公式计算,又叫欧氏距离
二维平面上点a(x1,y1)与b(x2,y2)间的欧氏距离:
$$
d_{12}=\sqrt{(x1-x2)^2+(y1-y2)^2}
$$三维空间点a(x1,y1,z1)与b(x2,y2,z3)间的欧氏距离:
$$
d_{12}=\sqrt{(x1-x2)^2+(y1-y2)^2+(z1-z2)^2}
$$n维空间点a(x11,x12,...,x1n)与b(x21,x22,...,x2n)间的欧氏距离(两个n维向量):
$$
d_{12}=\sqrt{\sum_{k=1}^n(x_{1k}-x_{2k})^2}
$$
#####
2.2 曼哈顿距离(Manhattan Distance):
在曼哈顿街区要从一个十字路口开车到另一个十字路口,驾驶距离不是两个点之间的直线距离。曼哈顿距离也称为“城市街区距离”(City Block distance)。
二维平面两点a(x1,y1)与b(x2,y2)间的曼哈顿距离:
$$
d_{12}=|x_1-x_2|+|y_1-y_2|
$$
n维空间点a(x11,x12,...,x1n)与b(x21,x22,...,x2n)间的曼哈顿距离:
$$
d_{12}=\sum_{k=1}^n|x_{1k}-x_{2k}|
$$
2.3 切比雪夫距离(Chebyshev Distance):
国际象棋中,国王可以直行、横行、斜行,可以一步移动到相邻8个方格中任意一个。国王从(x1,y1)走到格子(x2,y2)最少需要多少步,这个距离就叫切比雪夫距离。
二维平面两点a(x1,y1)与b(x2,y2)之间的切比雪夫距离:
$$
d_{12}=max(|x_1-x_2|,|y_1-y_2|)
$$
n维空间两点a(x11,x12,...,x1n)与b(x21,x22,...,x2n)之间的切比雪夫距离:
$$
d_{12}=max(|x_{1i}-x_{2i}|)
$$
2.4 闵可夫斯基距离(Minkowski Distance):
闵氏距离不是一种距离,而是一组距离的定义,是对多个距离度量公式的概括性表述。
<