拥抱时代--AI(8)

news/2025/1/11 10:20:03/

前一期博文我们重点分享了kmeans聚类的方法,有了前面的基础我们本期会和大家再就knn,

做点简单分享后,就重点介绍决策树算法。如有问题,欢迎大家随时沟通指教!

KNN模型

KNN模型(K-Nearest Neighbors)是一种基于实例的学习算法,其核心原理是通过查找一个样本的最近K个邻居来预测该样本的类别或属性‌。‌其工作时主要有下面三个重要不分:

  1. 1)距离度量‌:KNN算法使用距离度量来确定数据点之间的相似性。最常见的距离度量是欧几里得距离,也可以使用曼哈顿距离、切比雪夫距离或余弦相似度等。
  2. 2‌)选择K值‌:K是一个超参数,表示在进行决策时考虑的最近邻居的数量。K的选择对模型的性能有很大影响,通常通过交叉验证等方法来确定最佳的K值。
  3. ‌3)决策‌:对于分类任务,KNN算法会根据K个最近邻居的类别,通过多数投票法来预测新样本的类别;对于回归任务,则计算K个最近邻居的目标值的平均值,作为新样本的目标值。
  4. 该算法的优点是:
  5. 1)精度高‌:由于KNN算法依赖于最近的邻居,因此能够捕捉到数据的细微差异。
  6. 2‌)对异常值不敏感‌:由于预测结果基于多个邻居的投票或平均,单个异常值的影响较小。

    ‌3)无数据输入假定‌:KNN不需要对数据进行复杂的预处理或特征工程。

    ‌对应缺点‌:‌计算复杂度高‌:对于每个新样本,都需要计算其与所有训练样本的距离,特别是在大规模数据集上,计算成本较高。‌空间复杂度高‌:需要存储所有的训练样本数据,占用较大的存储空间。

  7. 主要应用于类域交叉或重叠较多的待分样本集,因为它主要依靠周围有限的邻近样本进行分类,而不是依赖于复杂的判别类域方法。此外,KNN还可以用于回归任务,通过计算邻居的目标值平均值来预测新样本的属性。

KNN的使用

使用时引入knn,from sklearn.neighbors import KneighborsClassifier 。为了使用方便我们还是引用上次博文的数据,对数据进行了简单处理,构造了newdata作为存储所有数据的array,如下图

对应显示出数据的代码如下:

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from sklearn.cluster import KMeans
from sklearn.neighbors import KNeighborsClassifier 
data=pd.read_csv("e:/pythonaidata/2.csv")
print(data)
x=data.loc[:,"x"];
y=data.loc[:,"y"];
plt.scatter(x,y)
km=KMeans(n_clusters=3,random_state=0)
km.fit(data)
#获得模型的聚类中心
zxs=km.cluster_centers_
plt.scatter(zxs[:,0],zxs[:,1],color="#ff0000")
print(zxs)
y_yc=km.predict(data)
print(y_yc)
y_yc_list=[]
for i in y_yc:y_yc_list.append(i)
x=x.tolist()
y=y.tolist()
newdata={"x":x,"y":y,"z":y_yc_list}
newdata=pd.DataFrame(newdata)
print(newdata)

使用data可以使用knn模型对其进行预测,代码如下

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from sklearn.cluster import KMeans
from sklearn.neighbors import KNeighborsClassifier 
data=pd.read_csv("e:/pythonaidata/2.csv")
print(data)
x=data.loc[:,"x"];
y=data.loc[:,"y"];
plt.scatter(x,y)
km=KMeans(n_clusters=3,random_state=0)
km.fit(data)
#获得模型的聚类中心
zxs=km.cluster_centers_
plt.scatter(zxs[:,0],zxs[:,1],color="#ff0000")
print(zxs)
y_yc=km.predict(data)
print(y_yc)
y_yc_list=[]
for i in y_yc:y_yc_list.append(i)
x=x.tolist()
y=y.tolist()
newdata={"x":x,"y":y,"z":y_yc_list}
newdata=pd.DataFrame(newdata)
knn=KNeighborsClassifier(n_neighbors=3)
#X=newdata[['x','y']]
#Y=newdata[['z']]
knn.fit(data,y_yc_list)
knn_yc=knn.predict(data)

Meanshift算法

MeanShift算法‌是一种基于密度的聚类算法,主要用于图像处理和数据分析领域。其核心思想是通过迭代地将数据点移动到其局部密度的最高点,从而找到数据的模式。MeanShift算法由Fukunaga和Hostetler在1975年提出,最初用于图像处理领域中的模式识别和聚类任务。2002年,Comaniciu和Meer对该算法进行了改进,并提出了Kernel Density Estimation(KDE)方法,为Mean Shift算法提供了更严格的数学基础‌。其算法原理如下:

算法原理

MeanShift算法的基本原理是通过计算每个点的偏移量之和,求平均偏移量,然后点移动到这个平均偏移量的方向,不断迭代直到满足一定条件结束。具体步骤如下:

选择一个起始点和一个窗口大小。

计算窗口内的加权平均偏移量。

将点移动到新的平均位置。

重复步骤2和3直到没有新的偏移量或达到预设条件。

对所有点重复上述步骤,最终收敛到局部密度最大值‌

meanshift主要用于以下场景:

1.   图像处理:用于图像的色彩平滑滤波、边缘检测、图像分割和视频跟踪等3

2.   数据挖掘:在社交网络分析中用于发现用户群体和模式2

3.   目标跟踪:通过计算目标的密度分布来跟踪运动目标

关于这种算法,使用时需要加载包

from sklearn.cluster import MeanShift,estunat_bandwidth

bw=estimate_bandwidth(X,n_samples=500)

estimate_bandwidth()用于生成mean-shift窗口的尺寸,其参数的意义为:从X中随机选取500个样本,计算每一对样本的距离,然后选取这些距离的0.2分位数作为返回值,显然当n_samples很大时,这个函数的计算量是很大的。

ms=MeanShift(bandwidth=bw)

ms.fit(X)

然后用它就可以预测了。用它的完整代码如下,配合上一博文中的数据,可以直接运行:

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from sklearn.cluster import KMeans
from sklearn.neighbors import KNeighborsClassifier
from sklearn.cluster import MeanShift,estimate_bandwidth
data=pd.read_csv("e:/pythonaidata/2.csv")
print(data)
x=data.loc[:,"x"];
y=data.loc[:,"y"];
plt.scatter(x,y)
km=KMeans(n_clusters=3,random_state=0)
km.fit(data)
#获得模型的聚类中心
zxs=km.cluster_centers_
plt.scatter(zxs[:,0],zxs[:,1],color="#ff0000")
print(zxs)
y_yc=km.predict(data)
print(y_yc)
y_yc_list=[]
for i in y_yc:y_yc_list.append(i)
x=x.tolist()
y=y.tolist()
newdata={"x":x,"y":y,"z":y_yc_list}
newdata=pd.DataFrame(newdata)
knn=KNeighborsClassifier(n_neighbors=3)
#X=newdata[['x','y']]
#Y=newdata[['z']]
#knn.fit(data,y_yc_list)
#knn_yc=knn.predict(data)
bw=estimate_bandwidth(data,n_samples=500)
print(bw)
ms=MeanShift(bandwidth=bw)
ms.fit(data)
y_meanshift=ms.predict(data)
print(y_meanshift)

未来需要努力,一起加油,一起进步!


http://www.ppmy.cn/news/1561934.html

相关文章

【机器学习】无监督学习麾下 K-means 聚类如何智能划分,解锁隐藏结构,为市场细分、图像分割、基因聚类精准导航

🌟个人主页:落叶 🌟当前专栏: 深度学习专栏 目录 1. 引言 2. 聚类算法概述 2.1 聚类算法的定义 2.2 聚类的类型 3. 聚类算法的数学基础 3.1 距离度量 3.2 聚类评估标准 4. 常见的聚类算法 K-means 聚类的深入分析与扩展 1. K-means …

asp.net core webapi 并发请求时 怎么保证实时获取的用户信息是此次请求的?

对于并发请求,每个请求会被分配到一个独立的线程或线程池工作线程上。通过 HttpContext 或 AsyncLocal,每个线程都能独立地获取到它自己的上下文数据。由于这些数据是与当前请求相关的,因此在并发请求时不会互相干扰。 在并发请求时&#xf…

scala代码打包配置(maven)

目录 mavenpom.xml打包配置项&#xff08;非完整版&#xff0c;仅含打包的内容< build>&#xff09;pom.xml完整示例&#xff08;需要修改参数&#xff09;效果说明 maven 最主要的方式还是maven进行打包&#xff0c;也好进行配置项的管理 以下为pom文件&#xff08;不要…

丢帧常见的几种处理方法

1. 优化硬件配置 • 升级计算机硬件&#xff0c;如增加内存、使用更高速的 CPU 和存储设备&#xff0c;以提高数据处理和传输能力。• 确保相机与计算机之间的连接稳定&#xff0c;如使用高质量的数据线、合适的接口卡&#xff0c;并检查接口是否松动。 2. 调整相机参数 • 降低…

Java大厂面试题之10种分布式ID的生成方案

一、前言 日常工作中&#xff0c;我们开发的系统、或者中间件&#xff0c;都是分布式部署的。比如你的订单数据库&#xff0c;做了分库分表&#xff0c;这时候&#xff0c;你需要一个唯一的ID来标记一条数据。这时候&#xff0c;就需要分布式ID。分布式ID是在分布式系统下使用…

从 2D 图像中学习 3D 人机交互关系

一、论文背景与动机 理解3D人类与物体的交互关系&#xff08;3D Human-Object Interaction Relation, 3D HOI&#xff09;对于具身智能和交互建模至关重要。然而&#xff0c;现有的大多数方法通常通过单独预测某些交互元素&#xff08;如人类接触点、物体可供性、人-物空间关系…

【TI毫米波雷达】DCA1000不使用mmWave Studio的数据采集方法,以及自动化实时数据采集

【TI毫米波雷达】DCA1000不使用mmWave Studio的数据采集方法&#xff0c;以及自动化实时数据采集 mmWave Studio提供的功能完全够用了 不用去纠结用DCA1000低延迟、无GUI传数据 速度最快又保证算力无非就是就是Linux板自己写驱动做串口和UDP 做雷达产品应用也不会采用DCA1000的…