zoukankan      html  css  js  c++  java
  • 聚类-kmeans

    一、作用

    给定一些离散点,然后将这些离散点进行分类,这也叫做聚类。例如,将以下离散点分为两类,中心点也就是绿点和橙色的点也叫做簇心。

    二、步骤

    • 选取k个初始质心(作为初始cluster);
    • repeat:对每个样本点,计算得到距其最近的质心,将其类别标为该质心所对应的cluster;    重新计算k个cluser对应的质心;
    • 质心的计算方法,将同簇的点,计算它们的平均坐标值作为新的质心 
    • until 质心不再发生变化

     由上可见,kmeans的缺点是聚类的好坏和质心起始位置的选取有关

    三、CODE(SKLEARN)

     1 from numpy import *
     2 from sklearn.cluster import KMeans
     3 from sklearn.model_selection import train_test_split
     4 import matplotlib.pyplot as plt
     5 
     6 # create data
     7 n_data = array([[random.randint(100, 1000), random.randint(100, 1000)] for i in range(0, 1000)])
     8 label_n = array([0 for i in range(0, 1000)])
     9 p_data = array([[-1 * random.randint(100, 1000), -1 * random.randint(100, 1000)] for i in range(0, 1000)])
    10 label_p = array([1 for i in range(0, 1000)])
    11 data_all = concatenate((n_data, p_data), axis=0)
    12 label_all = concatenate((label_n, label_p), axis=0)
    13 
    14 X_train, X_test, y_train, y_test = train_test_split(data_all, label_all)
    15 
    16 km = KMeans(n_clusters=2)  # 初始化
    17 km.fit(X_train, y_train)
    18 predict = km.predict(X_test)
    19 
    20 
    21 def accuracy(pred, real):
    22     score = 0
    23     for i in range(0, len(predict)):
    24         if predict[i] == y_test[i]:
    25             score += 1
    26     return score * 1.0 / len(predict) * 1.0
    27 
    28 
    29 center = km.cluster_centers_
    30 
    31 fig = plt.figure()
    32 ax = fig.add_subplot(111)
    33 
    34 
    35 ax.scatter(data_all[:, 0], data_all[:, 1], s=1)
    36 ax.scatter(center[0, 0], center[0, 1])
    37 ax.scatter(center[1, 0], center[1, 1])
    38 plt.show()

    四、时间复杂度

    时间复杂度为 O(nkl)

    • n为离散点个数
    • k为簇心个数
    • l为迭代次数
    谢谢!
  • 相关阅读:
    ubuntu网络配置相关知识(转载)
    git 冲突解决(转载)
    redmine后台运行命令
    CentOS配置网卡,重启网络显示:Device does not seem to be present(转载)
    解决Xshell和vim中文乱码(转载)
    REDHAT6.2配置yum源(64位)(转载)
    Doki Doki Literature Club ZOJ
    CONTINUE...? ZOJ
    Magic Points ZOJ
    Cash Machine (POJ 1276)(多重背包——二进制优化)
  • 原文地址:https://www.cnblogs.com/ylxn/p/11732976.html
Copyright © 2011-2022 走看看