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が認知症患者の自立した生活にどのように役立つか

ブログ    

推薦する

実用的なヒント | 人工知能に変身するために習得すべき 8 つのニューラル ネットワーク

なぜ機械学習が必要なのでしょうか?機械学習は、人間が直接プログラムできない複雑な問題を解決できるため...

我が国はすでに「人工知能」でトップを走っています!なぜ米国は5日後にようやく強く否定し始めたのか?

[[429481]]最近、元国防総省の最高ソフトウェア責任者は、人工知能に関して、米国は今後15年...

余分な指などのバグを解決できる「人間のような」AI画像作成モデルをMetaがリリース

米国現地時間6月14日火曜日、Facebookの親会社Metaは、研究者に新しい「人間のような」人工...

人工知能開発の重要な要素と気候変動への影響

人工知能は世界的な流行語となり、ほぼすべての企業のデジタル変革計画に不可欠な要素となっています。 A...

AIはGoogleの変革のツールとなり得るか?

[[252713]]画像出典: Visual China 2018年の中国インターネット業界を一言...

ショック! Google がショウジョウバエの脳全体を自動で再構築: 40 兆ピクセルの画像が初めて公開されました。

昨日、Google はハワード・ヒューズ医学研究所 (HHMI) およびケンブリッジ大学と共同で、シ...

安定したビデオ拡散がここにあります、コードウェイトはオンラインです

AI描画で有名なStability AIが、ついにAI生成動画の分野に参入した。今週の火曜日、Sta...

Adobe と機械学習が出会う: 新しい Photoshop が複数の新しい AI 機能を導入

Adobe Max 2021 イベントは予定通り開催されます!このイベントの最も興味深い特徴の 1 ...

データ構造とアルゴリズム: 奇数偶数による配列のソート II

[[429517]]簡単なシミュレーション問題、ぜひ挑戦してみてください!配列を偶数/奇数でソート...

ジェネレーティブ AI とクラウド ネイティブは期待が膨らんでいる時期にあります。これらは企業の変革よりも重要ですか?

今年、業界内では「AI 記者会見でない記者会見はない」というジョークが飛び交っています。まさにその通...

GPT ストアは来週開始され、OpenAI アプリケーションの爆発的な増加が目前に迫っています。最も完全なGPTビルダーユーザーガイドはここにあります

これから起こることは、やがて起こるでしょう! OpenAIが開発者会議で正式発表した「GPTストア」...

...

ML 向け勾配降下法アルゴリズム 機械学習初心者向け勾配降下法アルゴリズム

[[197951]]基本概念このセクションでは、勾配降下法をより一般化するために、機械学習アルゴリズ...

AIが小売業の顧客体験に革命を起こす

人工知能はすでに多くの業界に大きな影響を与えています。調査会社IDCの調査によると、2019年の人工...

...