机器学习算法-K-近邻算法

机器学习算法-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):

闵氏距离不是一种距离,而是一组距离的定义,是对多个距离度量公式的概括性表述。

<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值