zoukankan      html  css  js  c++  java
  • 聚类K-Means

    import numpy as np
    x=np.random.randint(0,52,52)
    x
    

      

    k=3
    y=np.zeros(20)
    y
    

      

    array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
            0.,  0.,  0.,  0.,  0.,  0.,  0.])
    

      

    def intcent(x,k):
        return x[0:k].reshape(k)
    kc=intcent(x,k)
    kc
    
    
    array([21,  8, 45])
    

      

    d=abs(2-kc)
    np.where(d==np.min(d))[0][0]
    
    
    1
    

      

    def nearest(kc,i):
        d=(abs(kc-i))
        w=np.where(d==np.min(d))
        return w[0][0]
    

      

    def xclassfy(x,y,kc):
        for i in range(x.shape[0]):
            y[i]=nearst(kc,x[i])
        return y
    

      

    from sklearn.datasets import load_iris
    iris=load_iris()
    iris
    x=iris.data
    x
    

      

    Out[1]:
    array([[5.1, 3.5, 1.4, 0.2],
           [4.9, 3. , 1.4, 0.2],
           [4.7, 3.2, 1.3, 0.2],
           [4.6, 3.1, 1.5, 0.2],
           [5. , 3.6, 1.4, 0.2],
           [5.4, 3.9, 1.7, 0.4],
           [4.6, 3.4, 1.4, 0.3],
           [5. , 3.4, 1.5, 0.2],
           [4.4, 2.9, 1.4, 0.2],
           [4.9, 3.1, 1.5, 0.1],
           [5.4, 3.7, 1.5, 0.2],
           [4.8, 3.4, 1.6, 0.2],
           [4.8, 3. , 1.4, 0.1],
           [4.3, 3. , 1.1, 0.1],
           [5.8, 4. , 1.2, 0.2],
           [5.7, 4.4, 1.5, 0.4],
           [5.4, 3.9, 1.3, 0.4],
           [5.1, 3.5, 1.4, 0.3],
           [5.7, 3.8, 1.7, 0.3],
           [5.1, 3.8, 1.5, 0.3],
           [5.4, 3.4, 1.7, 0.2],
           [5.1, 3.7, 1.5, 0.4],
           [4.6, 3.6, 1. , 0.2],
           [5.1, 3.3, 1.7, 0.5],
           [4.8, 3.4, 1.9, 0.2],
           [5. , 3. , 1.6, 0.2],
           [5. , 3.4, 1.6, 0.4],
           [5.2, 3.5, 1.5, 0.2],
           [5.2, 3.4, 1.4, 0.2],
           [4.7, 3.2, 1.6, 0.2],
           [4.8, 3.1, 1.6, 0.2],
           [5.4, 3.4, 1.5, 0.4],
           [5.2, 4.1, 1.5, 0.1],
           [5.5, 4.2, 1.4, 0.2],
           [4.9, 3.1, 1.5, 0.1],
           [5. , 3.2, 1.2, 0.2],
           [5.5, 3.5, 1.3, 0.2],
           [4.9, 3.1, 1.5, 0.1],
           [4.4, 3. , 1.3, 0.2],
           [5.1, 3.4, 1.5, 0.2],
           [5. , 3.5, 1.3, 0.3],
           [4.5, 2.3, 1.3, 0.3],
           [4.4, 3.2, 1.3, 0.2],
           [5. , 3.5, 1.6, 0.6],
           [5.1, 3.8, 1.9, 0.4],
           [4.8, 3. , 1.4, 0.3],
           [5.1, 3.8, 1.6, 0.2],
           [4.6, 3.2, 1.4, 0.2],
           [5.3, 3.7, 1.5, 0.2],
           [5. , 3.3, 1.4, 0.2],
           [7. , 3.2, 4.7, 1.4],
           [6.4, 3.2, 4.5, 1.5],
           [6.9, 3.1, 4.9, 1.5],
           [5.5, 2.3, 4. , 1.3],
           [6.5, 2.8, 4.6, 1.5],
           [5.7, 2.8, 4.5, 1.3],
           [6.3, 3.3, 4.7, 1.6],
           [4.9, 2.4, 3.3, 1. ],
           [6.6, 2.9, 4.6, 1.3],
           [5.2, 2.7, 3.9, 1.4],
           [5. , 2. , 3.5, 1. ],
           [5.9, 3. , 4.2, 1.5],
           [6. , 2.2, 4. , 1. ],
           [6.1, 2.9, 4.7, 1.4],
           [5.6, 2.9, 3.6, 1.3],
           [6.7, 3.1, 4.4, 1.4],
           [5.6, 3. , 4.5, 1.5],
           [5.8, 2.7, 4.1, 1. ],
           [6.2, 2.2, 4.5, 1.5],
           [5.6, 2.5, 3.9, 1.1],
           [5.9, 3.2, 4.8, 1.8],
           [6.1, 2.8, 4. , 1.3],
           [6.3, 2.5, 4.9, 1.5],
           [6.1, 2.8, 4.7, 1.2],
           [6.4, 2.9, 4.3, 1.3],
           [6.6, 3. , 4.4, 1.4],
           [6.8, 2.8, 4.8, 1.4],
           [6.7, 3. , 5. , 1.7],
           [6. , 2.9, 4.5, 1.5],
           [5.7, 2.6, 3.5, 1. ],
           [5.5, 2.4, 3.8, 1.1],
           [5.5, 2.4, 3.7, 1. ],
           [5.8, 2.7, 3.9, 1.2],
           [6. , 2.7, 5.1, 1.6],
           [5.4, 3. , 4.5, 1.5],
           [6. , 3.4, 4.5, 1.6],
           [6.7, 3.1, 4.7, 1.5],
           [6.3, 2.3, 4.4, 1.3],
           [5.6, 3. , 4.1, 1.3],
           [5.5, 2.5, 4. , 1.3],
           [5.5, 2.6, 4.4, 1.2],
           [6.1, 3. , 4.6, 1.4],
           [5.8, 2.6, 4. , 1.2],
           [5. , 2.3, 3.3, 1. ],
           [5.6, 2.7, 4.2, 1.3],
           [5.7, 3. , 4.2, 1.2],
           [5.7, 2.9, 4.2, 1.3],
           [6.2, 2.9, 4.3, 1.3],
           [5.1, 2.5, 3. , 1.1],
           [5.7, 2.8, 4.1, 1.3],
           [6.3, 3.3, 6. , 2.5],
           [5.8, 2.7, 5.1, 1.9],
           [7.1, 3. , 5.9, 2.1],
           [6.3, 2.9, 5.6, 1.8],
           [6.5, 3. , 5.8, 2.2],
           [7.6, 3. , 6.6, 2.1],
           [4.9, 2.5, 4.5, 1.7],
           [7.3, 2.9, 6.3, 1.8],
           [6.7, 2.5, 5.8, 1.8],
           [7.2, 3.6, 6.1, 2.5],
           [6.5, 3.2, 5.1, 2. ],
           [6.4, 2.7, 5.3, 1.9],
           [6.8, 3. , 5.5, 2.1],
           [5.7, 2.5, 5. , 2. ],
           [5.8, 2.8, 5.1, 2.4],
           [6.4, 3.2, 5.3, 2.3],
           [6.5, 3. , 5.5, 1.8],
           [7.7, 3.8, 6.7, 2.2],
           [7.7, 2.6, 6.9, 2.3],
           [6. , 2.2, 5. , 1.5],
           [6.9, 3.2, 5.7, 2.3],
           [5.6, 2.8, 4.9, 2. ],
           [7.7, 2.8, 6.7, 2. ],
           [6.3, 2.7, 4.9, 1.8],
           [6.7, 3.3, 5.7, 2.1],
           [7.2, 3.2, 6. , 1.8],
           [6.2, 2.8, 4.8, 1.8],
           [6.1, 3. , 4.9, 1.8],
           [6.4, 2.8, 5.6, 2.1],
           [7.2, 3. , 5.8, 1.6],
           [7.4, 2.8, 6.1, 1.9],
           [7.9, 3.8, 6.4, 2. ],
           [6.4, 2.8, 5.6, 2.2],
           [6.3, 2.8, 5.1, 1.5],
           [6.1, 2.6, 5.6, 1.4],
           [7.7, 3. , 6.1, 2.3],
           [6.3, 3.4, 5.6, 2.4],
           [6.4, 3.1, 5.5, 1.8],
           [6. , 3. , 4.8, 1.8],
           [6.9, 3.1, 5.4, 2.1],
           [6.7, 3.1, 5.6, 2.4],
           [6.9, 3.1, 5.1, 2.3],
           [5.8, 2.7, 5.1, 1.9],
           [6.8, 3.2, 5.9, 2.3],
           [6.7, 3.3, 5.7, 2.5],
           [6.7, 3. , 5.2, 2.3],
           [6.3, 2.5, 5. , 1.9],
           [6.5, 3. , 5.2, 2. ],
           [6.2, 3.4, 5.4, 2.3],
           [5.9, 3. , 5.1, 1.8]])
    

      

    x1=x[:,0]
    x1
    
    
    array([5.1, 4.9, 4.7, 4.6, 5. , 5.4, 4.6, 5. , 4.4, 4.9, 5.4, 4.8, 4.8,
           4.3, 5.8, 5.7, 5.4, 5.1, 5.7, 5.1, 5.4, 5.1, 4.6, 5.1, 4.8, 5. ,
           5. , 5.2, 5.2, 4.7, 4.8, 5.4, 5.2, 5.5, 4.9, 5. , 5.5, 4.9, 4.4,
           5.1, 5. , 4.5, 4.4, 5. , 5.1, 4.8, 5.1, 4.6, 5.3, 5. , 7. , 6.4,
           6.9, 5.5, 6.5, 5.7, 6.3, 4.9, 6.6, 5.2, 5. , 5.9, 6. , 6.1, 5.6,
           6.7, 5.6, 5.8, 6.2, 5.6, 5.9, 6.1, 6.3, 6.1, 6.4, 6.6, 6.8, 6.7,
           6. , 5.7, 5.5, 5.5, 5.8, 6. , 5.4, 6. , 6.7, 6.3, 5.6, 5.5, 5.5,
           6.1, 5.8, 5. , 5.6, 5.7, 5.7, 6.2, 5.1, 5.7, 6.3, 5.8, 7.1, 6.3,
           6.5, 7.6, 4.9, 7.3, 6.7, 7.2, 6.5, 6.4, 6.8, 5.7, 5.8, 6.4, 6.5,
           7.7, 7.7, 6. , 6.9, 5.6, 7.7, 6.3, 6.7, 7.2, 6.2, 6.1, 6.4, 7.2,
           7.4, 7.9, 6.4, 6.3, 6.1, 7.7, 6.3, 6.4, 6. , 6.9, 6.7, 6.9, 5.8,
           6.8, 6.7, 6.7, 6.3, 6.5, 6.2, 5.9])
    

      

    from sklearn.cluster import KMeans
    est=KMeans(n_clusters=3)
    est.fit(x)
    est.cluster_centers_
    y=est.predict(x)
    y
    
    
    
    array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
           1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
           1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2,
           2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 2, 2, 2,
           2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 1])
    

      

    import matplotlib.pyplot as plt
    plt.scatter(x[:,0],x[:,1],c=y,cmap='rainbow')
    plt.show()
    

      

    est1=KMeans(n_clusters=4)
    x1=x[:,0].reshape(-1,1)
    est1.fit(x1)
    y=est1.labels_
    plt.scatter(x1,x1)
    plt.show()
    

      

    est1=KMeans(n_clusters=4)
    x1=x[:,0]
    est=KMeans(n_clusters=4)
    est.fit(x)
    
    
    
    KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,
        n_clusters=4, n_init=10, n_jobs=1, precompute_distances='auto',
        random_state=None, tol=0.0001, verbose=0)
    

      

    est1=KMeans(n_clusters=4)
    x1=x[:,0].reshape(-1,1)
    x1
    
    
    
    array([[5.1],
           [4.9],
           [4.7],
           [4.6],
           [5. ],
           [5.4],
           [4.6],
           [5. ],
           [4.4],
           [4.9],
           [5.4],
           [4.8],
           [4.8],
           [4.3],
           [5.8],
           [5.7],
           [5.4],
           [5.1],
           [5.7],
           [5.1],
           [5.4],
           [5.1],
           [4.6],
           [5.1],
           [4.8],
           [5. ],
           [5. ],
           [5.2],
           [5.2],
           [4.7],
           [4.8],
           [5.4],
           [5.2],
           [5.5],
           [4.9],
           [5. ],
           [5.5],
           [4.9],
           [4.4],
           [5.1],
           [5. ],
           [4.5],
           [4.4],
           [5. ],
           [5.1],
           [4.8],
           [5.1],
           [4.6],
           [5.3],
           [5. ],
           [7. ],
           [6.4],
           [6.9],
           [5.5],
           [6.5],
           [5.7],
           [6.3],
           [4.9],
           [6.6],
           [5.2],
           [5. ],
           [5.9],
           [6. ],
           [6.1],
           [5.6],
           [6.7],
           [5.6],
           [5.8],
           [6.2],
           [5.6],
           [5.9],
           [6.1],
           [6.3],
           [6.1],
           [6.4],
           [6.6],
           [6.8],
           [6.7],
           [6. ],
           [5.7],
           [5.5],
           [5.5],
           [5.8],
           [6. ],
           [5.4],
           [6. ],
           [6.7],
           [6.3],
           [5.6],
           [5.5],
           [5.5],
           [6.1],
           [5.8],
           [5. ],
           [5.6],
           [5.7],
           [5.7],
           [6.2],
           [5.1],
           [5.7],
           [6.3],
           [5.8],
           [7.1],
           [6.3],
           [6.5],
           [7.6],
           [4.9],
           [7.3],
           [6.7],
           [7.2],
           [6.5],
           [6.4],
           [6.8],
           [5.7],
           [5.8],
           [6.4],
           [6.5],
           [7.7],
           [7.7],
           [6. ],
           [6.9],
           [5.6],
           [7.7],
           [6.3],
           [6.7],
           [7.2],
           [6.2],
           [6.1],
           [6.4],
           [7.2],
           [7.4],
           [7.9],
           [6.4],
           [6.3],
           [6.1],
           [7.7],
           [6.3],
           [6.4],
           [6. ],
           [6.9],
           [6.7],
           [6.9],
           [5.8],
           [6.8],
           [6.7],
           [6.7],
           [6.3],
           [6.5],
           [6.2],
           [5.9]])
    

      

    est1=KMeans(n_clusters=4)
    x1=x[:,0].reshape(-1,1)
    est1=KMeans(n_clusters=4)
    est1.fit(x1)
    est1.labels_
    
    
    
    array([1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1,
           1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
           1, 1, 1, 1, 1, 1, 2, 3, 3, 0, 3, 0, 3, 1, 3, 1, 1, 0, 0, 0, 0, 3,
           0, 0, 3, 0, 0, 0, 3, 0, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3,
           0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 0, 3, 0, 2, 3, 3, 2, 1, 2, 3, 2,
           3, 3, 3, 0, 0, 3, 3, 2, 2, 0, 3, 0, 2, 3, 3, 2, 3, 0, 3, 2, 2, 2,
           3, 3, 0, 2, 3, 3, 0, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 0])
    

      

    1)设定好K的大小,随机选取K个点作为初始中心点;
      (2)计算每个点到这K个中心点的距离大小,选取最近的中心点,划分到以该中心点为中心的集群中去;
      (3)重新计算K个新集群的中心点;
      (4)如果中心点保持不变,则结束K-Means过程。否则,重复进行(2)、(3)步;
    

      

    复制代码
    import numpy as np
    x = np.random.randint(1,50,[20,1])
    y = np.zeros(20)
    k = 3
    #1) 选取数据空间中的K个对象作为初始中心,每个对象代表一个聚类中心;
    def initcen(x,k):
        return x[:k]
    #2) 对于样本中的数据对象,根据它们与这些聚类中心的欧氏距离,按距离最近的准则将它们分到距离它们最近的聚类中心(最相似)所对应的类;
    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]):
            y[i] = nearest(kc,x[i])
            return y
    
    #3) 更新聚类中心:将每个类别中所有对象所对应的均值作为该类别的聚类中心,计算目标函数的值;
    
    def kcmean(x,y,kc,k):
        l = list(kc)
        flag = False
        for c in range(k):
            m = np.where(y ==0)
            n = np.mean(x[m])
            if l[c] != n:
                l[c] = n
                flag = True
                print(l,flag)
        return (np.array(l),flag)
    #4) 判断聚类中心和目标函数的值是否发生改变,若不变,则输出结果,若改变,则返回2)
    kc = initcen(x,k)
    
    flag = True
    print(x,y,kc,flag)
    while flag:
        y = xclassify(x,y,kc)
        kc,flag = kcmean(x,y,kc,k)
    print(y,kc)
    复制代码
    

      

  • 相关阅读:
    Swift Optional
    cocoapods 配置
    winform窗体全屏
    SQLiteDatabase的使用
    探索Gallery和ImageSwitcher布局
    常用布局参考
    增加动画的效果
    AlertDialog的写法
    自定义Toast
    适配器的经典写法
  • 原文地址:https://www.cnblogs.com/cc013/p/9911295.html
Copyright © 2011-2022 走看看