前書き

https://www.digitalocean.com/community/tutorials/an-introduction-to-machine-learning [機械学習]は、コンピューターサイエンス、人工知能、統計の研究分野です。 機械学習の焦点は、パターンを学習し、データから予測を行うアルゴリズムを訓練することです。 コンピューターを使用して意思決定プロセスを自動化できるため、機械学習は特に価値があります。

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

このチュートリアルでは、Pythonの機械学習ツールであるhttp://scikit-learn.org/stable/[Scikit-learn]を使用して、Pythonで簡単な機械学習アルゴリズムを実装します。 乳がん腫瘍情報のデータベースを使用して、腫瘍が悪性か良性かを予測するhttp://scikit-learn.org/stable/modules/naive_bayes.html[Naive Bayes(NB)]分類器を使用します。 。

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

前提条件

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

  • Python 3とコンピューターにセットアップされたローカルプログラミング環境。 https://www.digitalocean.com/community/tutorial_series/how-to-install-and-set-up-a-local-programming-environment-for-python-3 [適切なインストールおよびセットアップガイドご使用のオペレーティングシステム]でこれを設定します。

  • Pythonを初めて使用する場合は、https://www.digitalocean.com/community/tutorial_series/how-to-code-in-python-3 [Python 3でコーディングする方法]を調べて、言語に慣れることができます。

  • Jupyter Notebookは、このチュートリアルのvirtualenvにインストールされています。 Jupyter Notebookは、機械学習実験を実行する際に非常に役立ちます。 短いコードブロックを実行して結果をすばやく確認できるため、コードのテストとデバッグが簡単になります。

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

Pythonモジュールhttp://scikit-learn.org/stable/[Scikit-learn]をインストールすることから始めましょう。これは、Python用の最もよく文書化された機械学習ライブラリの1つです。

コーディングプロジェクトを開始するために、Python 3プログラミング環境をアクティブにしましょう。 環境が存在するディレクトリにいることを確認し、次のコマンドを実行します。

. /bin/activate

プログラミング環境をアクティブにして、Scikit-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]

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

jupyter notebook

Jupyterで、* MLチュートリアル*という新しいPythonノートブックを作成します。 ノートブックの最初のセルhttps://www.digitalocean.com/community/tutorials/how-to-import-modules-in-python-3[import] `+ sklearn +`モジュール:

MLチュートリアル

import sklearn

ノートブックは次の図のようになります。

image:https://assets.digitalocean.com/articles/python_scikit_ml/2vp91eL.png [sklearnをインポートするPythonセルが1つあるJupyterノートブック]

ノートブックに `+ sklearn +`がインポートされたので、機械学習モデルのデータセットの使用を開始できます。

ステップ2-Scikit-learnのデータセットのインポート

このチュートリアルで扱うデータセットはhttp://scikit-learn.org/stable/datasets/index.html#breast-cancer-wisconsin-diagnostic-database[Breast Cancer Wisconsin Diagnostic Database]です。 データセットには、乳がん腫瘍に関するさまざまな情報と、*悪性*または*良性*の分類ラベルが含まれています。 データセットには、569の腫瘍に関する569の_instances_またはデータがあり、30の_attributes_の情報、または腫瘍の半径、テクスチャ、滑らかさ、面積などの特徴が含まれています。

このデータセットを使用して、機械学習モデルを構築し、腫瘍情報を使用して、腫瘍が悪性か良性かを予測します。

Scikit-learnには、Pythonにロードできるさまざまなデータセットがインストールされており、必要なデータセットが含まれています。 データセットをインポートおよびロードします。

MLチュートリアル

...
from sklearn.datasets import load_breast_cancer


# Load dataset
data = load_breast_cancer()

+ data + variableは、https://www.digitaloceanのように機能するPythonオブジェクトを表します.com / community / tutorials / understanding-dictionaries-in-python-3 [dictionary]。 考慮すべき重要な辞書キーは、分類ラベル名( + 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']

現在、各情報セットに対してhttps://www.digitalocean.com/community/tutorials/understanding-lists-in-python-3[lists]があります。 データセットの理解を深めるために、クラスラベル、最初のデータインスタンスのラベル、フィーチャ名、および最初のデータインスタンスのフィーチャ値を印刷して、データを見てみましょう。

MLチュートリアル

...
# Look at our data
print(label_names)
print(labels[0])
print(feature_names[0])
print(features[0])

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

image:https://assets.digitalocean.com/articles/python_scikit_ml/ezmZX0c.png [3つのPythonセルを持つAlt Jupyterノートブック。データセットの最初のインスタンスを印刷します]

画像が示すように、クラス名は* malignant および benign *であり、これらはバイナリ値「0」および「1」にマッピングされます。「+ 0+」は悪性腫瘍、「+ 1 + `は良性腫瘍を表します。 したがって、最初のデータインスタンスは、その平均半径が「+ 1.79900000e + 01 +」である悪性腫瘍です。

データが読み込まれたので、データを操作して機械学習分類器を作成できます。

ステップ3-データをセットに整理する

分類器のパフォーマンスを評価するには、不可視データでモデルを常にテストする必要があります。 したがって、モデルを作成する前に、データを2つの部分に分割します:training set_および_test set

トレーニングセットを使用して、開発段階でモデルをトレーニングおよび評価します。 次に、訓練されたモデルを使用して、見えないテストセットの予測を行います。 このアプローチにより、モデルのパフォーマンスと堅牢性を把握できます。

幸い、 `+ 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%を表すテストセット( `+ test +)があります。 残りのデータ( + train +)がトレーニングデータを構成します。 また、両方のトレイン/テスト変数のラベルがあります。 + train_labels +`および `+ test_labels +

これで、最初のモデルのトレーニングに進むことができます。

ステップ4-モデルの構築と評価

機械学習には多くのモデルがあり、各モデルには長所と短所があります。 このチュートリアルでは、バイナリ分類タスクで通常よく機能する単純なアルゴリズム、つまりhttp://scikit-learn.org/stable/modules/naive_bayes.html[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)

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

image:https://assets.digitalocean.com/articles/python_scikit_ml/pFeJvNA.png [テストデータにNaive Bayes分類器の予測値を出力するPythonセル付きジュピターノートブック]

Jupyter Notebookの出力に見られるように、 `+ predict()+`関数は、腫瘍クラスの予測値(悪性vs. 良性)。

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

ステップ5-モデルの精度を評価する

真のクラスラベルの配列を使用して、2つの配列( + test_labels + vs. + preds +)。 `+ sklearn `関数 ` accuracy_score()+`を使用して、機械学習分類子の精度を決定します。

MLチュートリアル

...
from sklearn.metrics import accuracy_score


# Evaluate accuracy
print(accuracy_score(test_labels, preds))

次の結果が表示されます。

image:https://assets.digitalocean.com/articles/python_scikit_ml/wsLAaEE.png [NB分類子の精度を表示するPythonセルを備えたAlt Jupyterノートブック]

出力にあるように、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))

これで、引き続きコードを操作して、分類器のパフォーマンスをさらに向上できるかどうかを確認できます。 機能のさまざまなサブセットを試してみるか、まったく異なるアルゴリズムを試すこともできます。 機械学習のアイデアについては、http://scikit-learn.org/stable/ [Scikit-learn’s website]をご覧ください。

結論

このチュートリアルでは、Pythonで機械学習分類子を作成する方法を学びました。 Scikit-learnを使用して、Pythonでデータの読み込み、データの整理、トレーニング、予測、および機械学習分類子の評価を行うことができます。 このチュートリアルの手順は、Pythonで独自のデータを操作するプロセスを促進するのに役立ちます。