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
-
Pythonを使用したBase64データエンコーディング
base64モジュールの関数は、バイナリデータをプレーンテキストプロトコルを使用した送信に適したASCIIのサブセットに変換します。 エンコーディングおよびデコーディング機能は、Base16、Base32、およびBase64アルゴリズムを定義するRFC 3548の仕様と、デファクトスタンダードのAscii85およびBase85エンコーディングの仕様を実装します。 RFC 3548エンコーディングは、バイナリデータのエンコーディングに適しており、電子メールで安全に送信したり、URLの一部として使用したり、HTTPPOSTリクエストの一部として含めたりすることができます。 このモジュールによっ
-
PythonでのCX_Freezeの使用
時々私たちは非常にエキサイティングな何か違うものを作りたいと感じます、そして人間の性質によれば、私たちはいつもそれを共有するのが大好きです。 Pythonもそれらの願いを満たします。 Pythonを使用して、Pythonプログラムを友人と共有したい場合は、それを行うことができます。必要なのは、マシンのプログラムで使用されるすべてのモジュールに同じバージョンのPythonをインストールすることだけです。 まず、 pip install CX_Frezzeを使用してCX_Freezeモジュールをインストールする必要があります コマンドプロンプトのコマンド。 最初のステップは、この割り当て、