首页 > 代码库 > 《集体智慧编程》学习笔记 第三章

《集体智慧编程》学习笔记 第三章

from math import sqrtfrom PIL import Image, ImageDrawimport randomdef readfile(filename):	with open(filename) as f:		lines = [line for line in f]	colnames = lines[0].strip().split(‘\t‘)[1:]	rownames = []	data = http://www.mamicode.com/[]"Iteration %d" % t)		bestmatches = [[] for i in range(k)]		for j in range(len(rows)):#j代表博客数			row = rows[j]			bestmatche = 0 #假设与第一个聚点最近			for i in range(k):#每一个博客与四个聚点计算,求最近聚点				d = diatance(clusters[i], row)				if d < diatance(clusters[bestmatche], row):					bestmatche = i			bestmatches[bestmatche].append(j) #bestmatches里面四个list,第一个list就存与第一个聚点相近的博客(比如第一个博客为0)		if bestmatches == lastmatches:  #这个if 跟for t in range(100)是匹配的			break  #如果迭代得到结果与上次一样,则整个过程结束		lastmatches = bestmatches	  #把所有中心点移到其所有成员的平均位置处		for i in range(k):			avgs = [0.0] * len(rows[0])#产生和单词数一样多的0.0 0.0			if len(bestmatches[i]) > 0:#如果某个聚点中有许多相近的点				for rowid in bestmatches[i]:#把每个聚点中的博客所属行数取出来					for m in range(len(rows[rowid])): #把每列						avgs[m] += rows[rowid][m]#把每行相同列的单词数加在一起				for j in range(len(avgs)):					avgs[j] /= len(bestmatches[i]) #某个单词的总数/聚点中博客的个数 算出这个聚点中各种单词的平均数				clusters[i] = avgs #新聚点是[[],[],[],[]]的 内部的[]就是不同单词的平均个数	return bestmatchesblognames, words, data = http://www.mamicode.com/readfile(‘blogdata1.txt‘)>

  

《集体智慧编程》学习笔记 第三章