AutoKeras 1.0 : Tutorials : 構造化データ分類 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 03/22/2020
* 本ページは、AutoKeras の以下のページを翻訳した上で適宜、補足説明したものです:
- Getting Started : Structured Data Classification
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
Tutorials : 構造化データ分類
単純なサンプル
最初のステップはデータを準備することです。ここではサンプルとして タイタニック・データセット を使用します。CSV ファイルを ここ でダウンロードできます。
2 番目のステップは StructuredDataClassifier を実行することです。総ての /path/to を csv ファイルへのパスで置き換えてください。
import autokeras as ak # Initialize the structured data classifier. clf = ak.StructuredDataClassifier(max_trials=10) # It tries 10 different models. # Feed the structured data classifier with training data. clf.fit( # The path to the train.csv file. '/path/to/train.csv', # The name of the label column. 'survived') # Predict with the best model. predicted_y = clf.predict('/path/to/eval.csv') # Evaluate the best model with testing data. print(clf.evaluate('/path/to/eval.csv', 'survived'))
データ形式
AutoKeras StructuredDataClassifier はデータ形式について非常に柔軟です。
上のサンプルは CSV ファイルをどのように直接使用するかを示します。CSV ファイルに加えて、それはまた numpy.ndarray, pandas.DataFrame あるいは tf.data.Dataset もサポートします。データは数値かカテゴリカル値を持つ 2-次元であるべきです。
分類ラベルについては、AutoKeras は plain ラベル, i.e. 文字列か整数、そして one-hot エンコードラベル, i.e. 0 と 1 のベクトルの両者を受け取ります。ラベルは numpy.ndarray, pandas.DataFrame か pandas.Series であり得ます。
次のサンプルは numpy.ndarray, pandas.DataFrame と tensorflow.data.Dataset でデータがどのように準備できるかを示します。
import pandas as pd # x_train as pandas.DataFrame, y_train as pandas.Series x_train = pd.read_csv('train.csv') print(type(x_train)) # pandas.DataFrame y_train = x_train.pop('survived') print(type(y_train)) # pandas.Series # You can also use pandas.DataFrame for y_train. y_train = pd.DataFrame(y_train) print(type(y_train)) # pandas.DataFrame # You can also use numpy.ndarray for x_train and y_train. x_train = x_train.to_numpy() y_train = y_train.to_numpy() print(type(x_train)) # numpy.ndarray print(type(y_train)) # numpy.ndarray # Preparing testing data. x_test = pd.read_csv('eval.csv') y_test = x_test.pop('survived') # It tries 10 different models. clf = ak.StructuredDataClassifier(max_trials=10) # Feed the structured data classifier with training data. clf.fit(x_train, y_train) # Predict with the best model. predicted_y = clf.predict(x_test) # Evaluate the best model with testing data. print(clf.evaluate(x_test, y_test))
次のコードは numpy.ndarray をどのように tf.data.Dataset に変換するかを示します。特に、ラベルは tensorflow Dataset にラップされるためにマルチクラス分類のため one-hot エンコードされなければなりません。タイタニック・データセットは二値分類ですので、それは one-hot エンコードされるべきではありません。
import tensorflow as tf train_set = tf.data.Dataset.from_tensor_slices(((x_train, ), (y_train, ))) test_set = tf.data.Dataset.from_tensor_slices(((x_test, ), (y_test, ))) clf = ak.StructuredDataClassifier(max_trials=10) # Feed the tensorflow Dataset to the classifier. clf.fit(train_set) # Predict with the best model. predicted_y = clf.predict(test_set) # Evaluate the best model with testing data. print(clf.evaluate(test_set))
次のようにデータのためにカラム名とタイプを指定することもできます。訓練データが既にカラム名を持つ場合には, e.g. pandas.DataFrame, CSV ファイル、column_names はオプションです。タイプが指定されない任意のカラムは訓練データから推論されます。
# Initialize the structured data classifier. clf = ak.StructuredDataClassifier( column_names=[ 'sex', 'age', 'n_siblings_spouses', 'parch', 'fare', 'class', 'deck', 'embark_town', 'alone'], column_types={'sex': 'categorical', 'fare': 'numerical'}, max_trials=10, # It tries 10 different models. )
検証データ
デフォルトでは、AutoKeras は検証データとして訓練データの最後の 20% を使用します。下のサンプルで示されるように、パーセンテージを指定するために validation_split を使用できます。
clf.fit(x_train, y_train, # Split the training data and use the last 15% as validation data. validation_split=0.15)
それを訓練データから validation_data で分割する代わりに貴方自身の検証セットを使用することもできます。
split = 500 x_val = x_train[split:] y_val = y_train[split:] x_train = x_train[:split] y_train = y_train[:split] clf.fit(x_train, y_train, # Use your own validation set. validation_data=(x_val, y_val))
カスタマイズされた検索空間
上級ユーザのために、StructuredDataClassifier の代わりに AutoModel を使用して探索空間をカスタマイズしても良いです。幾つかの高位設定のために StructuredDataBlock を設定できます、e.g., CategoricalToNumerical を使用するか否かのために categorical_encoding。これらの引数を指定しないこともできます、これは種々の選択を自動的に調整されるようにするでしょう。詳細のために次のサンプルを見てください。
import autokeras as ak input_node = ak.StructuredDataInput() output_node = ak.StructuredDataBlock( categorical_encoding=True, block_type='dense')(input_node) output_node = ak.ClassificationHead()(output_node) clf = ak.AutoModel(inputs=input_node, outputs=output_node, max_trials=10) clf.fit(x_train, y_train)
AutoModel の利用方法は Keras の functional API に類似しています。基本的には、グラフを構築しています、そのエッジはブロックでノードはブロックの中間出力です。output_node = ak.[some_block]([block_args])(input_node) で input_node から output_node へのエッジを追加します。
更に探索空間をカスタマイズするためにより極め細かいブロックを利用することもまた可能です。次のサンプルを見てください。
import autokeras as ak input_node = ak.StructuredDataInput() output_node = ak.CategoricalToNumerical()(input_node) output_node = ak.DenseBlock()(output_node) output_node = ak.ClassificationHead()(output_node) clf = ak.AutoModel(inputs=input_node, outputs=output_node, max_trials=10) clf.fit(x_train, y_train)
以上