AIモデルを使ったウェブアプリケーション

  • JupyterノートブックでPythonライブラリを使用して機械学習モデルを学習する
  • 学習済み機械学習モデルをStreamlitウェブアプリに組み込む

このレッスンのアクティビティ:

機械学習モデルを扱う

Jupyter Notebooks、Python、Streamlitのもうひとつの大きな特徴は、機械学習モデルをトレーニングして予測を行う機能だ。 

人工知能の初心者であれば、このカリキュラムのAIレッスンを見て基本を学んでから、より高度なコーディングに飛び込むとよいだろう。Teachable Machineのようなユーザーフレンドリーな機械学習モデルプラットフォームを使ってモデルを作成し、それをPythonウェブアプリに組み込むことができます。 

Jupyterノートブックを使って人工知能やデータセットを扱った経験のある方には、次のステップとして最適です。 

このレッスンでは、Pythonの機械学習ライブラリと、Pythonを使って作成できるさまざまな機械学習モデルについて学びます。 

おさらいすると、機械学習モデルを作るには、主に3つの部分がある。 

データセット

学習アルゴリズムでパターンを見つける


予想だ!

データセットはモデルへの入力です。データセットには、テキスト、画像、サウンド、ポーズを含めることができます。ユニット2では、Jupyter Notebooksを使ってテキストデータと数値データを扱いました。このレッスンでは、引き続きスプレッドシートの形式でテキストデータを扱います。

パターンの発見とは、基本的にデータセットを使って機械学習モデルを構築することだ。Pythonには、データからAIモデルを構築するためのライブラリが多数含まれている。このカリキュラムでは、scikit-learnパッケージの関数の多くを使用する。scikit-learnが提供するライブラリに加えて、このウェブサイトには機械学習とモデル構築のプロセスに関する優れた情報がたくさん含まれています。より深く学ぶための素晴らしいリソースです!

モデルを作成したら、そのモデルを使って新しい情報に基づいて結果を予測することができる。繰り返しますが、Pythonにはこれを可能にするライブラリが用意されています。

データの前処理

データセットがモデルを構築するアルゴリズムに送られる前に、以下の処理が必要である。 前処理つまり、モデル構築アルゴリズムがデータセットを処理し、可能な限り正確なモデルを作成できるように「クリーニング」する必要がある。実際、機械学習モデルを作成する作業の大部分は、前処理にあります。データを注意深く見て、何が重要で、何を除外し、何をクリーンアップする必要があるかを決定する必要がある。

前処理には何が必要か?テキストベースのデータセットでは、以下のような処理が必要になる。

 

ヌル値

特に調査データの場合、データセットに空白値やNULL値が含まれることがある。ヌルデータのある行を削除することもある。

しかし、サンプル数が少ない場合は、それらを削除したくないかもしれません。もう1つの方法は、ヌル値を他の値で置き換えることです。それはゼロかもしれませんし、そのフィールドの他のすべての値の平均かもしれません。

アウトライアーズ

データには、他のデータとは大きく異なる1つか2つのサンプルが含まれていることがあります。これはモデルを歪める可能性があります。外れ値がモデルの作成に影響することは避けたいので、多くの場合、データセットから外れ値は除外されます。

例えば、サンプルの95%が10~30歳であるデータセットがあったとして、その中に50歳以上のランダムなサンプルがいくつかあったとします。サンプルの大部分は10~30歳のグループなので、それ以上の年齢グループのサンプルを除去することを検討できます。

標準化

大規模なデータセットでは、どのような特徴を表すかによって数値が異なることがよくある。例えば、年齢が0から70まであり、給与が0から500,000まであるとします!このようにスケールが大きく異なるので、一方の特徴量がモデルでより多くカウントされるかもしれません。

scikit-learnはStandardScalerを提供しており、平均が0、標準偏差が1になるように各特徴を更新します。

もう1つ考慮すべきことは、各クラスやラベルに対してバランスの取れたサンプル数です。データセットに含まれる各クラスの数がほぼ同じになるようにしたい。

エンコーディング

AIは数字が好きで、必ずしも言葉が好きなわけではない。scikit-learnはEncoder関数を提供しているので、テキストの値を簡単に数値に変換することができる。

例えば、活動レベルである。サンプル値はsedentary、light、moderate、highである。これらの回答は、0、1、2、3という値にエンコードすることができ、モデル構築アルゴリズムがより扱いやすくなります。

データの分割

データを前処理したら、トレーニングセットとテストセットに分ける必要がある。トレーニングセットは、モデルをトレーニングし作成するために使用します。次に、テストセットを使ってモデルをテストし、その結果を確認します。

標準的な分割方法(通常はトレーニング用に75%、テスト用に25%)があるが、好きなように分割できる。ここでも関数が用意されているので、すべて自動化される。 

モデルの作成

次のステップはモデルの作成だ。大きな決断を迫られるのは、どのアルゴリズムを使うか、ということだ。多くの異なる教師あり学習アルゴリズムがあり、どれを使えばいいのかわかりません。良いプロセスは、いくつかの異なるアルゴリズムを試してみて、どれが最も精度が高いかを確認することだ。 

最初のステップは、分類が必要かどうかを決めることだ。 分類アルゴリズムが必要か 回帰を決めることです。それは何を予測しようとしているかによる。 

分類アルゴリズムは、個別の対象やクラスを予測するために使われる。例えば、電子メールをスパムかスパムでないかに分類するのは、分類問題である。

回帰アルゴリズムは、連続的な範囲に沿った何かを予測するために使われる。1つの例は、ある人の給料を予測することです。予測は数値の範囲であり、出力はその範囲に沿った任意の値になります。 

ここでは、一般的なモデル作成アルゴリズムの種類をいくつかご紹介します。

ニューラルネットワーク

分類

  • デシジョンツリー
  • ランダムフォレスト 
  • K-最近傍
  • ナイーブ・ベイズ
  • ロジスティック回帰
  • サポートベクターマシン

回帰

  • 線形回帰
  • リッジ回帰
  • ラッソ回帰
  • 多項回帰
  • ベイズ線形回帰
  • サポート・ベクトル回帰

いくつかのアルゴリズムは、両方のタイプに分類されることに注意。例えば、決定木分類器と決定木回帰器がある。そして、サポート・ベクトル・マシンは分類のために働き、サポート・ベクトル回帰は回帰のために働く。 

では、どれを使うかはどうやって決めればいいのだろうか?他のデータ・サイエンティストがどのような状況でどのようなものを使っているのかをリサーチし、あなたのモデルに何が適しているかを確認する必要がある。また、自分のデータでいくつかの異なるアルゴリズムを試してみて、どれが最も精度が高いかを見つけるとよい。また、特定のアルゴリズムのパラメータを微調整して、より正確なモデルを返すかどうかを確認することもできます。 

scitkit-learnはこれらすべてのアルゴリズムに対応する関数を提供しているので、モデルを作成するのは簡単です。 

モデルの評価

モデルを最高のものにしたいのであれば、そのパフォーマンスを評価する必要があります。モデルを評価する際の2つの一般的な変数は、バイアスと分散です。 

バイアスは、モデルの予測値と正しい値との差である。 

分散は、異なるデータを使用した場合に予測値がどの程度変化するかを示す。 

バイアスと分散のバランスをうまくとりたい。

バイアスが高い→アンダーフィット。

アンダーフィットは、モデルが単純すぎて学習データのノイズを考慮できない場合に起こる。これは、データが十分でない場合、特徴(列)が十分でない場合、データ中のノイズが多すぎる場合に起こります。モデルが訓練データとテストデータの両方でうまく機能しない場合は、アンダーフィッティングのシグナルです。

分散が大きい→オーバーフィット。

オーバーフィットこれは、あるデータセットでモデルを訓練し、そのモデルは非常に良い結果を出したが、その後新しいデータを与えると、全く良い結果を出さなかった場合に起こる現象である。この現象は、モデルが過度に複雑で、訓練データに過度にフィットしようとする場合に起こります。モデルは訓練データ上では非常にうまく予測できても、テストデータ上ではパフォーマンスが低下する。

モデルの性能をチェックするテクニックのひとつに、クロスバリデーションがある。

交差検証とは、モデルを複数回トレーニングすることで、毎回異なるトレーニング/テストデータを使用することです。データセットをいくつかの フォールドつまりサブセットである。そして、1つのフォールドを検証セットまたはテストセットとして残し、残りのフォールドをトレーニングに使用します。これを数回繰り返すので、毎回トレーニング・セットとテスト・セットが変わる。 

 

sciikit-learn はまた メトリクスライブラリも提供しているので、モデルのパフォーマンススコアを簡単に取得することができます。 

  • 精度スコア= 正しい予測/総予測
  • 精度=真陽性/(真陽性+偽陽性)
  • リコール=真陽性/(真陽性+偽陰性)
  • F1スコア= (2 x 精度 x 回想)/(精度 + 回想)
  • 特異度=真陰性/(真陽性+偽陰性)
  • 混同行列- 真陽性、真陰性、偽陽性、偽陰性を示す。

様々なアルゴリズムの指標をチェックすることで、最適なモデルを選ぶことができる。 

予想する!

満足のいくモデルができたら、それをアプリで使いたい。 

Jupyter Notebooksのような環境で、Pythonを使ってモデルの前処理、作成、評価を行うのが一般的です。そこから、モデルをファイルとしてエクスポートすることができます。

その後、Streamlitアプリ内でモデルをロードし、それを使って予測を行うことができます。 

このレッスンのアクティビティでは、脳卒中リスクデータセットを使って、このプロセス全体を体験します。データをどのように前処理し、様々なアルゴリズムを使ってモデルを作成し、そして簡単なStreamlitアプリでモデルを使って、いくつかの入力特性が与えられた場合の脳卒中リスクを予測する方法を見ていきます。 

アクティビティ1:ジュピターノートブックでAIモデルをトレーニングする

所要時間:60分

AIモデル構築のための脳卒中リスクデータセットを探る

以下のビデオのいずれかに従ってください。 ローカルコーディング をコンピュータにインストールしてください。ビデオ1または オンラインコーディング (ビデオ2)に送る:
  1. Kaggleから脳卒中予測データセットを ダウンロードする。
  2. Jupyterノートブックでデータを扱う:
    • データを見直す
    • データをモデル用に準備するための前処理
    • さまざまなモデルを作る
    • アプリの評価とモデルの選択
    • モデルをエクスポートする
ノートブックのダウンロード

チャレンジ

Jupyter Notebookのモデルとは異なるモデルを試してみてください。 

  1. scikit-learnのウェブサイトで他の分類アルゴリズムを調べたり、Kaggleで他のモデル構築例を見たりする。
  2. アルゴリズムを1つ選び、コードをノートブックに追加してモデルを作成する。  
  3. scikit-learnのメトリクスを使って精度をチェックする。 

あなたのモデルの性能はどうですか?ノートブックの他のアルゴリズムより優れていますか?

アクティビティ 2:予測アプリを作る

所要時間45分

Streamlitアプリでモデルを使用する

以下のリンクにあるビデオに従って、ユーザーの入力に基づいて脳卒中リスクを予測するウェブ・アプリを作ってみよう。
Visual Studio Codeでローカルに、またはCodespacesでオンラインに、アプリをコーディングする方法に応じて適切なビデオを選択します。

チャレンジ

Irisデータセットは、花弁と萼片の寸法に基づいてアヤメの花を3種(setosa、versicolor、virginica)に分類する古典的なデータセットである。

  1. データセットについて調査し、その特徴とターゲットを学ぶ。 
  2. データセットをダウンロードして独自のモデルを作成することもできるし、K-最近傍を使って作成したこのモデル(pickleファイル)を使うこともできる。 このデータセットにはスケーラーが必要ないことに注意してください。 pickleファイルにはモデルだけが含まれている。
  3. モデルをインポートしてStreamlitアプリを作成し、4つのデータセットの特徴に基づいて虹彩の種類を予測する。

テクノベーション・インスピレーション

PythonとStreamlitを使って機械学習モデルを組み込んだウェブアプリケーションを構築したTechnovationの参加者の素晴らしい例をいくつか紹介しよう。 

振り返り

あなたは、データセットの前処理、複数のモデルの構築、そしてアプリで使用するモデルの評価と選択の全プロセスを経験しました。 1回のレッスンで学ぶことは非常に多い!

反射
あなたのソリューションには、どのようなモデルが必要だと思いますか?分類ですか、それとも回帰ですか?
どの部分が理解しにくかったですか?
解決策を構築するために、あなたは今、どのようなステップを踏めばいいのだろうか?

主な用語のおさらい

  • 前処理- データセットを取得し、そのデータが機械学習モデルの学習に適していることを確認する。
  • 分類アルゴリズム- 離散値を分類または予測する機械学習モデルを訓練するために使用されるアルゴリズム
  • 回帰アルゴリズム - 連続範囲の値を予測するために機械学習モデルを訓練するために使用されるアルゴリズム
  • バイアス- モデルを単純化する誤った仮定に起因する、モデルの予測値と正しい値との差。
  • 分散 - モデルが新しいデータに直面したときに一般化できない場合の、モデル予測におけるばらつきの大きさ。
  • オーバーフィット - モデルが学習データに適合しすぎて、新しいデータに対してうまく予測できない。
  • アンダーフィッティング - モデルが単純化されすぎていて、トレーニングデータでもテストデータでもうまく機能しない場合。
  •  

追加リソース

機械学習 

ストリームライト