Flask を使用して機械学習モデルを簡単にデプロイするにはどうすればよいですか?

Flask を使用して機械学習モデルを簡単にデプロイするにはどうすればよいですか?

[51CTO.com クイック翻訳] データ サイエンティスト/機械学習エンジニアが Scikit-Learn、TensorFlow、Keras、または PyTorch を使用して機械学習モデルを開発する場合、最終的な目標はそれを本番環境にデプロイすることです。機械学習プロジェクトに取り組むとき、探索的データ分析 (EDA)、特徴量エンジニアリング、ハイパーパラメータ調整に重点を置きすぎて、モデルの予測から実際の価値を抽出するという主な目標を忘れてしまうことがよくあります。

機械学習モデルをデプロイする、またはモデルを本番環境にデプロイするということは、モデルをエンドユーザーまたはシステムが利用できるようにすることを意味します。ただし、機械学習モデルの導入には複雑さが伴います。この記事の目的は、Flask API を使用してトレーニング済みの機械学習モデルを本番環境にデプロイする方法を学ぶことです。

線形回帰を使用して、金利と最初の 2 か月の売上を使用して 3 か月目の売上を予測します。

線形回帰とは何ですか?

線形回帰モデルの目的は、1 つ以上の特徴 (独立変数) と連続ターゲット変数 (従属変数) 間の関係を見つけることです。特徴が 1 つしかない場合は単変量線形回帰と呼ばれ、特徴が複数ある場合は多変量線形回帰と呼ばれます。

線形回帰の仮定

線形回帰モデルは次の式で表すことができます。

  • Yは予測値である
  • θ₀は部分項です。
  • θ₁,…,θnはモデルパラメータである
  • x1、x2、…、xnは固有値です。

図1. 線形回帰図

Flask を使用する理由は何ですか?

  • 使いやすいです。
  • 組み込みの開発サーバーおよびデバッガー。
  • 統合されたユニットテストのサポート。
  • REST リクエストディスパッチを活用します。
  • 広範なドキュメント。

プロジェクト構造

このプロジェクトは 4 つの部分から構成されます。

  1. model.py – 最初の 2 か月の売上に基づいて 3 か月目の売上を予測する機械学習モデルのコードが含まれています。
  2. app.py – これには、GUI または API 呼び出しを通じて売上の詳細を受け取り、モデルに基づいて予測値を計算して返す Flask API が含まれています。
  3. request.py — request モジュールを使用して、app.py で定義された API を呼び出し、戻り値を表示します。
  4. HTML/CSS – ユーザーが売上の詳細を入力し、3 か月目の予測売上を表示できるようにする HTML テンプレートと CSS スタイルが含まれています。

図2. 機械学習モデルを展開するためのパイプライン

環境とツール

  1. サイキットラーン
  2. パンダ
  3. ナンピー
  4. フラスコ

コードはどこですか?

コードから始めましょう。 Github 上のプロジェクト全体は、こちらからご覧いただけます。

まず、ユーザーが値を入力できるように HTML を使用してフロントエンドを構築します。ユーザーは、金利、初月の売上、2 か月目の売上の 3 つのフィールドに入力する必要があります。

  1. <!DOCTYPE html>
  2. <html>
  3. <ヘッド>
  4. <メタ文字セット= "UTF-8" >
  5. <title>デプロイメントチュートリアル 1</title>
  6. <link href= 'https://fonts.googleapis.com/css?family=Pacifico' rel= 'スタイルシート' type= 'text/css' >
  7. <link href= 'https://fonts.googleapis.com/css?family=Arimo' rel= 'スタイルシート' type= 'text/css' >
  8. <link href= 'https://fonts.googleapis.com/css?family=Hind:300' rel= 'スタイルシート' type= 'text/css' >
  9. <link href= 'https://fonts.googleapis.com/css?family=Open+Sans+Condensed:300' rel= 'スタイルシート' type= 'text/css' >
  10. <link rel= "スタイルシート" href= "{{ url_for('static', filename='css/style.css') }}" >
  11.    
  12. </head>
  13.  
  14. <body style= "背景: #000;" >
  15. <div クラス = "ログイン" >
  16. <h1>売上予測</h1>
  17.  
  18. <! -- ML へのクエリを受信するためのメイン入力 -->  
  19. <フォームアクション= "{{ url_for('predict')}}"メソッド = "post" >
  20. <入力タイプ= "テキスト"   name = "rate" placeholder = "rate" required = "必須" />
  21. <入力タイプ= "テキスト"   name = "初月の売上" placeholder = "初月の売上" required = "必須" />
  22. <入力タイプ= "テキスト"   name = "2 か月目の売上" placeholder = "2 か月目の売上" required = "必須" />
  23. <button type= "submit" class= "btn btn-primary btn-block btn-large" > 3 か売上を予測する</button>
  24. </フォーム>
  25.  
  26. <br>
  27. <br>
  28. {{予測テキスト}}
  29.  
  30. </div>
  31. </本文>
  32. </html>

次に、CSS を使用して、入力ボタン、ログイン ボタン、背景のスタイルを構築しました。

  1. urlをインポートします(https://fonts.googleapis.com/css?family=Open+Sans )。
  2.      
  3. html { 幅: 100%; 高さ: 100%; オーバーフロー: 非表示; }
  4.      
  5. 体 {
  6. 幅: 100%;
  7. 高さ:100%;
  8. フォントファミリ: 'Helvetica' ;
  9. 背景: #000;
  10. 色: #fff;
  11. フォントサイズ: 24px;
  12. テキスト配置:中央;
  13. 文字間隔:1.4px;
  14.      
  15. }
  16. 。ログイン {
  17. 位置:絶対;
  18. 上位:40%
  19. :50%;
  20. マージン: -150px 0 0 -150px;
  21. 幅:400ピクセル;
  22. 高さ:400px;
  23. }
  24.      
  25. .login h1 { 色: #fff; テキストシャドウ: 0 0 10px rgba(0,0,0,0.3); 文字間隔: 1px; テキスト配置: center; }
  26.      
  27. 入力{
  28. 幅: 100%;
  29. 下マージン: 10px;
  30. 背景: rgba(0,0,0,0.3);
  31. 境界線: なし;
  32. アウトライン: なし;
  33. パディング: 10px;
  34. フォントサイズ: 13px;
  35. 色: #fff;
  36. テキストシャドウ: 1px 1px 1px rgba(0,0,0,0.3);
  37. 境界線: 1px実線rgba(0,0,0,0.3);
  38. 境界線の半径: 4px;
  39. ボックスシャドウ: インセット 0 -5px 45px rgba(100,100,100,0.2), 0 1px 1px rgba(255,255,255,0.2);
  40. -webkit-transition: box-shadow .5s のイージー;
  41. -moz-transition: box-shadow .5s のイーズ;
  42. -o-transition: box-shadow .5s のイーズ;
  43. -ms-transition: ボックスシャドウ .5s の緩和;
  44. transition: box-shadow .5s のイーズ;
  45. }
  46. GitHubホストされている rawstyle.css を表示
  47. >

このプロジェクト用に、金利、最初の月の売上、2 か月目の売上、3 か月目の売上の 4 つの列を持つカスタム売上データセットを作成しました。  

レート

最初の月の売上

2か月目の売上

3か月目の売上

2

500

300

4

300

650

4つ

600

200

400

450

320

650

セブン

600

250

350

550

200

700

GitHub でホストされている生のsales.csv を表示

それでは、3 か月目の売上を予測する機械学習モデルを構築しましょう。まず、Pandas を使用して欠損値を処理してみましょう。 1 つ以上の項目に情報が提供されない場合、データは失われます。値が指定されていない場合は、Interest Rate 列にゼロを入力し、First Month Sales 列に列の平均値を入力します。機械学習アルゴリズムとして線形回帰を使用しています。

シリアル化/デシリアル化

簡単に言うと、シリアル化とは、Python オブジェクトをディスク上に書き込み (オブジェクトはどこにでも転送可能)、後で Python スクリプトによって逆シリアル化 (読み戻す) する方法です。

図3. シリアル化とデシリアル化

私は、ピクルリングを使用して、Python オブジェクトの形式のこのモデルを文字ストリームに変換します。この文字ストリームには、別の Python スクリプトを使用してオブジェクトを再構築するために必要なすべての情報が含まれているという考え方です。

  1. numpyをnpとしてインポートする
  2. matplotlib.pyplot をpltとしてインポートします。
  3. pandasをpdとしてインポートする
  4. 輸入ピクルス
  5.      
  6. データセット = pd.read_csv( 'sales.csv' )
  7.      
  8. データセット[ 'rate' ].fillna(0, inplace= True )
  9.      
  10. データセット[ 'sales_in_first_month' ].fillna(データセット[ 'sales_in_first_month' ].mean(), inplace= True )
  11.      
  12. X = データセット.iloc[:, :3]
  13.      
  14. def convert_to_int(単語):
  15. word_dict = { '1' :1, '2' :2, '3' :3, '4' :4, '5' :5, '6' :6, '7' :7, '8' :8,
  16. 「9」 :9、 「10」 :10、 「11」 :11、 「12」 :12、 「0」 :0、「0: 0」}
  17. word_dict[単語]を返す
  18.      
  19. X[ 'rate' ] = X[ 'rate' ].apply(lambda x : convert_to_int(x))
  20.      
  21. y = データセット.iloc[:, -1]
  22.      
  23. sklearn.linear_modelからLinearRegression をインポートします
  24. 回帰子 = LinearRegression()
  25.      
  26. 回帰器.fit(X, y)
  27.      
  28. pickle.dump(回帰器、 open ( 'model.pkl' 'wb' ))
  29.      
  30. モデル = pickle.load ( open ( 'model.pkl' 'rb' ))
  31. 印刷(モデル.予測([[4, 300, 500]]))
  32. GitHubホストされている rawmodel.py を表示

次の部分は、GUI を通じて売上の詳細を受け取り、モデルに基づいて予測売上を計算する API を構築することです。これを実行するには、ピクルされたモデルを Python オブジェクトに逆シリアル化します。メインページを設定するには、index.html を使用します。フォームの値が POST を使用して /predict に送信されると、予測された売上が取得されます。

結果を表示するには、/results に別の POST リクエストを送信するだけです。 JSON 入力を受け取り、トレーニング済みのモデルを使用して予測を行い、API エンドポイントを通じてアクセスできる JSON 形式で予測を返します。

  1. numpyをnpとしてインポートする
  2. FlaskからFlask、request、jsonify、render_template をインポートします
  3. 輸入ピクルス
  4.  
  5. アプリ = Flask(__name__)
  6. モデル = pickle.load ( open ( 'model.pkl' 'rb' ))
  7.  
  8. @app.route( '/' )
  9. デフホーム():
  10. render_template( 'index.html' )を返します
  11.  
  12. @app.route( '/predict' , メソッド=[ 'POST' ])
  13. def 予測():
  14.  
  15. int_features = [ int (x)xrequest.form.values ​​()内に格納]
  16. final_features = [np.array(int_features)]
  17. 予測 = model.predict(final_features)
  18.  
  19. 出力= round(予測[0], 2)
  20.  
  21. return render_template( 'index.html' , prediction_text= '売上高は $ {} になるはずです' .format( output ))
  22.  
  23. @app.route( '/results' , メソッド=[ 'POST' ])
  24. def 結果():
  25.  
  26. データ = request.get_json(強制= True )
  27. 予測 = model.predict([np.array(list( data.values ()))])
  28.  
  29. 出力= 予測[0]
  30. jsonify(出力)を返す
  31.  
  32. __name__ == "__main__"の場合:
  33. app.run(デバッグ= True )
  34. GitHubホストされている rawapp.py を表示

最後に、request モジュールを使用して、app.py で定義された APP を呼び出します。 3 か月目の返品売上が表示されます。

  1. 輸入リクエスト 
  2. url = 'http://localhost:5000/結果'    
  3. r = リクエスト.post(url,json={ 'レート' :5, '最初の月の売上' :200, '2番目の月の売上' :400})  
  4. 印刷(r.json())  
  5. GitHubホストされている rawrequest.py を表示

結果

このコマンドを使用して、Web アプリケーションを実行します。

  1. $ pythonアプリ.py

図4

Web ブラウザで http://127.0.0.1:5000/ を開くと、以下に示すような GUI が表示されます。

図5. グラフィカルユーザーインターフェース

結論

この記事では、機械学習モデルをデプロイする非常に簡単な方法を説明しました。線形回帰を使用して、金利と最初の 2 か月の売上を使用して 3 か月目の売上を予測しました。この記事で学んだことを活用して、クールなモデルを構築し、それを本番環境にデプロイして、他の人がその結果を楽しめるようにすることができます。

原題: Flask を使用して機械学習モデルを簡単にデプロイする方法、著者: Abhinav Sagar

[51CTOによる翻訳。パートナーサイトに転載する場合は、元の翻訳者と出典を51CTO.comとして明記してください]

<<:  構築は簡単だが、維持は難しい! Googleの機械学習システムの苦い教訓

>>:  AIが認知症患者の自立した生活にどのように役立つか

ブログ    
ブログ    
ブログ    
ブログ    
ブログ    
ブログ    

推薦する

国内人材レポート:機械学習エンジニアの平均給与は3万元近くで、トップクラスのエンジニアは年間100万元を稼ぐこともできる

最近、BOSS直接採用キャリア科学実験室とBOSS直接採用研究所は、毎年恒例の大ヒット作「変異の時代...

科学者たちは、より信頼性の高い予測を達成するために人工知能が「近道」をすることを避ける方法を研究している。

新しいアプローチにより、機械学習モデルはタスクを学習する際により多くのデータに焦点を当てるようになり...

VRの悪夢にさよならしましょう! Meta Reality Labs は仮想世界の問題点を解決し、新しい VR の世界を再構築します

「世の中には2種類の人がいます。VRが世界を変えると考える人と、まだVRを試したことがない人です。」...

産業規模は500億に迫る。産業用ロボット業界は今後何をすべきか?

近年、ロボット技術は急速に発展しており、食品配送ロボットや掃除ロボットなど、さまざまなサービスロボッ...

未成年者の顔情報の処理には保護者の個別の同意が必要です

最高人民法院の楊万明副院長は、最高人民法院が十分な研究に基づいて顔情報に司法上の保護を与えるための「...

人工知能は親密な関係の「大きな殺し屋」

人工知能の存在は仕事や生活だけではなく、感情にも存在します。仕事の後で退屈を感じたら、たまごっちを飼...

Nvidia 3090が180億パラメータの大規模モデルに単独で挑む。今度は国内オープンソースプロジェクトが大暴れ

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

...

...

...

エッジAI: ディープラーニングをより効率的にする方法

人工知能 (AI) は今日の産業情勢を変えています。 エンタープライズ ソフトウェアから機械の自動化...

今回はホーキングの言うことを聞かなかった!人工知能が人間に取って代わる、これが科学が進む道だ

科学の分野では、人類の科学技術の発展のスピードは実に速く、人工知能と比較すると、すでに基本的に活用で...

自動運転について話しましょう

自動運転とは何ですか?自動運転とは、さまざまなセンサー、コンピュータービジョン、人工知能、機械学習な...

ChatGPT Civilization Simulator が再びオンラインになりました!クリックひとつで、火山噴火の日の古代都市ポンペイにタイムスリップ

GPT-4のアップデート機能により、AIを使って歴史をシミュレートすることは、単なる「テキストロール...