前面的ML模型都是在本地运行计算的,此chapter介绍如何将模型应用在Web app上以获得实时学习、应用
这一章主要偏机器学习功能Web的简单开发,与算法关系不大。没有跳过反而收获不少。不得不佩服作者在构思’算法+系统‘时所作出的为读者充分考虑的思想
本章主要实现下列功能:(将情感分析学习器上线Web,使之能即时搜集新数据、学习新数据、更新学习器、做出预测。最后作者还提供了一种上传到公共Web空间的一种简便方式)
- Saving the current state of a trained machine learning model
- Using databases for data storage
- Developing a web application using the popular Flask web framework
- Deploying a machine learning application to a public web server
Serializing fitted scikit-learn estimators
这里应用的是 sentiment analysis 中的out_of_core.py中训练的线上模型为例,关于这个学习模型主要是一个one_line的学习模式,就是所有数据不在本地内存中。
即时学习的方法
fit 是全部学习所有的数据,而estimator的part_fit(X_new)方法可以在原来的学习器基础上学习新数据,更新新性能。
序列化
序列化将本地变量(如estimator)存储为二进制pkl文件,当大型的estimator需要在网络空间使用时直接dump出pkl,这一过程的速度回很快。(想想上章节中本地memory学习器学习完需要40min,而on_line训练完成也需要3min,这放在Web服务器上是不可能的,所以序列化是必要的)
import pickle
import os
dest = os.path.join('movieclassifier', 'pkl_objects')
if not os.path.exists(dest):
os.makedirs(dest)
# 为了方便,将停用词也序列化
pickle.dump(stop,open(os.path.join(dest, 'stopwords.pkl'),'wb'),protocol=4)
pickle.dump(clf,open(os.path.join(dest, 'classifier.pkl'), 'wb'),protocol=4)
数据库
作者用的是Sqlite,emmmmmm一言难尽啊
Sqlite ,对就是Django初始化使用的轻量级数据库,不需要额外的配置接口什么的,可以像访问一个文件一样地访问他。。。 多么厉害友好!
所以,我决定换掉它,用Mysql
至于为啥,习惯吧… 作者的初衷是好的,因为这样免去了学习新数据库的成本和连接耽误的风险,作者面向的对象是没有Web开发经验的人,所以这一点是值得肯定的。
Flask框架
Why Flask??作者是这样回答的:
Flask is also known as a microframework, which means that its core is kept lean
and simple but can be easily extended with other libraries. Although the learning
curve of the lightweight Flask API is not nearly as steep as those of other popular
Python web frameworks, such as Django, I encourage you to take a look at the
official Flask documentation at http://flask.pocoo.org/docs/0.12/ to learn more about
its functionality.
哦,你说Flask比Django简单,好吧那就用Flask吧!
控制层
本质上讲 Flask也是用的MVC理论。
Flask最主要的就是app.py文件 相当于Django的views.py ,不同的是他还负责路径和数