人工智能入门

阅读: 评论:0

人工智能入门

人工智能入门

前言: Hello大家好,我是小哥谈。 K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。🌈

     目录

🚀1.k-means算法优缺点

🚀2.算法思想

🚀3.解决的问题

🚀4.k-means原理介绍

🚀5.k-means算法实战

🚀1.k-means算法优缺点

优点:容易实现

缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢.

使用数据类型: 数值型数据

🚀2.算法思想

k-means算法 实际上就是通过计算不同样本间的距离来判断他们的相 近关系的,相近的就会放到同一个类别中去。📚

🚀3.解决的问题

k-means算法属于无监督学习的一种聚类算法,其目的为:在不知数据所属类别及类别数量的前提下,依据数据自身所暗含的特点对数据 进行聚类。对于聚类过程中类别数量 k 的选取,需要一定的先验知识, 也可根据“类内间距小,类间间距大“(一种聚类算法的理想情况) 为目标进行实现。🍃


🚀4.k-means原理介绍

k-means算法以数据间的距离作为数据对象相似性度量的标准,因此选择计算数据间距离的计算方式对最后的聚类效果有显著的影响,常用计算距离的方式有:余弦距离欧式距离曼哈顿距离等。🌻


🚀5.k-means算法实战

实现效果如下:

代码(每一步都已经清楚的进行了说明):
from numpy import *
import pandas as pd
import matplotlib.pyplot as plt
#距离度量函数
def calc_distance(vec1,vec2):return sqrt(sum(power(vec1-vec2,2)))#创建初始聚类中心
def creat_centroid(data,k):centroids = zeros((k,n))centroids[0,0] = 2centroids[0,1] = 10centroids[1, 0] = 5centroids[1, 1] = 8centroids[2, 0] = 1centroids[2, 1] = 2return  centroids# k-means聚类
def kMeans(data,k,dist=calc_distance,creat_center =  creat_centroid):# 初始化cluster_assment,存储中间结果#第一列存储索引,第二列存储距离# 样本的个数m = shape(data)[0]init = zeros((m,2))cluster_assment = mat(init)# 初始化聚类中心矩阵centroids = creat_centroid(data,k)for epoch in range(1):# 对数据集合中每个样本点进行计算for i in range(m):min_dist = infmin_index = -1# 对每个样本点到每个中心的距离进行计算for j in range(k):dist_ij = calc_distance(centroids[j, :],data[i, :])# 找到距离最近的中心的距离和索引if dist_ij < min_dist:min_dist =  dist_ijmin_index = jcluster_assment[i,:] = min_index,min_dist# 对所有节点聚类之后,重新更新中心for i in range(k):# .A把矩阵转成数组pts_in_cluster = data[nonzero(cluster_assment[:,0].A == i)[0]]centroids[i,:] = mean(pts_in_cluster,axis=0)return centroids,cluster_assmentif __name__ == '__main__':# 创建数据集data = array([[2,10],[2,5],[8,4],[5,8],[7,5] ,[6,4],[1,2],[4,9]])k = 3 # k为聚类个数n = 2 # n为特征个数centroids,cluster_assment = kMeans(data,k,dist = calc_distance,creat_center=creat_centroid)predict_label = cluster_assment[:,0]data_and_pred = column_stack((data,predict_label))# df是原样数据样本和预测出来的类别df = pd.DataFrame(data_and_pred,columns=['data1','data2','pred'])df0 = df[df.pred == 0].valuesdf1 = df[df.pred == 1].valuesdf2 = df[df.pred == 2].values#画图plt.scatter(df0[:,0],df0[:,1],c ='turquoise',marker = 'o',label = 'label0')plt.scatter(df1[:, 0], df1[:, 1], c='green', marker='*', label='label1')plt.scatter(df2[:, 0], df2[:, 1], c='blue', marker='+', label='label2')plt.scatter(centroids[:,0].tolist(),centroids[:,1].tolist(),c='red')plt.legend(loc = 2)plt.show()

具体实现效果:

小伙伴们,可以根据需求添加数据集,本文只是简单添加了几组数据集做一下演示。🌟🌟🌟


本文发布于:2024-01-28 19:35:47,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17064417539775.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:人工智能   入门
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23