机器学习算法:K近邻(k-nearest neighbors)分类实战

简介: 机器学习算法:K近邻(k-nearest neighbors)分类实战

2.4.2 莺尾花数据集--kNN分类

Step1: 库函数导入

1importnumpyasnp# 加载莺尾花数据集fromsklearnimportdatasets# 导入KNN分类器fromsklearn.neighborsimportKNeighborsClassifierfromsklearn.model_selectionimporttrain_test_split

Step2: 数据导入&分析

1

# 导入莺尾花数据集iris=datasets.load_iris()
X=iris.datay=iris.target# 得到训练集合和验证集合, 8: 2X_train, X_test, y_train, y_test=train_test_split(X, y, test_size=0.2)

Step3: 模型训练

这里我们设置参数k(n_neighbors)=5, 使用欧式距离(metric=minkowski & p=2)

1# 训练模型clf=KNeighborsClassifier(n_neighbors=5, p=2, metric="minkowski")
clf.fit(X_train, y_train)

[3]:

KNeighborsClassifier()

KNeighborsClassifier

n_neighbors : int,optional(default = 5)

默认情况下kneighbors查询使用的邻居数。就是k-NN的k的值,选取最近的k个点。

weights : str或callable,可选(默认=‘uniform’)

默认是uniform,参数可以是uniform、distance,也可以是用户自己定义的函数。uniform是均等的权重,就说所有的邻近点的权重都是相等的。distance是不均等的权重,距离近的点比距离远的点的影响大。用户自定义的函数,接收距离的数组,返回一组维数相同的权重。

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分割样本空间,每个节点是一个超球体。

leaf_size : int,optional(默认值= 30)

默认是30,这个是构造的kd树和ball树的大小。这个值的设置会影响树构建的速度和搜索速度,同样也影响着存储树所需的内存大小。需要根据问题的性质选择最优的大小。

p : 整数,可选(默认= 2)

距离度量公式。在上小结,我们使用欧氏距离公式进行距离度量。除此之外,还有其他的度量方法,例如曼哈顿距离。这个参数默认为2,也就是默认使用欧式距离公式进行距离度量。也可以设置为1,使用曼哈顿距离公式进行距离度量。

metric : 字符串或可调用,默认为’minkowski’

用于距离度量,默认度量是minkowski,也就是p=2的欧氏距离(欧几里德度量)。

metric_params : dict,optional(默认=None)

距离公式的其他关键参数,这个可以不管,使用默认的None即可。

n_jobs : int或None,可选(默认=None)

并行处理设置。默认为1,临近点搜索并行工作数。如果为-1,那么CPU的所有cores都用于并行工作。




Step4:模型预测&可视化

1# 预测X_pred=clf.predict(X_test)
acc=sum(X_pred==y_test) /X_pred.shape[0]
print("预测的准确率ACC: %.3f"%acc)


预测的准确率ACC: 0.933

我们用表格来看一下KNN的训练和预测过程。这里用表格进行可视化:

  1. 训练数据[表格对应list]

feat_1

feat_2

feat_3

feat_4

label

5.1

3.5

1.4

0.2

0

4.9

3.

1.4

0.2

0

4.7

3.2

1.3

0.2

0

4.6

3.1

1.5

0.2

0

6.4

3.2

4.5

1.5

1

6.9

3.1

4.9

1.5

1

5.5

2.3

4.

1.3

1

6.5

2.8

4.6

1.5

1

5.8

2.7

5.1

1.9

2

7.1

3.

5.9

2.1

2

6.3

2.9

5.6

1.8

2

6.5

3.

5.8

2.2

2

  1. knn.fit(X, y)的过程可以简单认为是表格存储

feat_1

feat_2

feat_3

feat_4

label

5.1

3.5

1.4

0.2

0

4.9

3.

1.4

0.2

0

4.7

3.2

1.3

0.2

0

4.6

3.1

1.5

0.2

0

6.4

3.2

4.5

1.5

1

6.9

3.1

4.9

1.5

1

5.5

2.3

4.

1.3

1

6.5

2.8

4.6

1.5

1

5.8

2.7

5.1

1.9

2

7.1

3.

5.9

2.1

2

6.3

2.9

5.6

1.8

2

6.5

3.

5.8

2.2

2

  1. knn.predict(x)预测过程会计算x和所有训练数据的距离 这里我们使用欧式距离进行计算, 预测过程如下

step1: 计算x和所有训练数据的距离

feat_1

feat_2

feat_3

feat_4

距离

label

5.1

3.5

1.4

0.2

0.14142136

0

4.9

3.

1.4

0.2

0.60827625

0

4.7

3.2

1.3

0.2

0.50990195

0

4.6

3.1

1.5

0.2

0.64807407

0

6.4

3.2

4.5

1.5

3.66333182

1

6.9

3.1

4.9

1.5

4.21900462

1

5.5

2.3

4.

1.3

3.14801525

1

6.5

2.8

4.6

1.5

3.84967531

1

5.8

2.7

5.1

1.9

4.24617475

2

7.1

3.

5.9

2.1

5.35070089

2

6.3

2.9

5.6

1.8

4.73075047

2

6.5

3.

5.8

2.2

5.09607692

2

step2: 根据距离进行编号排序

距离升序编号

feat_1

feat_2

feat_3

feat_4

距离

label

1

5.1

3.5

1.4

0.2

0.14142136

0

3

4.9

3.

1.4

0.2

0.60827625

0

2

4.7

3.2

1.3

0.2

0.50990195

0

4

4.6

3.1

1.5

0.2

0.64807407

0

6

6.4

3.2

4.5

1.5

3.66333182

1

8

6.9

3.1

4.9

1.5

4.21900462

1

5

5.5

2.3

4.

1.3

3.14801525

1

7

6.5

2.8

4.6

1.5

3.84967531

1

9

5.8

2.7

5.1

1.9

4.24617475

2

12

7.1

3.

5.9

2.1

5.35070089

2

10

6.3

2.9

5.6

1.8

4.73075047

2

11

6.5

3.

5.8

2.2

5.09607692

2

step3: 我们设置k=5,选择距离最近的k个样本进行投票

距离升序编号

feat_1

feat_2

feat_3

feat_4

距离

label

1

5.1

3.5

1.4

0.2

0.14142136

0

3

4.9

3.

1.4

0.2

0.60827625

0

2

4.7

3.2

1.3

0.2

0.50990195

0

4

4.6

3.1

1.5

0.2

0.64807407

0

6

6.4

3.2

4.5

1.5

3.66333182

1

8

6.9

3.1

4.9

1.5

4.21900462

1

5

5.5

2.3

4.

1.3

3.14801525

1

7

6.5

2.8

4.6

1.5

3.84967531

1

9

5.8

2.7

5.1

1.9

4.24617475

2

12

7.1

3.

5.9

2.1

5.35070089

2

10

6.3

2.9

5.6

1.8

4.73075047

2

11

6.5

3.

5.8

2.2

5.09607692

2

step4: k近邻的label进行投票

nn_labels = [0, 0, 0, 0, 1] --> 得到最后的结果0。


相关文章
|
3月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
193 6
|
1月前
|
机器学习/深度学习 人工智能 算法
机器学习算法的优化与改进:提升模型性能的策略与方法
机器学习算法的优化与改进:提升模型性能的策略与方法
274 13
机器学习算法的优化与改进:提升模型性能的策略与方法
|
1月前
|
机器学习/深度学习 算法 网络安全
CCS 2024:如何严格衡量机器学习算法的隐私泄露? ETH有了新发现
在2024年CCS会议上,苏黎世联邦理工学院的研究人员提出,当前对机器学习隐私保护措施的评估可能存在严重误导。研究通过LiRA攻击评估了五种经验性隐私保护措施(HAMP、RelaxLoss、SELENA、DFKD和SSL),发现现有方法忽视最脆弱数据点、使用较弱攻击且未与实际差分隐私基线比较。结果表明这些措施在更强攻击下表现不佳,而强大的差分隐私基线则提供了更好的隐私-效用权衡。
53 14
|
3月前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
77 1
|
3天前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
1月前
|
算法 数据安全/隐私保护 计算机视觉
基于Retinex算法的图像去雾matlab仿真
本项目展示了基于Retinex算法的图像去雾技术。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释和操作步骤视频。Retinex理论由Edwin Land提出,旨在分离图像的光照和反射分量,增强图像对比度、颜色和细节,尤其在雾天条件下表现优异,有效解决图像去雾问题。
|
1月前
|
算法 数据可视化 安全
基于DWA优化算法的机器人路径规划matlab仿真
本项目基于DWA优化算法实现机器人路径规划的MATLAB仿真,适用于动态环境下的自主导航。使用MATLAB2022A版本运行,展示路径规划和预测结果。核心代码通过散点图和轨迹图可视化路径点及预测路径。DWA算法通过定义速度空间、采样候选动作并评估其优劣(目标方向性、障碍物距离、速度一致性),实时调整机器人运动参数,确保安全避障并接近目标。
147 68
|
2天前
|
算法
基于SOA海鸥优化算法的三维曲面最高点搜索matlab仿真
本程序基于海鸥优化算法(SOA)进行三维曲面最高点搜索的MATLAB仿真,输出收敛曲线和搜索结果。使用MATLAB2022A版本运行,核心代码实现种群初始化、适应度计算、交叉变异等操作。SOA模拟海鸥觅食行为,通过搜索飞行、跟随飞行和掠食飞行三种策略高效探索解空间,找到全局最优解。
|
1月前
|
算法 数据安全/隐私保护
室内障碍物射线追踪算法matlab模拟仿真
### 简介 本项目展示了室内障碍物射线追踪算法在无线通信中的应用。通过Matlab 2022a实现,包含完整程序运行效果(无水印),支持增加发射点和室内墙壁设置。核心代码配有详细中文注释及操作视频。该算法基于几何光学原理,模拟信号在复杂室内环境中的传播路径与强度,涵盖场景建模、射线发射、传播及接收点场强计算等步骤,为无线网络规划提供重要依据。
|
2天前
|
算法 数据可视化 数据安全/隐私保护
一级倒立摆平衡控制系统MATLAB仿真,可显示倒立摆平衡动画,对比极点配置,线性二次型,PID,PI及PD五种算法
本课题基于MATLAB对一级倒立摆控制系统进行升级仿真,增加了PI、PD控制器,并对比了极点配置、线性二次型、PID、PI及PD五种算法的控制效果。通过GUI界面显示倒立摆动画和控制输出曲线,展示了不同控制器在偏转角和小车位移变化上的性能差异。理论部分介绍了倒立摆系统的力学模型,包括小车和杆的动力学方程。核心程序实现了不同控制算法的选择与仿真结果的可视化。
29 15

热门文章

最新文章