Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonを使用した決定木の実装


デシジョンツリーは、主にデータ分類シナリオに適用されるアルゴリズムです。これは、各ノードが機能を表し、各エッジが行われた決定を表すツリー構造です。ルートノードから始めて、分類のために特徴を評価し、特定のエッジに従うことを決定します。新しいデータポイントが入るたびに、この同じ方法が何度も適用され、必要なすべての機能が調査または分類シナリオに適用されたときに最終的な結論が出されます。したがって、決定木アルゴリズムは、一連のトレーニング変数を使用して従属変数を予測する際に使用される教師あり学習モデルです。

kaggleで入手可能な薬物検査データを取得します。最初のステップとして、パンダを使用してcsvファイルからデータを読み取り、その内容と構造を確認します。

import pandas as pd

datainput = pd.read_csv("drug.csv", delimiter=",") #https://www.kaggle.com/gangliu/drugsets
print(datainput)

上記のコードを実行すると、次の結果が得られます。

   Age Sex BP   Cholesterol Na_to_K  Drug
0  23   F HIGH  HIGH        25.355   drugY
1  47   M LOW   HIGH        13.093   drugC
2  47   M LOW   HIGH        10.114  drugC
3  28   F NORMAL HIGH        7.798  drugX
4  61   F LOW    HIGH       18.043  drugY
.. ... .. ... ... ... ...
195 56  F LOW    HIGH       11.567  drugC
196 16  M LOW    HIGH       12.006  drugC
197 52  M NORMAL HIGH     9.894 drugX
[200 rows x 6 columns]

データの前処理

次のステップでは、上記のデータを前処理して、データにあるさまざまなテキスト値の数値を取得します。これは、年齢、性別、BPなどの特定の値に対して特定の薬物を使用する決定に関するサンプルデータをトレーニングおよびテストするのに役立ちます。

import numpy as np
import pandas as pd
from sklearn.metrics import confusion_matrix

datainput = pd.read_csv("drug.csv", delimiter=",")

X = datainput[['Age', 'Sex', 'BP', 'Cholesterol', 'Na_to_K']].values

from sklearn import preprocessing
label_gender = preprocessing.LabelEncoder()
label_gender.fit(['F','M'])
X[:,1] = label_gender.transform(X[:,1])

label_BP = preprocessing.LabelEncoder()
label_BP.fit([ 'LOW', 'NORMAL', 'HIGH'])
X[:,2] = label_BP.transform(X[:,2])

label_Chol = preprocessing.LabelEncoder()
label_Chol.fit([ 'NORMAL', 'HIGH'])
X[:,3] = label_Chol.transform(X[:,3])

# Printing the first 6 records
print(X[0:6])
>

上記のコードを実行すると、次の結果が得られます-

[[23 0 0 0 25.355]
   [47 1 1 0 13.093]
   [47 1 1 0 10.113999999999999]
   [28 0 2 0 7.797999999999999]
   [61 0 1 0 18.043]
   [22 0 2 0 8.607000000000001]
]
>

従属変数の変換

次に、従属変数を数値に変換して、トレーニングや評価データセットで使用できるようにします。

import pandas as pd

datainput = pd.read_csv("drug.csv", delimiter=",")
X = datainput[['Age', 'Sex', 'BP', 'Cholesterol', 'Na_to_K']].values

y = datainput["Drug"]

print(y[0:6])

出力

上記のコードを実行すると、次の結果が得られます。

0    drugY
1    drugC
2    drugC
3    drugX
4    drugY
5    drugX
Name: Drug, dtype: object

データセットのトレーニング

次に、提供されたデータの30%をトレーニングデータセットとして使用します。これは、テストデータと呼ぶ残りの70パーセントの分類を作成するための基礎として使用されます。

import pandas as pd
from sklearn.model_selection import train_test_split

datainput = pd.read_csv("drug.csv", delimiter=",")

X = datainput[['Age', 'Sex', 'BP', 'Cholesterol', 'Na_to_K']].values

y = datainput["Drug"]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=3)

print(X_train.shape)
print(X_test.shape)
print(y_train.shape)
print(y_test.shape)

出力

上記のコードを実行すると、次の結果が得られます。

(140, 5)
(60, 5)
(140,)
(60,)

トレーニング済みデータセットから結果を取得する

次に、決定木を適用して、トレーニングされたデータセットの結果を確認できます。ここでは、入力に基づいて、エントロピーと呼ばれる基準を使用してツリーを作成します。そして最後に、決定木の精度を計算します。

import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn import metrics

datainput = pd.read_csv("drug.csv", delimiter=",")

X = datainput[['Age', 'Sex', 'BP', 'Cholesterol', 'Na_to_K']].values

# Data Preprocessing
from sklearn import preprocessing

label_gender = preprocessing.LabelEncoder()
label_gender.fit(['F', 'M'])
X[:, 1] = label_gender.transform(X[:, 1])

label_BP = preprocessing.LabelEncoder()
label_BP.fit(['LOW', 'NORMAL', 'HIGH'])
X[:, 2] = label_BP.transform(X[:, 2])

label_Chol = preprocessing.LabelEncoder()
label_Chol.fit(['NORMAL', 'HIGH'])
X[:, 3] = label_Chol.transform(X[:, 3])

y = datainput["Drug"]

# train_test_split
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=3)

drugTree = DecisionTreeClassifier(criterion="entropy", max_depth=4)

drugTree.fit(X_train, y_train)
predicted = drugTree.predict(X_test)

print(predicted)

print("\nDecisionTrees's Accuracy: ", metrics.accuracy_score(y_test, predicted))

出力

上記のコードを実行すると、次の結果が得られます。

['drugY' 'drugX' 'drugX' 'drugX' 'drugX' 'drugC' 'drugY' 'drugA' 'drugB'
'drugA' 'drugY' 'drugA' 'drugY' 'drugY' 'drugX' 'drugY' 'drugX' 'drugX'
'drugB' 'drugX' 'drugX' 'drugY' 'drugY' 'drugY' 'drugX' 'drugB' 'drugY'
'drugY' 'drugA' 'drugX' 'drugB' 'drugC' 'drugC' 'drugX' 'drugX' 'drugC'
'drugY' 'drugX' 'drugX' 'drugX' 'drugA' 'drugY' 'drugC' 'drugY' 'drugA'
'drugY' 'drugY' 'drugY' 'drugY' 'drugY' 'drugB' 'drugX' 'drugY' 'drugX'
'drugY' 'drugY' 'drugA' 'drugX' 'drugY' 'drugX']

DecisionTrees's Accuracy: 0.9833333333333333

  1. Pythonを使用したBase64データエンコーディング

    base64モジュールの関数は、バイナリデータをプレーンテキストプロトコルを使用した送信に適したASCIIのサブセットに変換します。 エンコーディングおよびデコーディング機能は、Base16、Base32、およびBase64アルゴリズムを定義するRFC 3548の仕様と、デファクトスタンダードのAscii85およびBase85エンコーディングの仕様を実装します。 RFC 3548エンコーディングは、バイナリデータのエンコーディングに適しており、電子メールで安全に送信したり、URLの一部として使用したり、HTTPPOSTリクエストの一部として含めたりすることができます。 このモジュールによっ

  2. PythonでのCX_Freezeの使用

    時々私たちは非常にエキサイティングな何か違うものを作りたいと感じます、そして人間の性質によれば、私たちはいつもそれを共有するのが大好きです。 Pythonもそれらの願いを満たします。 Pythonを使用して、Pythonプログラムを友人と共有したい場合は、それを行うことができます。必要なのは、マシンのプログラムで使用されるすべてのモジュールに同じバージョンのPythonをインストールすることだけです。 まず、 pip install CX_Frezzeを使用してCX_Freezeモジュールをインストールする必要があります コマンドプロンプトのコマンド。 最初のステップは、この割り当て、