最近在看《机器学习实战》的时候萌生了一个想法,本身去网上爬一些数据按照书上的方法处理一下,不只能够加深本身对书本的理解,顺便还能够在github拉拉人气。恰好在看决策树这一章,书里面的理论和例子让我以为这个理论和选择对象简直不能再贴切,看完长相看学历,看完学历看收入。若是能够从婚恋网站上爬取女性的数据信息,手动给她们打标签,并根据这些数据构建决策树,不就能够找出本身的择偶模式了吗!github项目:huatian-funny,下面就详细的阐释一下。git
以前在世纪佳缘上爬取过相似的数据,整体的感受是上面的用户数据要么基本不填要么一看就很假,周围的一些老司机建议能够在花田网上看下,数据质量确实高不少,惟一的缺点就是上面的数据不给爬,搜索用户的API须要登陆,并且只显示三十多个用户的信息。恰好我须要的数据也不多,就把搜索条件划分的很细,每次取到的数据很小,但最终聚集的数量仍是至关可观的,最终获取了位置在上海年龄22-27共计2000个左右的用户数据。填写好spider.py中的用户名和密码,直接运行这个文件就能够爬取数据,由于数据量不大,很快就能够运行完毕,存储在mongodb中的数据以下:github
爬虫用到的工具是requests,流程上也很简单,先发送登录请求获取cookie,而后调用搜索API获取数据,拿到的数据是json格式,不须要任何转换直接存储mongodb,很是的方便,惟一想吐槽的就是花田搜索API接口居然用的是POST方式,太没有专业水准了。稍微提一下如何用request获取cookie,用Session构建一个session对象,用这个对象发送登录请求后,以后的请求都会自动带上登录返回的cookie,使用起来很是的简单。mongodb
1 from requests import Session 2 3 session = Session() 4 session.post(login_url, data=post_data, headers=POST_HEADERS) 5 response = session.get(search_url, headers=GET_HEADERS)
因为决策树属于监督学习,须要一个给定的标签,所以须要本身根据用户的外貌、年龄、学历等多个维度的判断给出一个标签,最后生成的决策树在必定程度上就能够反映本身的择偶标准。针对女性的标签很简单粗暴,只有满意和不满意两种,有兴趣的同窗能够按照真实的状况设置更多的标签,例如优秀、通常、备胎、不合格等等。由于外貌是选择对象过程当中一个必不可少的要素,把相貌量化相当重要,由于没有相关的工具根据头像进行评分,只能我的主观进行量化,采用了当下很是流行的十分制。json
为了增长打标签的效率,专门写了一个桌面窗口,运行mark.py便可,运行结果以下。(tkinter是一个坑,调代码的时间够我把整个数据集看好几遍了,不过真的用起来的时候仍是挺有意思的)cookie
备注:由于刚开始看的不少用户只有头像、年龄、身高、工资、学历这五个信息,因此整个过程当中只参考了这五个维度进行评价,下面的决策树也是根据这五个维度进行处理。session
机器学习中,决策树是一个预测模型,它表明的是对象属性与对象值之间的一种映射关系。树中每一个节点表示某个对象,而每一个分叉路径则表明的某个可能的属性值,而每一个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。决策树仅有单一输出,若欲有复数输出,能够创建独立的决策树以处理不一样输出。从数据产生决策树的机器学习技术叫作决策树学习, 通俗点说就是决策树,说白了,这是一种依托于分类、训练上的预测树,根据已知预测、归类将来。机器学习
理论方面我能够参考《机器学习实战》第三章或者这篇博客,很浅显易懂的解释了具体的原理,我就不赘述了。ide
代码参考的是《机器学习实战》,针对现实本身作了一些优化调整,和原来的代码不是彻底相同,运行train.py就能够显示出结果,以下:工具
由于线很挤,调了好久只能拿到这个效果了。到这儿已经很清晰明了的阐明了主题,我就是一个外貌党,颜值高的pass,颜值低的忽略,不高不低的考虑的至关纠结。有兴趣的同窗能够本身试一试。post
PS1:其实不太想认可本身是一个外貌协会成员,人丑颜控注定孤独一辈子。
PS2:由于打标签的过程有些随意,因此有一部分不许确。
PS3:没有相亲的打算,不约。