Python实现k-means算法
2014-10-14 21:52
309 查看
k-means算法描述如下:
输入:期望得到的簇的数目k,n个对象的数据D
输出:k个簇的集合
方法:
(1)选择k个对象作为初始的簇的质心
(2)repeat
(3)计算对象与各个簇的质心的距离,将对象划分到距离其最近的簇
(4)重新计算每个新簇的均值
(5)Until簇的质心不再变化
Python代码:
假设:给定如下要进行聚类的对象:
{2,4,10,12,3,20,30,11,25},k = 2
初学数据挖掘,很多原理都不懂,写个算法练练手。
输入:期望得到的簇的数目k,n个对象的数据D
输出:k个簇的集合
方法:
(1)选择k个对象作为初始的簇的质心
(2)repeat
(3)计算对象与各个簇的质心的距离,将对象划分到距离其最近的簇
(4)重新计算每个新簇的均值
(5)Until簇的质心不再变化
Python代码:
假设:给定如下要进行聚类的对象:
{2,4,10,12,3,20,30,11,25},k = 2
# coding=utf-8 ''' 计算两点之间的距离 ''' def distance(n1, n2): d = n1 - n2 if d < 0: d = -d return d ''' 计算一串数的中点 ''' def center(nums): sum = 0 for item in nums: sum = sum + item return sum / len(nums) ''' k-means算法 ''' def main(): n = 2 nums = [2, 4, 10, 12, 3, 20, 30, 11, 25] c1 = nums[0] #类1的中心点,初始为第一个数 c2 = nums[1] #类2的中心点,初始为第二个数 new_c1 = c1-1 #一次聚类后类1新的中心点 new_c2 = c2 - 1 #一次聚类后类2新的中心点 g1 = [] #类1 g2 = [] #类2 isFirst = True step = 1 #k-means核心算法 while not c1 == new_c1 or not c2 == new_c2: print "----------------------------------------------" print "step %d" % step step = step + 1 #不是第一次运行,使用新的中心点 if not isFirst: c1 = new_c1 c2 = new_c2 isFirst = False #通过距离划分族 for item in nums : d1 = distance(item, new_c1) d2 = distance(item, new_c2) if d1 <= d2 : g1.append(item) else: g2.append(item) #计算新类的中点 new_c1 = center(g1) new_c2 = center(g2) g1.sort() g2.sort() print "group 1 is", g1 print "group 2 is", g2 #清空g1, g2 del g1[:] del g2[:] print "----------------------------------------------" #开始运行 main()
初学数据挖掘,很多原理都不懂,写个算法练练手。
相关文章推荐
- Python 实现K-means算法
- 文本聚类算法之K-means算法的python实现
- 【Python】k-means算法实现
- python实现的k-means算法(原创)
- K-Means算法-Python实现
- K-Means算法的Python实现和Matlab实现
- Python实现k-means算法
- 图片聚类——k-means算法的python实现
- k-means算法的Python实现
- Python实现k-means算法
- 机器学习Chapter3-(聚类分析)Python实现K-Means算法
- k-means算法的Python实现
- 聚类算法——python实现k-means算法
- 数据挖掘:K-Means算法的原理与Python实现
- 详解K-means算法在Python中的实现
- K-means算法 Python实现
- K-means算法的Python实现
- 数据挖掘之k-means算法的Python实现
- 数据挖掘基础:K-Means算法的原理与Python实现
- k-means算法python实现