使用Orange进行数据挖掘之聚类分析(2)------K-means

来源:互联网 发布:mh370 知乎 编辑:程序博客网 时间:2024/06/05 05:07

一、基本k均值算法

1 根据用户指定的参数K,首先选择K个初始化质心;

2 然后每个点指派到最近的质心,指派到一个质心的点形成一个簇。

3 更新每个簇的质心

4重复步骤2、3,直到簇不在发生变化。

伪代码描述如下:

选择K个点作为初始质心repeat    将每个质心指派到最近的质心,形成K个簇    重新计算每个簇的质心until 质心不在发生变化

二、Orange中K-means实例

下面的例子显示了该算法的计算过程:

import randomfrom matplotlib import pyplot as pltimport Orangedef plot_scatter(table, km, attx, atty, filename="kmeans-scatter", title=None):    #plot a data scatter plot with the position of centeroids    plt.rcParams.update({'font.size': 8, 'figure.figsize': [4,3]})    x = [float(d[attx]) for d in table]    y = [float(d[atty]) for d in table]    colors = ["c", "w", "b"]    cs = "".join([colors[c] for c in km.clusters])    plt.scatter(x, y, c=cs, s=10)        xc = [float(d[attx]) for d in km.centroids]    yc = [float(d[atty]) for d in km.centroids]    plt.scatter(xc, yc, marker="x", c="k", s=200)        plt.xlabel(attx)    plt.ylabel(atty)    if title:        plt.title(title)    plt.savefig("%s-%03d.png" % (filename, km.iteration))    plt.close()def in_callback(km):    print "Iteration: %d, changes: %d, score: %8.6f" % (km.iteration, km.nchanges, km.score)    plot_scatter(table, km, "petal width", "petal length", title="Iteration %d" % km.iteration)    table = Orange.data.Table("iris")random.seed(42)km = Orange.clustering.kmeans.Clustering(table, 3, minscorechange=0, maxiters=10, inner_callback=in_callback)

运行结果如下:

使用图形化的方式配置如下:

对Satterplot的配置如下:

Satterplot的图形化结果如下:


三、参考资料


 数据挖掘导论 http://book.douban.com/subject/5377669/
原创粉丝点击