在当今数据科学应用需求日益增长的背景下,机器学习算法能够为企业带来显著的效益,尤其是在能够提前提供信息的情况下。将机器学习算法集成到生产系统中是一个技术挑战。机器学习算法主要分为两个阶段:训练阶段和推理阶段。训练阶段是机器学习算法使用历史数据进行开发的过程,而推理阶段则是使用机器学习方法对新数据进行预测的阶段,其结果具有不确定性。
本项目旨在通过Django API、RPC或WebSockets使机器学习算法易于访问。这种方法可以创建一个服务器,用于处理查询并将它们路由到机器学习算法。使用这种方法,可以满足机器学习生产系统的所有标准。
让创建并初始化开发环境。首先,安装所需的包,然后创建一个目录来存储Django项目,并复制到该目录中。接着,创建一个Django项目,这将包含正在开发的所有代码,包括数据库配置和应用设置。Django中的“项目”对应于正在开发的应用程序,而Django将项目中的一个包称为“应用”。主包将是API。
        python3 -m venv env
        source env/bin/activate
        pip install django djangorestframework sklearn numpy
        mkdir DjangoMLAPI
        cd DjangoMLAPI
        django-admin startproject api
    
现在,将在项目中创建一个“应用”。这将把机器学习放在API后面。将这个应用命名为soundpredictor。
        cd api
        python manage.py startapp soundpredictor
    
添加了一个名为/soundpredictor的文件夹,里面有许多文件。
为了开始项目,打开一个Jupyter笔记本。运行命令创建一个目录来存储笔记本文件。
        pip3 install jupyter notebook
        ipython kernel install --user --name=venv
        mkdir research
        cd research
        jupyter notebook
    
这个预测分析是为了训练模型,以预测动物是否是鸭子,基于其声音。将使用虚构的数据来训练模型。算法将根据动物产生的声音来判断它是否是鸭子。
        data = [
            ['Honk', 1],
            ['Woof', 0],
            ['ruff', 0],
            ['bowwow', 0],
            ['cackle', 1],
            ['moo', 0],
            ['meow', 0],
            ['clang', 1],
            ['buzz', 0],
            ['quack', 0],
            ['pika', 0]
        ]
        X = []
        y = []
        for i in data:
            X.append( i[0] )
            y.append( i[1] )
    
接下来,将特征转换为列表,拟合一个向量化器,并转换特征。
        from sklearn.feature_extraction.text import CountVectorizer
        vectorize = CountVectorizer()
        X_vectorized = vectorize.fit_transform(X)
    
最后一步是训练一个线性回归模型。
        from sklearn.linear_model import LinearRegression
        import numpy as np
        regressor = LinearRegression()
        regressor.fit(X_vectorized, y)
    
需要在一些示例上测试它,以检查模型是否正确工作。
        test_feature = vectorizer.transform(['Honk'])
        prediction = regressor.predict(test_feature)
        print(prediction)
        test_feature = vectorizer.transform(['bowwow'])
        prediction = regressor.predict(test_feature)
        print(prediction)
        test_feature = vectorizer.transform(['meoww'])
        prediction = regressor.predict(test_feature)
        print(prediction)
    
模型看起来完美。将模型打包成字节流,以便将其存储在应用程序中。
        import pickle
        pick = {
            'vectorize': vectorize,
            'regressor': regressor
        }
        pickle.dump( pick, open( 'models' + ".p", "wb" ) )
    
        python manage.py runserver
        curl -X GET http://127.0.0.1:8000/classify/?sound=buzz
        curl -X GET http://127.0.0.1:8000/classify/?sound=quack