您的位置:首页 > 编程语言 > Python开发

使用Orange中的聚类算法KMeans

2013-01-16 21:35 731 查看
KMeans是orange中提供的一个用来聚类的类,它是标准k-means的实现。

初始化:

 __init__(data=None, centroids=3, maxiters=None, minscorechange=None, stopchanges=0, nstart=1,initialization=kmeans_init_random, distance=orange.ExamplesDistanceConstructor_Euclidean, scoring=score_distance_to_centroids, inner_callback
= None, outer_callback = None, initialize_only = False)

参数说明:

 Data:输入的数据

centroids:即k的值

maxiters:最大迭代次数,停止聚类的条件之一。如果不想让迭代次数过多,可指定此参数

minscorechange: 停止聚类的条件之一,如果不指定,则不会计算2次迭代之间的评分

stopchanges:停止聚类的条件之一nstart:指定计算次数,不是迭代次数

distance:使用的距离,默认为欧氏距离

inner_callback:如果制定,则每次迭代后调用此函数,可以通过此函数了解迭代过程中的计算细节

outer_callback:如果nstart>1,每次计算后调用此函数,可以通过此函数了解计算过程中的计算细节

代码:

import orange
import orngClustering

def incallback(km):
print "Iteration: %d, changes: %d, score: %.4f" % (km.iteration,km.nchanges,km.score)

start = 1

def outcallback(km):
kmc = km.clusters[:]
res = {}
for c in kmc:
if res.get(c)!=None:
res[c] += 1
else:
res[c]=1
global start
print "Times = ",start
print "clusters: ",res,"\n"
start += 1

data = orange.ExampleTable("iris")
km = orngClustering.KMeans(data,4,minscorechange=0, nstart=3,\
inner_callback=incallback,outer_callback=outcallback )

print "data num: ",len(km.clusters)

kmc = km.clusters[:]
res = {}
for c in kmc:
if res.get(c)!=None:
res[c] += 1
else:
res[c]=1

print "final clusters: ",res,"\n"


 

 

 说明:

定义了inner_callback和outer_callback=outcallback两个函数,用于显示每次迭代和每轮计算时的样本信息k设置为4,总共计算3轮。最终的聚类结果以最优的一次结果(评分最低的)输出最后是显示统计信息,统计聚类结果

在测试过程中发现,Orange能够处理较小规模的数据,当数据量较大时(样本数量大于25k时),会引发异常,导致无法计算出结果。故orange不适合较大规模数据处理。orange可视化功能据说+貌似很强大,但是在互联网上几乎没有找到相关资料,附带的帮助文档也没有相关说明。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  K-means Orange Python 聚类