博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
聚类--K均值算法:自主实现与sklearn.cluster.KMeans调用
阅读量:6070 次
发布时间:2019-06-20

本文共 2707 字,大约阅读时间需要 9 分钟。

import numpy as npx=np.random.randint(1,100,[20,1])     #在1-100范围中产生20行1列的随机数组y=np.zeros(20)k=3 #取数据中k个对象为初始中心,每个对象代表一个聚类中心def initcenter(x,k):                return x[:k]   kc=initcenter(x,k)kc #对于样本中的数据对象,根据它们与这些聚类中心的欧氏距离,按距离最近的准则将它们分到距离它们最近的聚类中心(最相似)所对应的类;def nearest(kc,i):       #数组中的值,与聚类中心最小距离所在类别的索引号    d=(abs(kc-i))    w=np.where(d==np.min(d))    return w[0][0]def xclassify(x,y,kc):      #对每个数据进行循环,将分类的结果放进对应y位置中    for i in range(x.shape[0]):        y[i]=nearest(kc,x[i])        return y #更新聚类中心:将每个类别中所有对象所对应的均值作为该类别的聚类中心,计算目标函数的值;def kcmean(x,y,kc,k):    l=list(kc)    flag=False    for c in range(k):        print(c)        m=np.where(y==c)        print(m,x[m])        n=np.mean(x[m])        print(kc[c],n)        if l[c]!=n:            kc[c]=n         #这个值没赋上            print(type(kc),kc[c])            l[c]=n            flag=True        #聚类中心发生变化            print(l,flag)            return(np.array(l),flag)flag=Trueprint("x值为",x,"y值为",y,"kc值为",kc,"flag值为",flag) #判断聚类中心和目标函数的值是否发生改变,若不变,则输出结果,若改变,则返回2)while flag:    y = xclassify(x,y,kc)    kc, flag = kcmean(x,y,kc,k)    print(y,kc,type(kc))print(x,y) #鸢尾花花瓣长度数据做聚类并用散点图显示import matplotlib.pyplot as pltplt.scatter(x,x,c=x,s=50,cmap="rainbow");plt.show() #鸢尾花花瓣长度数据做聚类并用散点图显示。import numpy as npfrom sklearn.datasets import load_irisiris=load_iris()x=iris.data[:,1]y=np.zeros(150)def initcenter(x,k):    #初始聚类中心数组    return x[0:k].reshape(k)def nearest(kc,i):       #数组中的值,与聚类中心最小距离所在类别的索引号    d = (abs(kc-i))    w = np.where(d == np.min(d))    return w[0][0]def xclassify(x,y,kc):    for i in range(x.shape[0]):       #对数组的每个值进行分类,shape[0]读取矩阵第一维度的长度        y[i] = nearest(kc,x[i])    return ydef kcmean(x,y,kc,k):     #计算各聚类新均值    l = list(kc)    flag = False    for c in range(k):        print(c)        m = np.where(y == c)        n=np.mean(x[m])        if l[c] != n:            l[c] = n            flag = True     #聚类中心发生变化            print(l,flag)    return (np.array(l),flag)k = 3kc = initcenter(x,k)flag = Trueprint(x,y,kc,flag) #判断聚类中心和目标函数的值是否发生改变,若不变,则输出结果,若改变,则返回2while flag:    y = xclassify(x,y,kc)    kc, flag = kcmean(x,y,kc,k)    print(y,kc,type(kc))    print(x,y)import matplotlib.pyplot as pltplt.scatter(x,x,c=y,s=50,cmap="Paired");plt.show() #用sklearn.cluster.KMeans,鸢尾花花瓣长度数据做聚类并用散点图显示import matplotlib.pyplot as pltimport numpy as npfrom sklearn.datasets import load_irisiris = load_iris()X = iris.dataXfrom sklearn.cluster import KMeansest = KMeans(n_clusters = 3)est.fit(X)kc = est.cluster_centers_y_kmeans = est.predict(X)   #预测每个样本的聚类索引print(y_kmeans,kc)print(kc.shape,y_kmeans.shape,np.shape)plt.scatter(X[:,0],X[:,1],c=y_kmeans,s=50,cmap='rainbow');plt.show()

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/h000/p/9865044.html

你可能感兴趣的文章
扩展器必须,SAS 2.0未必(SAS挺进中端存储系统之三)
查看>>
Eclipse遇到Initializing Java Tooling解决办法
查看>>
while((ch = getchar()) != '\n')
查看>>
好程序员web前端分享JS检查浏览器类型和版本
查看>>
Linux 安装oracle内核参数
查看>>
Oracle DG 逻辑Standby数据同步性能优化
查看>>
exchange 2010 队列删除
查看>>
android实用测试方法之Monkey与MonkeyRunner
查看>>
「翻译」逐步替换Sass
查看>>
H5实现全屏与F11全屏
查看>>
处理excel表的列
查看>>
枸杞子也能控制脂肪肝
查看>>
Excuse me?这个前端面试在搞事!
查看>>
C#数据采集类
查看>>
quicksort
查看>>
检验函数运行时间
查看>>
【BZOJ2019】nim
查看>>
Oracle临时表空间满了的解决办法
查看>>
四部曲
查看>>
LINUX内核调试过程
查看>>