聚类算法之K均值算法(k-means)的Python实现

Python013

聚类算法之K均值算法(k-means)的Python实现,第1张

K-means算法是硬聚类算法,是典型的基于原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。K-means算法以欧式距离作为相似度测度,它是求对应某一初始聚类中心向量V最优分类,使得评价指标J最小。算法采用误差平方和准则函数作为聚类准则函数。

通常,人们根据样本间的某种距离或者相似性来定义聚类,即把相似的(或距离近的)样本聚为同一类,而把不相似的(或距离远的)样本归在其他类。

所谓聚类问题,就是给定一个元素集合D,其中每个元素具有n个可观察属性,使用某种算法将D划分成k个子集,要求每个子集内部的元素之间相异度尽可能低,而不同子集的元素相异度尽可能高。其中每个子集叫做一个簇。

k-means算法是一种很常见的聚类算法,它的基本思想是:通过迭代寻找k个聚类的一种划分方案,使得用这k个聚类的均值来代表相应各类样本时所得的总体误差最小。

看起来还不错

分析一个公司的客户分类,这样可以对不同的客户使用不同的商业策略,或是电子商务中分析商品相似度,归类商品,从而可以使用一些不同的销售策略,等等。

# -*- coding: utf-8 -*-

from sklearn.cluster import KMeans

from sklearn.externals import joblib

import numpy

final = open('c:/test/final.dat' , 'r')

data = [line.strip().split('\t') for line in final]

feature = [[float(x) for x in row[3:]] for row in data]

#调用kmeans类

clf = KMeans(n_clusters=9)

s = clf.fit(feature)

print s

#9个中心

print clf.cluster_centers_

#每个样本所属的簇

print clf.labels_

#用来评估簇的个数是否合适,距离越小说明簇分的越好,选取临界点的簇个数

print clf.inertia_

#进行预测

print clf.predict(feature)

#保存模型

joblib.dump(clf , 'c:/km.pkl')

#载入保存的模型

clf = joblib.load('c:/km.pkl')

'''

#用来评估簇的个数是否合适,距离越小说明簇分的越好,选取临界点的簇个数

for i in range(5,30,1):

    clf = KMeans(n_clusters=i)

    s = clf.fit(feature)

    print i , clf.inertia_

'''