zoukankan      html  css  js  c++  java
  • 10.25作业

    import numpy as np
    x = np.random.randint(1,100,[20,1])
    y = np.zeros(20)
    k = 3
    
     #选取数据空间中的K个对象作为初始中心,每个对象代表一个聚类中心;
    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 y
    
    
    # 更新聚类中心:将每个类别中所有对象所对应的均值作为该类别的聚类中心,计算目标函数的值;
    def 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 = 3
    kc = initcenter(x,k)
    flag = True
    print(x,y,kc,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 plt
    plt.scatter(x,x,c=y,s=50,cmap="rainbow");
    plt.show()

    #鸢尾花花瓣长度数据做聚类并用散点图显示。
    import numpy as np
    from sklearn.datasets import load_iris    
    iris = 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 y
    
    def 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 = 3
    kc = initcenter(x,k)
    
    flag = True
    print(x,y,kc,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 plt
    plt.scatter(x,x,c=y,s=50,cmap="Paired");
    plt.show()

    #用sklearn.cluster.KMeans,鸢尾花花瓣长度数据做聚类并用散点图显示
    import matplotlib.pyplot as plt
    import numpy as np
    from sklearn.datasets import load_iris
    
    iris = load_iris()
    X = iris.data
    X
    
    from sklearn.cluster import KMeans
    
    est = 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()

  • 相关阅读:
    wex5 实战 框架拓展之2 事件派发与data刷新
    wex5 实战 框架拓展之1 公共data组件(Data)
    wex5 实战 HeidiSQL 导入Excel数据
    wex5 实战 手指触屏插件 hammer的集成与优劣
    wex5 实战 登陆帐号更换与用户id一致性
    wex5 实战 用户点评与提交设计技巧
    wex5 实战 省市县三级联动与地址薄同步
    wex5 实战 wex5与js的组件关系与执行顺序(父子与先后)
    wex5 实战 单页模式下的多页面数据同步
    [BZOJ]4237: 稻草人
  • 原文地址:https://www.cnblogs.com/Tlzlykc/p/9848884.html
Copyright © 2011-2022 走看看