開発者ドキュメント

Scikit-learnを使用してPythonで機械学習分類器を構築する方法

序章

機械学習は、コンピューターサイエンス、人工知能、統計学の研究分野です。 機械学習の焦点は、パターンを学習し、データから予測を行うためのアルゴリズムをトレーニングすることです。 機械学習は、コンピューターを使用して意思決定プロセスを自動化できるため、特に価値があります。

機械学習アプリケーションはいたるところにあります。 NetflixとAmazonは、機械学習を使用して新製品の推奨事項を作成します。 銀行は機械学習を使用してクレジットカード取引の不正行為を検出し、医療会社は機械学習を使用して患者を監視、評価、診断し始めています。

このチュートリアルでは、Python用の機械学習ツールである Scikit-learn を使用して、Pythonで簡単な機械学習アルゴリズムを実装します。 乳がん腫瘍情報のデータベースを使用して、腫瘍が悪性か良性かを予測する単純ベイズ(NB)分類器を使用します。

このチュートリアルを終えると、Pythonで独自の機械学習モデルを構築する方法がわかります。

前提条件

このチュートリアルを完了するには、次のものが必要です。

ステップ1—Scikit-learnのインポート

まず、Pythonモジュール Scikit-learn をインストールします。これは、Python用の最も優れた最も文書化された機械学習ライブラリの1つです。

コーディングプロジェクトを開始するには、Python3プログラミング環境をアクティブ化しましょう。 環境が配置されているディレクトリにいることを確認し、次のコマンドを実行します。

  1. . my_env/bin/activate

プログラミング環境をアクティブにして、Sckikit-learnモジュールがすでにインストールされているかどうかを確認します。

  1. python -c "import sklearn"

もしも sklearn がインストールされている場合、このコマンドはエラーなしで完了します。 インストールされていない場合は、次のエラーメッセージが表示されます。

Output
Traceback (most recent call last): File "<string>", line 1, in <module> ImportError: No module named 'sklearn'

エラーメッセージは次のことを示しています sklearn がインストールされていないため、を使用してライブラリをダウンロードします pip:

  1. pip install scikit-learn[alldeps]

インストールが完了したら、JupyterNotebookを起動します。

  1. 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()

The data variable は、dictionaryのように機能する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])

コードを実行すると、次の結果が表示されます。

画像が示すように、クラス名は悪性良性であり、これらは次のバイナリ値にマッピングされます。 01、 どこ 0 悪性腫瘍を表し、 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 パラメータ。 この例では、テストセットがあります(test)元のデータセットの33% ofを表します。 残りのデータ(train)次に、トレーニングデータを作成します。 また、トレイン/テスト変数の両方にそれぞれのラベルがあります。 train_labelstest_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() 関数。 The predict() 関数は、テストセット内の各データインスタンスの予測の配列を返します。 次に、予測を印刷して、モデルが何を決定したかを把握できます。

使用 predict() で機能する test 結果を設定して印刷します。

MLチュートリアル
...
# Make predictions
preds = gnb.predict(test)
print(preds)

コードを実行すると、次の結果が表示されます。

Jupyter Notebookの出力に見られるように、 predict() 関数はの配列を返しました 01sは、腫瘍クラスの予測値を表します(悪性対。 良性)。

予測ができたので、分類器のパフォーマンスを評価しましょう。

ステップ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で独自のデータを操作するプロセスを容易にするのに役立ちます。

モバイルバージョンを終了