集体智慧编程读书笔记 三 cont
来源:互联网 发布:电视盒子看电影软件 编辑:程序博客网 时间:2024/04/29 17:47
继续来看第三章, 下面是用图形显示树
首先下载 PIL, 这个库目前不支持 python 3, 下面地址上有高手改过的版本可以用:
http://www.lfd.uci.edu/~gohlke/pythonlibs/#pil
显示画图不是本书重点, 就不解释了, 就是教你怎么用PIL画图
列聚类
刚才的聚类我们发现了博客之间的相关度, 有什么样博客是类似的, 如果我们对转置后数据进行聚类呢?就是对列, 也是博客出现的单词进行聚类, 这样显示的结果就是单词的关联度, 同时反映博客的类型。
显示要把原来的数据转置, 这个很简单
def rotamatrix(data): rotadata = [] for i in range(len(data[0])): newrow = [data[j][i] for j in range(len(data))] rotadata.append(newrow) return rotadata
结果为:
需要注意的是这个时候 数据项是单词, 变量是博客, 单词多很多, 在聚类是无意义的结果也很多, 博客聚类更有意义
K 均值聚类
分级聚类我们看到, 算法复杂度太高, 计算太耗时,数据集大会很慢, 就像刚才我们进行单词聚类, 时间就很长,还有一个问题 树形结构不会真正将数据拆分成不同组(需要额外保存下这种关系)
K均值聚类的做法, 先预设K个目标点, 然后将数据集分类, 分配到这k个点上, 分配原则是离谁近就放到谁附近, 分完一次后, 调整一下, 计算k个聚类在一起的群的中心点, 利用新得出的中心点再次聚类,直到某一次, 聚类过程中结果不发生变化就停止,算法实现如下
def kcluster(rows, distance=pearson, k=4): ranges = [(min([row[i] for row in rows]), max([row[i] for row in rows])) for i in range(len(rows[0]))] clusters = [ [random.random * (ranges[i][1] - ranges[i][0]) + ranges[i][0]for i in range(len(rows[0]))]for j in range(k)] lastMatches = None for t in range(100): print('Iteration %d' % t) bestmatches = [[] for i in range(k)] for j in range(len(rows)): row = rows[j] bestmatch = 0 for i in range(k): d = distance(clusters[i], row) if d < distance(clusters[bestmatch], row): bestmatch = i bestmatches[bestmatch].append(j) if bestmatches == lastMatches: break lastMatches = bestmatches for i in range(k): avgs = [0.0] * len(rows[0]) length = len(bestmatches[i]) if length > 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] /= length clusters[i] = avgs return bestmatches
0 0
- 集体智慧编程读书笔记 三 cont
- 集体智慧编程 读书笔记 三
- 集体智慧编程 读书笔记 一
- 集体智慧编程 读书笔记 二
- 集体智慧编程第7章-读书笔记
- 《programming.collective.intelligence》(集体智慧编程)读书笔记
- 《集体智慧编程》读书笔记 3 - 神经网络
- 集体智慧编程--开始我的读书笔记
- 集体智慧编程读书笔记——第二章 提供推荐
- 集体智慧编程读书笔记(一)提供推荐
- 读书笔记:“集体智慧编程”之第二章:推荐算法
- 读书笔记:“集体智慧编程”之第七章:决策树
- 读书笔记---《集体智慧编程》第3章:发现群组
- [读书笔记]机器学习入门书籍-集体编程智慧
- 【集体智慧编程】【Python3】【读书笔记1】提供推荐
- [bj]集体智慧编程
- 集体编程智慧(1)
- 集体编程智慧(2)
- 关于mysql命令行方式打不开的问题
- S3C2440串口FIFO模式的中断机制和处理策略
- “冷”眼“旁”观二维码:解读二维码的“伪”盈利模式
- 【0-1背包】-HDU-2546-饭卡
- phoneGap在iOS下运行原理简单分析
- 集体智慧编程读书笔记 三 cont
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- TOJ-1959. Oil Deposits
- 为什么要使用PreparedStatement
- Linux下常见命令
- Hbase 启动报Region server exiting
- Web压力测试工具Siege介绍
- Oracle常用数据字典
- iOS app支付宝接口调用的一点总结(补充支付宝SDK&Demo下载地址)