尽管机器学习从分类上而言只是人工智能(也就是常说的AI)的分支之一,但其本身也是一个相当巨大的命题。在未来的一段时间里,我将花时间在专栏写一些我比较熟悉的机器学习相关的概念和算法,最主要的目的是为了梳理自己的知识体系,也是希望和大家分享学习的历程和感悟,以达到交流的目的。
这两年大数据火了,机器学习、神经网络、数据挖掘、强化学习等等这些名词都火了,然而我常常在想,把这些名词挂在嘴边的我们,究竟能否在这个领域飞速发展的情况下,清楚地了解到自己说的每一个名词——谁是谁的分支,哪个和哪个又是同等关系或是没有关系的——在名词爆炸的状态下,想学什么,了解其基础概念是必不可少的。
假如我们有一组天气数据,是来自全世界不同国家和地区的每日天气,内容包括最高温度、最低温度、平均湿度、风速之类的相关数据,例如数据的一部分是这样的:
城市 | 最高温度 | 最低温度 | 相对湿度 | 某时刻风速 |
---|---|---|---|---|
A市 | 36℃ | 28℃ | 58% | 16.7km/h |
B市 | 28℃ | 17℃ | 86% | / |
C市 | 34℃ | 29℃ | 39% | 20.4km/h |
在这组数据中,我们将称A市、B市、C市等市以及其情况的总和称为数据集(data set)。表格中的每一行,也就是某城市和它的情况被称为一个样例(sample/instance)。表格中的每一列(不包括城市),例如最高温度、最低温度,被称为特征(feature/attribute),而每一列中的具体数值,例如36℃ 、28℃,被称为属性值(attribute value)。数据中也可能会有缺失数据(missing data),例如B市的某时刻风速,我们会将它视作缺失数据。
如何登录新浪微博是令许多数据新手(包括我)头疼的大问题。由于新浪的反爬虫策略,网上的教程往往撑不过几个月,查阅到的资料在半年前或是一年前——而它们早就无法使用了,在你想开始爬虫的时候被活生生卡在了第一步。
简单而言,我使用的方法是通过 Selenium 模拟浏览器的行为,直接在浏览器中输入用户名和密码并登录,然后直接从浏览器中获取 Cookies。虽然听起来十分简单(实际上也十分简单),但是确实是十分有效的方式。只要一个网站能通过浏览器登陆,我们就可以简单改造这个程序来登录并获得想要的资料。
Selenium 是一个项目的名称,都与浏览器和网页测试相关。主要的工具也就是今天我们所要使用的,是WebDriver,是一个浏览器自动化工具。它为很多不同的语言提供了库,包括 Python、Java、Ruby 等。本文中我选择使用 Python 来进行操作,当然你也可以使用你熟悉的语言来进行操作。
在 Python中使用 Selenium 只需要通过pip
安装 Selenium 提供的 Python 库。
1 | pip3 install selenium # 如果你使用 Python 2 ,请使用 pip install selenium |
仅仅安装 Selenium 本身是不够的,你同时还需要安装 Driver 。你可以将 Driver 理解为浏览器本身的『驱动』,在程序中使用 Driver 就相当于你打开了一个浏览器做了些什么事情。
由于使用网页版微信,机器人往往不能够永远地在线。如果无法一直在线,也就失去了自动回复程序的意义。在此,我们使用两种方式来监控机器人程序:
如果需要定时发送消息,使用sleep
方式来等待计时会阻塞线程,因此我们会使用threading
来进行多线程的操作。把一个线程分配给自动给特定人发送微信消息。
在进行多线程操作之前,我们先定义一个自动发送消息的方法以备调用:
1 | def send_online_notification(name): |
wxpy的ensure_one()
方法会确认返回的内容仅有一个值,如果返回的列表超过一个值(或是没有返回),它会进行报错。我们在这里寻找name
相关的好友,并且保证只有一个这样的好友。如果你需要给多个好友发送消息,我建议再使用一个循环来遍历好友列表。
本篇的诞生来自于一朋友制作的表情机器人。当时觉得十分有趣,也希望加入到群聊机器人中,因此就向他讨要了源代码并制作了表情功能。在此我也再次感谢吴毅凡同学的协助!
由于需要读取网页内容,本文中由于我个人偏好使用xpath来选择网页中元素,使用了lxml包,安装的话需要:
1 | pip install lxml |
如果你想要使用BeautifulSoup来处理网页,请安装:
1 | pip install beautifulsoup4 |
图灵机器人是一个中文语境下的对话机器人,免费的机器人每天有5000次调用的,如果放在群聊中是完全够用的(如果只有@的消息才使用机器人回复的)。图灵机器人也包括一些简单的能力,比如讲笑话、故事大全、成语接龙、新闻资讯等,我们将介绍如何简单调用图灵机器人接口。
在过去的几个月中,由于在新生群中回答问题费时费力,同时又有许多重复而又有固定答案的回答,我受到一些知乎文章的启发,维护了一个基于itchat的群聊机器人。从刚开始接入图灵机器人时只会尬聊的机器人,之后又加入了api.ai的按照消息内容自动回复,而后再加入了回复表情功能,使得机器人变得越来越有趣。
现在,由于itchat的更新和被wxpy一些更有趣的功能所吸引,我计划将这个机器人分步重写,并将完整的机器人构建步骤展现给大家。这是我第一次做这样的事,有诸多不足之处,也希望多多谅解和指正。