Python遇见机器学习 ---- k近邻(kNN)算法(一)

简介: 所谓:“近朱者赤,近墨者黑”

本文采用编译器:jupyter


k近邻(简称kNN)算法是一种常用的监督学习算法, 其工作机制非常简单 : 给定测试样本,基于某种距离度量找出训练集中与其最靠近的 k个训练样本,然后基于这 k个"邻居"的信息来进行预测。


通常, 在分类任务中可使用"投票法" 即选择这 k个样本中出现最多的类别标记作为预测结果;还可基于距离远近进行加权平均或加权投票,距离越近的样本权重越大。


kNN算法的示意图如下,可以很明显的看出当k取值不同时,判别结果可能产生较大的差异。


可以看出它天然的可以解决多分类问题,思想简单却十分强大!4.png

01 kNN基础

以下为数据准备阶段

# 导入所需要的两个包
import numpy as np
import matplotlib.pyplot as plt
# 各数据点
raw_data_X = [[3.3935, 2.3312],
[3.1100, 1.7815],
[1.3438, 3.3683],
[3.5822, 4.6791],
[2.2803, 2.8669],
[7.4234, 4.6965],
[5.7450, 3.5339],
[9.1721, 2.5111],
[7.7927, 3.4240],
[7.9398, 0.7916]
]
# 各数据点所对应的标记
raw_data_y = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]
X_train = np.array(raw_data_X)
y_train = np.array(raw_data_y)
#绘制散点图
plt.scatter(X_train[y_train==0, 0], X_train[y_train==0, 1], color='g')
plt.scatter(X_train[y_train==1, 0], X_train[y_train==1, 1], color='r')
plt.show()
# 模拟待分类数据
x = np.array([8.0936, 3.3657])
plt.scatter(X_train[y_train==0, 0], X_train[y_train==0, 1], color='g')
plt.scatter(X_train[y_train==1, 0], X_train[y_train==1, 1], color='r')
plt.scatter(x[0], x[1], color='b')
plt.show()

执行结果:

5.png6.png


kNN的过程


1.计算待测数据与所有数据点的“距离”

2.指定k的大小

3.找出模型中与待测点最近的k个点

4.应用“投票法”预测出分类结果

# 计算欧拉距离所需跟方操作
from math import sqrt
distances = []
for x_train in X_train:
    d = sqrt(np.sum((x_train - x) ** 2)) # Universal
    distances.append(d)
# distances = [sqrt(np.sum((x_train - x) ** 2)) for x_train in X_train]
nearest = np.argsort(distances) # 找离x最近的k个点的索引
# 指定k
k = 6
# 计算最近点k个点
topK_y = [y_train[i] for i in nearest[:k]]
# 使用Counter方法统计标签类别
from collections import Counter
votes = Counter(topK_y)
votes.most_common(1) # 找出票数最多的那1个类别,
# Out[22]:
# [(1, 5)]
predict_y = votes.most_common(1)[0][0] # 预测结果
predict_y
# Out[27]:
# 1

02 使用scikit_learn中的kNN


python标准库scikit_learn中也为我们封装好了kNN算法

# 导入kNN算法
from sklearn.neighbors import KNeighborsClassifier
# 创建分类器对象
kNN_classifier = KNeighborsClassifier(n_neighbors=6)
kNN_classifier.fit(X_train, y_train) # 先训练模型
“”“
fit方法返回对象本身
Out[7]:
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski', metric_params=None, n_jobs=1, n_neighbors=6, p=2, weights='uniform')
”“”
X_predict = x.reshape(1, -1) # 传入的数据需要是一个矩阵,这里待预测的x只是一个向量
X_predict
# Out[9]:
# array([[ 8.0936, 3.3657]])
y_predict = kNN_classifier.predict(X_predict)
y_predict[0]
# Out[13]:
# 1
相关文章
|
3天前
|
机器学习/深度学习 算法 Python
机器学习特征筛选:向后淘汰法原理与Python实现
向后淘汰法(Backward Elimination)是机器学习中一种重要的特征选择技术,通过系统性地移除对模型贡献较小的特征,以提高模型性能和可解释性。该方法从完整特征集出发,逐步剔除不重要的特征,最终保留最具影响力的变量子集。其优势包括提升模型简洁性和性能,减少过拟合,降低计算复杂度。然而,该方法在高维特征空间中计算成本较高,且可能陷入局部最优解。适用于线性回归、逻辑回归等统计学习模型。
37 7
|
2天前
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
2天前
|
监控 算法 安全
基于 Python 广度优先搜索算法的监控局域网电脑研究
随着局域网规模扩大,企业对高效监控计算机的需求增加。广度优先搜索(BFS)算法凭借其层次化遍历特性,在Python中可用于实现局域网内的计算机设备信息收集、网络连接状态监测及安全漏洞扫描,确保网络安全与稳定运行。通过合理选择数据结构与算法,BFS显著提升了监控效能,助力企业实现智能化的网络管理。
20 6
|
3天前
|
机器学习/深度学习 数据可视化 算法
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。
|
11天前
|
机器学习/深度学习 数据可视化 算法
Python与机器学习:使用Scikit-learn进行数据建模
本文介绍如何使用Python和Scikit-learn进行机器学习数据建模。首先,通过鸢尾花数据集演示数据准备、可视化和预处理步骤。接着,构建并评估K近邻(KNN)模型,展示超参数调优方法。最后,比较KNN、随机森林和支持向量机(SVM)等模型的性能,帮助读者掌握基础的机器学习建模技巧,并展望未来结合深度学习框架的发展方向。
40 9
Python与机器学习:使用Scikit-learn进行数据建模
|
16天前
|
算法 安全 网络安全
基于 Python 的布隆过滤器算法在内网行为管理中的应用探究
在复杂多变的网络环境中,内网行为管理至关重要。本文介绍布隆过滤器(Bloom Filter),一种高效的空间节省型概率数据结构,用于判断元素是否存在于集合中。通过多个哈希函数映射到位数组,实现快速访问控制。Python代码示例展示了如何构建和使用布隆过滤器,有效提升企业内网安全性和资源管理效率。
48 9
|
13天前
|
存储 算法 量子技术
解锁文档管理系统高效检索奥秘:Python 哈希表算法探究
在数字化时代,文档管理系统犹如知识宝库,支撑各行各业高效运转。哈希表作为核心数据结构,通过哈希函数将数据映射为固定长度的哈希值,实现快速查找与定位。本文聚焦哈希表在文档管理中的应用,以Python代码示例展示其高效检索特性,并探讨哈希冲突解决策略,助力构建智能化文档管理系统。
|
15天前
|
存储 算法 数据安全/隐私保护
探究办公室电脑怎么共享文件的 Python 算法
在数字化办公环境中,高效文件共享是提升工作效率的关键。本文聚焦于使用Python实现办公室电脑文件共享的算法,涵盖需求分析、基础实现及优化拓展。通过socket编程和文件流操作,实现文件传输,并探讨多线程、权限管理和文件索引等优化措施,确保文件共享的安全性和便捷性,助力现代办公协同。
|
10月前
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习】K-Means对文本聚类和半环形数据聚类实战(附源码和数据集)
【Python机器学习】K-Means对文本聚类和半环形数据聚类实战(附源码和数据集)
250 0
|
5月前
|
机器学习/深度学习 算法 数据挖掘
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧1
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧
95 5

热门文章

最新文章