Scikit-learnを使用してPythonで機械学習分類器を構築する方法
序章
機械学習は、コンピューターサイエンス、人工知能、統計学の研究分野です。 機械学習の焦点は、パターンを学習し、データから予測を行うためのアルゴリズムをトレーニングすることです。 機械学習は、コンピューターを使用して意思決定プロセスを自動化できるため、特に価値があります。
機械学習アプリケーションはいたるところにあります。 NetflixとAmazonは、機械学習を使用して新製品の推奨事項を作成します。 銀行は機械学習を使用してクレジットカード取引の不正行為を検出し、医療会社は機械学習を使用して患者を監視、評価、診断し始めています。
このチュートリアルでは、Python用の機械学習ツールである Scikit-learn を使用して、Pythonで簡単な機械学習アルゴリズムを実装します。 乳がん腫瘍情報のデータベースを使用して、腫瘍が悪性か良性かを予測する単純ベイズ(NB)分類器を使用します。
このチュートリアルを終えると、Pythonで独自の機械学習モデルを構築する方法がわかります。
前提条件
このチュートリアルを完了するには、次のものが必要です。
- Python3とローカルプログラミング環境がコンピューターにセットアップされています。 適切なインストールおよびオペレーティングシステムのセットアップガイドに従って、これを構成できます。 Pythonを初めて使用する場合は、Python3でコーディングする方法を調べて言語に慣れることができます。
- このチュートリアルでは、virtualenvにインストールされている JupyterNotebook。 Jupyter Notebookは、機械学習実験を実行するときに非常に役立ちます。 コードの短いブロックを実行して結果をすばやく確認できるため、コードのテストとデバッグが簡単になります。
ステップ1—Scikit-learnのインポート
まず、Pythonモジュール Scikit-learn をインストールします。これは、Python用の最も優れた最も文書化された機械学習ライブラリの1つです。
コーディングプロジェクトを開始するには、Python3プログラミング環境をアクティブ化しましょう。 環境が配置されているディレクトリにいることを確認し、次のコマンドを実行します。
. my_env/bin/activate
プログラミング環境をアクティブにして、Sckikit-learnモジュールがすでにインストールされているかどうかを確認します。
python -c "import sklearn"
sklearn
がインストールされている場合、このコマンドはエラーなしで完了します。 インストールされていない場合は、次のエラーメッセージが表示されます。
OutputTraceback (most recent call last): File "<string>", line 1, in <module> ImportError: No module named 'sklearn'
エラーメッセージは、sklearn
がインストールされていないことを示しているため、pip
を使用してライブラリをダウンロードします。
pip install scikit-learn[alldeps]
インストールが完了したら、JupyterNotebookを起動します。
jupyter notebook
Jupyterで、 MLTutorialという新しいPythonノートブックを作成します。 ノートブックの最初のセルで、 import sklearn
モジュール:
MLチュートリアル
import sklearn
ノートブックは次の図のようになります。
sklearn
がノートブックにインポートされたので、機械学習モデルのデータセットの操作を開始できます。
ステップ2—Scikit-learnのデータセットをインポートする
このチュートリアルで使用するデータセットは、乳がんウィスコンシン診断データベースです。 データセットには、乳がん腫瘍に関するさまざまな情報のほか、悪性または良性の分類ラベルが含まれています。 データセットには、569個の腫瘍に関する569個のインスタンスまたはデータがあり、30個の属性、または腫瘍の半径、テクスチャ、滑らかさ、面積などの特徴に関する情報が含まれています。
このデータセットを使用して、腫瘍情報を使用して腫瘍が悪性か良性かを予測する機械学習モデルを構築します。
Scikit-learnには、Pythonにロードできるさまざまなデータセットがインストールされており、必要なデータセットが含まれています。 データセットをインポートしてロードします。
MLチュートリアル
... from sklearn.datasets import load_breast_cancer # Load dataset data = load_breast_cancer()
data
variable は、辞書のように機能するPythonオブジェクトを表します。 考慮すべき重要な辞書キーは、分類ラベル名(target_names
)、実際のラベル(target
)、属性/機能名(feature_names
)、および属性( data
)。
属性は、分類子の重要な部分です。 属性は、データの性質に関する重要な特性をキャプチャします。 私たちが予測しようとしているラベル(悪性腫瘍と良性腫瘍)を考えると、考えられる有用な属性には、腫瘍のサイズ、半径、およびテクスチャが含まれます。
重要な情報セットごとに新しい変数を作成し、データを割り当てます。
MLチュートリアル
... # Organize our data label_names = data['target_names'] labels = data['target'] feature_names = data['feature_names'] features = data['data']
これで、情報のセットごとにリストができました。 データセットをよりよく理解するために、クラスラベル、最初のデータインスタンスのラベル、機能名、および最初のデータインスタンスの機能値を出力して、データを見てみましょう。
MLチュートリアル
... # Look at our data print(label_names) print(labels[0]) print(feature_names[0]) print(features[0])
コードを実行すると、次の結果が表示されます。
画像が示すように、クラス名は悪性と良性であり、これらは0
と1
のバイナリ値にマッピングされます。ここで[X153X ] は悪性腫瘍を表し、1
は良性腫瘍を表します。 したがって、最初のデータインスタンスは、平均半径が1.79900000e+01
である悪性腫瘍です。
データが読み込まれたので、データを操作して機械学習分類器を構築できます。
ステップ3—データをセットに整理する
分類器のパフォーマンスを評価するには、常に見えないデータでモデルをテストする必要があります。 したがって、モデルを作成する前に、データをトレーニングセットとテストセットの2つの部分に分割してください。
トレーニングセットを使用して、開発段階でモデルをトレーニングおよび評価します。 次に、トレーニングされたモデルを使用して、見えないテストセットの予測を行います。 このアプローチにより、モデルのパフォーマンスと堅牢性を実感できます。
幸い、sklearn
にはtrain_test_split()
という関数があり、データをこれらのセットに分割します。 関数をインポートし、それを使用してデータを分割します。
MLチュートリアル
... from sklearn.model_selection import train_test_split # Split our data train, test, train_labels, test_labels = train_test_split(features, labels, test_size=0.33, random_state=42)
この関数は、test_size
パラメーターを使用してデータをランダムに分割します。 この例では、元のデータセットの33 % oを表すテストセット(test
)があります。 残りのデータ(train
)は、トレーニングデータを構成します。 また、トレイン/テスト変数の両方にそれぞれのラベルがあります。 train_labels
およびtest_labels
。
これで、最初のモデルのトレーニングに進むことができます。
ステップ4—モデルの構築と評価
機械学習には多くのモデルがあり、各モデルには独自の長所と短所があります。 このチュートリアルでは、通常は二項分類タスクでうまく機能する単純なアルゴリズム、つまり Naive Bayes(NB)に焦点を当てます。
まず、GaussianNB
モジュールをインポートします。 次に、GaussianNB()
関数を使用してモデルを初期化し、gnb.fit()
を使用してモデルをデータに適合させてモデルをトレーニングします。
MLチュートリアル
... from sklearn.naive_bayes import GaussianNB # Initialize our classifier gnb = GaussianNB() # Train our classifier model = gnb.fit(train, train_labels)
モデルをトレーニングした後、トレーニングしたモデルを使用して、predict()
関数を使用してテストセットの予測を行うことができます。 predict()
関数は、テストセット内の各データインスタンスの予測の配列を返します。 次に、予測を印刷して、モデルが何を決定したかを把握できます。
test
を設定してpredict()
機能を使用し、結果を出力します。
MLチュートリアル
... # Make predictions preds = gnb.predict(test) print(preds)
コードを実行すると、次の結果が表示されます。
Jupyter Notebookの出力にあるように、predict()
関数は、腫瘍クラスの予測値を表す0
と1
の配列を返しました(悪性対。 良性)。
予測ができたので、分類器のパフォーマンスを評価しましょう。
ステップ5—モデルの精度を評価する
真のクラスラベルの配列を使用して、2つの配列(test_labels
と。 preds
)。 sklearn
関数accuracy_score()
を使用して、機械学習分類器の精度を判断します。
MLチュートリアル
... from sklearn.metrics import accuracy_score # Evaluate accuracy print(accuracy_score(test_labels, preds))
次の結果が表示されます。
出力に示されているように、NB分類器は94.15%正確です。 これは、94.15%の確率で、腫瘍が悪性か良性かについて分類器が正しい予測を行うことができることを意味します。 これらの結果は、30の属性の機能セットが腫瘍クラスの優れた指標であることを示唆しています。
これで、最初の機械学習分類器が正常に構築されました。 すべてのimport
ステートメントをノートブックまたはスクリプトの先頭に配置して、コードを再編成しましょう。 コードの最終バージョンは次のようになります。
MLチュートリアル
from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.naive_bayes import GaussianNB from sklearn.metrics import accuracy_score # Load dataset data = load_breast_cancer() # Organize our data label_names = data['target_names'] labels = data['target'] feature_names = data['feature_names'] features = data['data'] # Look at our data print(label_names) print('Class label = ', labels[0]) print(feature_names) print(features[0]) # Split our data train, test, train_labels, test_labels = train_test_split(features, labels, test_size=0.33, random_state=42) # Initialize our classifier gnb = GaussianNB() # Train our classifier model = gnb.fit(train, train_labels) # Make predictions preds = gnb.predict(test) print(preds) # Evaluate accuracy print(accuracy_score(test_labels, preds))
これで、コードを引き続き操作して、分類子のパフォーマンスをさらに向上させることができるかどうかを確認できます。 機能のさまざまなサブセットを試してみたり、まったく異なるアルゴリズムを試したりすることもできます。 機械学習のアイデアについては、Scikit-learnのウェブサイトをご覧ください。
結論
このチュートリアルでは、Pythonで機械学習分類器を構築する方法を学びました。 これで、Scikit-learnを使用して、Pythonでデータの読み込み、データの整理、トレーニング、予測、評価を行うことができます。 このチュートリアルの手順は、Pythonで独自のデータを操作するプロセスを容易にするのに役立ちます。