MLモデルの作成とRESTful APIとしてのサービス


私は、データサイエンスと機械学習に集中して、私のトレーニングの一部として地元の会社で私のインターンシップを始めました.最小の機械学習の背景を持っている誰かであるので、私は必要な出力に到着するために多くの研究と読書を必要としました、しかし、それはそれの価値がありました.

このポストでは、私はPythonを使用して虹彩分類モデルを作成し、フラスコRESTful APIを介してそれを提供するために行った手順を共有します.また、APIに接続するシンプルなPHPインターフェイスも作成しました.

モデルクリエーション🤖


機械学習において,あるパターンを認識するためのデータセットを用いてモデルを訓練する.Pythonのオープンソースマシン学習ライブラリSci-Kit Learn , 教師付きおよび教師なし学習のためのモデル訓練それを使用するように簡単ですし、多くのチュートリアルを始めるために.
まず、PIPを使ってSCIキットライブラリをインストールします.
pip install -U scikit-learn
インストールが完了すると、ファイルを作成しますmodel.py SCI Kit Learningが既に作ったIRISデータセットを使用することもできます.
from sklearn import datasets
iris = datasets.load_iris()
注:独自のデータセットを使用することができますが、それは前処理され、SCIキットのためにフォーマットを理解し、できるだけ効率的にモデルを訓練することを学ぶ.
次に、データセットをデータとターゲットに分離します.データは花弁と中隔の幅とセンチメートルの長さで構成され、ターゲット、またはラベルは、予測するクラスです.虹彩の分類のために、目標はVersaicolor、BidelicaとSetosaから成ります.
iris_data = iris.data
iris_target = iris.target
モデルを訓練する前に、残りの半分は実際のモデルトレーニングに使用され、他方はモデルを検証するために使用されます.
これはtrain_test_split :
from sklearn.model_selection import train_test_split
iris_data_train, iris_data_test, iris_target_train, iris_target_test = train_test_split(iris_data, iris_target, test_size = .5)
The test_size パラメータ指定したデータセットのサイズを指定します.
今、我々はモデルの構築を開始することができます.このモデルに使用できる多くの分類アルゴリズムがありますが、正確なスコアがはるかに高いので、k -最近の隣人に解決しました.
from sklearn import neighbors
classifier = neighbors.KNeighborsClassifier()
このことから、モデルのトレーニングを始めることができます.
classifier.fit(iris_data_train, iris_target_train)
そして、我々はそれを持っている!我々は訓練された虹彩分類モデルを持っている.我々は、使用してモデルの精度レベルを印刷することができますaccuracy_score :
from sklearn.metrics import accuracy_score
predict_iris = classifier.predict(iris_data_test)
print(accuracy_score(iris_target_test, predict_iris))
上記から、モデルは、97 %の正確さスコアを持ちます!すごい!

を作成する⚙️


フラスコAPIを作成する前に、モデルはPythonライブラリPickle . Pythonのコードを「pickle化」することで、簡単にネットワーク経由で送られるか、ディスクに保存されるように、バイトストリームに変換されます."unpickling "は逆で、Pythonファイルを元の状態に変換します.

pickleはPIPを使用してインストールできます:
pip install pickle-mixin
虹彩の分類モデルは「pickle化」することができます.
import pickle
pickle.dump(classifier, open("iris_model", "wb"))
これはiris_model ファイル.あなたがそれを開くしようとすると、それは解読不可能な文字が表示されます.
今我々は我々のモデルをピックアップしている、我々は今、フラスコAPIを開始することができます!
他のPythonライブラリと同様に、フラスコもインストールします.
pip install flask
その後、私たちの主なアプリケーションファイルを作成app.py . 内部では、フラスコAPIに必要なライブラリをインポートします.
from flask import Flask, jsonify
from flask_restful import reqparse, abort, Api, Resource

app = Flask(__name__)
api = Api(app)
IRISの分類モデルをロードし、「unpickled」します.
import pickle
loaded_model = pickle.load(open("iris_model", 'rb'))
あとでフロントエンドインターフェイスを作成するときには、ユーザー入力をアイリス分類フラスコAPIに送信する方法が必要です.そのためには、URLにパラメータを作成し、そこにユーザ入力を渡します.我々が必要とする入力は花弁と隔壁幅と長さです、そして、この情報から、モデルは我々がどのようなアイリス花を参照しているかを予測します.
パラメータを次のコードを使用して作成します.
parser = reqparse.RequestParser()
parser.add_argument('slength')
parser.add_argument('swidth')
parser.add_argument('plength')
parser.add_argument('pwidth')
クエリが設定されると、与えられた入力に基づいて虹彩型を予測するためにモデルを呼び出す必要があります.次にクラスと呼ばれるクラスを作りますrequestIris URLパラメータ値を受け取り、予測のためのモデルに挿入します.予測は整数形式になるので、0はsetosa、1はvesicolor、2はDeflicaです.また、返されるデータがJSON形式でなければならないことに注意してください.
完全なコードは以下の通りです.
class requestIris(Resource):
    def get(self):
        args = parser.parse_args()
        slength= args['slength']
        swidth = args["swidth"]
        plength = args["plength"]
        pwidth = args["pwidth"]
        prediction = (loaded_model.predict([[slength, swidth, plength, pwidth]])).tolist()
        if(prediction[0] == 0):
            type="setosa"
        elif(prediction[0] == 1):
            type="versicolor"
        else:
            type="virginica"
        serve_model = {"Iris Type":type}
        print(serve_model)
        return jsonify(serve_model)
次に、リソースをAPIに追加し、リソースのルートを作成します.
api.add_resource(requestIris, '/classify')
最後に、少なくとも、我々のフラスコアプリケーションを実行するコードを追加します.
if __name__ == '__main__':
   app.run()
ハーレイ!我々は今、私たちの虹彩の分類APIを持っている!
APIはローカルに実行するか、Herokuに公開することができます.ここで私が出版しました.
https://iris-classification-model.herokuapp.com/
次のポストでは、APIのアプリケーションを示すために、PHPフロントエンドインターフェースについて書きます.ステイ!