python 机器学习&restful服务化

  • 最近一直想用机器学习做一个模型,然后暴露服务,提供restful接口给外部调用,这样也能体现出模型的价值,所以今天稍微捣鼓了一下,之前用过java的weka去做过,但是发现那个好麻烦,而且对很多算法的支持不够强大,社区好像也没太多人,所以今天转向python去做,python机器学习社区还是比较火的,我用的环境是anaconda,在jupyter下面去写的这个例子,前面主要是模型的训练,
    后面用了python的flask框架做了一个restful接口,这样直接可以通过接口访问,直接通过json进行交互,屏蔽了平台的差异性。
import sys
print('Python: {}'.format(sys.version))
# scipy
import scipy
print('scipy: {}'.format(scipy.__version__))
# numpy
import numpy
print('numpy: {}'.format(numpy.__version__))
# matplotlib
import matplotlib
print('matplotlib: {}'.format(matplotlib.__version__))
# pandas
import pandas
print('pandas: {}'.format(pandas.__version__))
# scikit-learn
import sklearn
print('sklearn: {}'.format(sklearn.__version__))
# Load libraries
import pandas
from pandas.tools.plotting import scatter_matrix
import matplotlib.pyplot as plt
from sklearn import model_selection
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
from flask import Flask

def study():
# Load dataset
    url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
    names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
    dataset = pandas.read_csv(url, names=names)
# Split-out validation dataset
    array = dataset.values
    X = array[:,0:4]
    Y = array[:,4]
    validation_size = 0.20
    seed = 7
    X_train, X_validation, Y_train, Y_validation = model_selection.train_test_split(X, Y, test_size=validation_size, random_state=seed)
# Test options and evaluation metric
    seed = 7
    scoring = 'accuracy'
# Spot Check Algorithms
    models = []
    models.append(('LR', LogisticRegression()))
    models.append(('LDA', LinearDiscriminantAnalysis()))
    models.append(('KNN', KNeighborsClassifier()))
    models.append(('CART', DecisionTreeClassifier()))
    models.append(('NB', GaussianNB()))
    models.append(('SVM', SVC()))
# evaluate each model in turn
    results = []
    names = []
    result = ""
    for name, model in models:
        
        kfold = model_selection.KFold(n_splits=10, random_state=seed)
        cv_results = model_selection.cross_val_score(model, X_train, Y_train, cv=kfold, scoring=scoring)
        results.append(cv_results)
        names.append(name)
        msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
        result = result + msg
    return result

app = Flask(__name__)

@app.route('/')
def index():
    return study();

if __name__ == '__main__':
    app.run(host='127.0.0.1',port=3366)
  • 运行结果

Python: 3.6.1 |Anaconda 4.4.0 (x86_64)| (default, May 11 2017, 13:04:09) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)]
scipy: 0.19.0
numpy: 1.12.1
matplotlib: 2.0.2
pandas: 0.20.1
sklearn: 0.18.1

* Running on [http://127.0.0.1:3366/](http://127.0.0.1:3366/) (Press CTRL+C to quit)

  • 调用rest api结果
image.png
  • 感想与计划
    之前一直觉得做一件事很难,的确,做好一件事并不简单,但是要是去入门什么的确实十分的简单,上面贴的那么多代码,我并不知道每个函数的具体用法,但是我可以推测出每个函数大致是在干什么,每个参数大致代表什么意思,因为我对机器学习这个流程很了解,所以我知道每一部分的代码在做什么,
    url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
    names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
    dataset = pandas.read_csv(url, names=names)
# Split-out validation dataset
    array = dataset.values
    X = array[:,0:4]
    Y = array[:,4]

比如说上面的url表示的就是数据集的链接,names就是表示数据集的feature和target,很显然前面四个是这个数据集的feature也就是有4个特征,最后的class应该就是target(结论)。
那么接下来就是通过pandas去读取这个文件,当然pandas我也不知道是什么,但是我能猜出来大致是要通过这个url下载这个文件,而且保存为csv格式,然后给这些记录加上名称。
然后array就是取这个数据集里的值,X就是取0=<X<4列的数据,Y也就是取第4列的数据,作为target,在我们去做一些未知的事情的时候,有时类比和猜想能让我们快速的入门,即使有时候我们猜想是错误的,但是我们毕竟在这个过程中注入了自己的想法,这个和看到不懂的不会的直接去google差距还是很大的,后者也能解决问题,但是有一种依赖,前者或许有时候不能快速的解决问题,但是却能够培养我们一种良好的思维方式。记得之前在实习的时候,老大分给我一个任务,对于当时的我来说真的亚历山大,但是在我的努力下还是做出来了,虽然做的不够好有很多问题,但是经过后来的慢慢优化,一样可以做的很好,我们都是在成长,都是在学习,解决问题的方式很重要,有没有自己的想法也很重要,这也是我最近工作所感触最深的。

接下来计划把机器学习的库和工具熟练使用,这个过程就是去多做多看的过程,下面推荐一下官方文档,scikit-learn 这个就是python机器学习算法的库的教程,里面有大量的实例
http://scikit-learn.org/stable/documentation.html
既然用python去处理数据,有时候去找数据之前的关系的时候画图是最直观的http://matplotlib.org/api/pyplot_api.html ,patplotlib是python广泛使用的画图库,很好用。
https://docs.scipy.org/doc/numpy-dev/user/quickstart.html ,python处理数据的时候,涉及到一些科学计算,numpy是python比较有名的科学计算库,主要是数组的一些处理。
http://pandas.pydata.org/pandas-docs/stable/10min.html# pandas也是对于数据的处理,依赖于numpy,但是提供了一些更高级的操作,提供了丰富的时间序列功能,数据对齐, groupby, merge and join 方法,在金融领域得到广泛的应用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容