集体智慧编程 Programming Collective Intelligence 书中代码程序研究
2013-06-26 11:11
756 查看
集体智慧编程 Programming Collective Intelligence 书中代码程序研究
本人最近在学习《集体智慧编程》,英文名称为《Programming Collective Intelligence》。机器学习入门强烈推荐!本书以机器学习和计算统计为主题背景,专门讲述如何挖掘和分析Web上的数据和资源,如何分析用户体验、市场营销,个人品味等诸多信息,并得出有用的结论。主要内容包括,协作过滤技术(实现关联产品推荐功能)、集群数据分析(在大规模数据集中挖掘相似的数据子集)、搜索引擎核心技术(爬虫、索引、查询引擎、PageRank算法等)、搜索海量信息并进行分析统计得出结论的优化算法、贝叶斯过滤技术(垃圾邮件过滤、文本过滤)、用决策树技术实现预测和决策建模功能,社交网络的信息匹配技术、机器学习和人工智能应用等。与《数据挖掘-实用机器学习技术》相比更偏重应用和例子,结合例子学习这些机器学习的理论会更容易些。
书中的例子都用代码。本人在看的过程中运行了其中的大部分代码,发现有些问题,运行结果有问题,花了些时间去改了下,贴些可能的问题供大家参考。免得遇到同样的问题。
其中的程序,使用的是Python编写,建议使用Python 2.X,不然像print,reload等要改很多。我使用的是Python2.7,IDE用的UliPad,编码为UTF-8。书我看的是中文版
另外从书中提供的网址下载的数据集,不知什么编码。我直接读取的时候,有问题,主要是第五章schedule.txt、第七章decision_tree_example.txt。我的方法是,打开这些文件,复制内容到一个新的文件中,并改成程序需要的名称即可。
今天看到第七章,决策树建模了,就先分享第七章前面的程序遇到的问题吧。
第五章,优化
1、执行优化函数(学生宿舍问题)
使用遗传算法进行优化时,s=optimization.geneticoptimize(dorm.domain,dorm.dormcost)
报错,提示optimization中geneticoptimization的主循环中
箭头指向的红框中有错误,这是因为geneticoptimize中的变异操作函数mutate有疏漏导致的。其中判断语句if和elif并不能覆盖所有的条件,可能会返回None。例如random.random()>=0.5并且vec[i]>=domain[i][1]时,就会返回空。
要彻底解决它,需要修改变异操作函数。为了省事,我的解决办法是在调用的时候判断下,如果是None,则不添加到胜出者数组中。即上图中下面红框所示,添加个判断条件,如果非空,才添加到胜出者中。
2、绘制网络 一节,图像不能显示问题
drawnetwork函数中,最后调用img.show()显示图片,但是我的不知道什么问题,不能正常显示,所以我将这句替换成img.save('socialnetwork.jpg','JPEG')
这样,就会在程序当前目录下生成图片socialnetwork.jpg,进行查看
而且运行函数时,需调用socialnetwork.drawnetwork(sol),不能直接运行drawnetwork(sol)
3、计算交叉线 一节,数值类型问题。crosscount函数中,计算den=(y4-y3)*(x2-x1)-(x4-x3)*(y2-y1)
利用例子中的代码,socialnetwork.crosscount(sol)的结果始终是0,但是画出图像来,有些明显有交叉的线。
原因是调用optimization中的优化函数,返回的可行解,其中值是整型的。
计算den时,默认den也是整型的,如果值在0~1直接时,得到的den就变成0了。接着运行下面的代码,
if den==0: continue ,则一直continue,计算的total值就不对了,所有画出的图形是有问题的。
解决办法,将den的计算结果乘以1.0,使之变成小数类型。
den=((y4-y3)*(x2-x1)-(x4-x3)*(y2-y1))*1.0 # 判断斜率是否相等
第七章,决策树建模
1、decision_tree_example.txt数据问题。书中的表7-1和程序,都是写有15条数据,而从作者提供的网址中http://kiwitobes.com/tree/decision_tree_example.txt中下载的数据则有16条,多的是第14条“slashdot UK no 21 None”。大家运行时注意。而且中文版表7-1中,第一列来源网站中“(直接)”,不应该翻译成中文啊,直接就是“(direct)”,程序中是没问题的。
2、其中my_data如果从文件中加载,那么第四列的整数,会读成字符串,如果不单独处理的话,运行时会有问题。我是在读取my_data文件后,加了下面的代码,将第四列字符串转换成整数
# 将第四列字符串转换成整数
for row in my_data:
row[3]=int(row[3])
如果读取的数据最后一列中,包含换行符'\n',那么再加一句变成
# 将第四列字符串转换成整数
for row in my_data:
row[3]=int(row[3])
row[4]=row[4].replace('\n','')
3、Zillow API 一节
Zillow是一个免费的Web服务,利用其提供的API获取房屋的详细信息及其评价值。例子中的开发者密钥是可以继续使用,呵呵,不用再申请了。但利用地址列表addresslist.txt中的数据,获取观测数据时,有些返回值是None,构建决策树时会出错。
解决方法有两个,第一是运行时,剔除掉housedata中的空数据。循环遍历housedata,如果是None则移掉。
第二是修改getpricelist函数,在其中li.append(data)前加一判断条件,即
def getpricelist():
l1=[]
for line in file(os.getcwd()+'/data/addresslist.txt'):
data=getaddressdata(line.strip(),'Cambridge,MA')
if data!=None:
l1.append(data)
return l1
相关文章推荐
- programming collective intelligence(集体智慧编程)第二章python3.x安装pydelicious
- 关于《programming collective intelligence》(集体智慧编程)的del.icio.us API无法访问
- 关于《programming collective intelligence》(集体智慧编程)的del.icio.us API无法访问
- 《programming.collective.intelligence》(集体智慧编程)读书笔记
- 集体智慧编程-皮尔逊相关系数代码理解
- 集体智慧编程-K均值聚类代码理解
- 集体编程智慧代码摘抄【第二章】
- 集体编程智慧(发现的一些代码问题)
- 集体智慧编程-分级聚类算法代码理解
- Programming Collective Intelligence笔记 - Document Filtering
- 基于visual c++之windows核心编程代码分析(65)实现程序自我复制
- ASP.NET程序中常用编程代码(二)
- 集体智慧编程笔记:物品推荐过程小结
- 人脸识别程序代码研究
- Programming Collective Intelligence
- 集体智慧编程——垃圾邮件过滤器(贝叶斯)-Python实现
- 集体智慧编程学习之分类系统
- iOS5编程--官方例子代码研究--6.MailComposer
- 集体智慧编程_推荐系统2
- 基于android手机的3G+GPS远程控制模型车工程-android手机编程7-伪视频控制远程手机端程序(代码篇)