拥抱时代--AI(8)

前一期博文我们重点分享了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,如下图

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

python 复制代码
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模型对其进行预测,代码如下

python 复制代码
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)

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

python 复制代码
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)

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

相关推荐
qq_2739002326 分钟前
pytorch torch.isclose函数介绍
人工智能·pytorch·python
说私域26 分钟前
阿里巴巴新零售模式下的创新实践:结合开源AI智能名片2+1链动模式S2B2C商城小程序的应用探索
人工智能·开源·零售
这我可不懂41 分钟前
2025低代码与人工智能AI新篇
人工智能·低代码
XianxinMao1 小时前
企业通过私有安全端点访问大型语言模型的益处
人工智能·安全·语言模型
itwangyang5201 小时前
AIDD-人工智能药物设计-可扩展!更快!更便宜!大规模基因组数据存储新结构
人工智能
生信与遗传解读1 小时前
XGBoost算法在自定义数据集中预测疾病风险
人工智能·python·算法·数据分析
背太阳的牧羊人1 小时前
用于与多个数据库聊天的智能 SQL 代理问答和 RAG 系统(2) —— 从 PDF 文档生成矢量数据库 (VectorDB),然后存储文本的嵌入向量
数据库·人工智能·sql·langchain·pdf
HUIBUR科技1 小时前
语音技术与人工智能:智能语音交互的多场景应用探索
人工智能
敲敲敲-敲代码1 小时前
【机器学习】决策树
人工智能·决策树·机器学习
深圳市快瞳科技有限公司2 小时前
图数据挖掘:助力保险欺诈检测
人工智能·数据挖掘