特徴量エンジニアリング
AutoML は、2 つの重要な特徴量エンジニアリングの手順を実行します。
これらの手順により、データと使用されている機械学習アルゴリズムとの適合性を確保して、パフォーマンスを著しく向上させることができます。
列の型分類
AutoML はまずデータセット内の列を調べて、特定の Python データ型として分類します。DDL データ型から Python データ型への変換の詳細は、"DDL から Python への型変換" を参照してください。
以下に、列の型とその分類の方法を示します。
数値列は、int8、int64、float32 など、数値 pandas データ型を持つ列です。以下を除き、この条件を満たす、すべての列が含まれます。
-
timedelta データ型の列
-
一意の値が 1 つのみの列
数値データのように見える列が、数値列として不適切に分類されることがあります。例えば、さまざまな項目の ID 番号が含まれる列がある場合、ID 番号 1000 は ID 番号 2000 の “半分” ではありません。VARCHAR 値で数値データを再キャストすることで、これらの列をカテゴリ列として適切に処理することができます。
リスト列は、リスト値を含む列です。以下の条件を満たします。
-
category または object pandas データ型である。
-
無視される列が含まれていない。
-
以下のいずれかの型であるか、これらの型を含む。
-
InterSystems IRIS データ型 %Library.String:list。
-
InterSystems IRIS データ型 %Library.String:array。
-
Python リスト。列の空でない最初の 10 個の値を調べて、各値の型が Python リストかどうかを確認して、判断します。
-
文字列配列。列の空でない最初の 10 個の値を調べて、各値の型が string で、文字 [, ending character ] で始まり、長さが 2 文字以上かどうかを確認して、判断します。
-
ブーリアン列は、bool pandas データ型を持つ列です。さらに、無視される列を含まないという条件を満たします。
無視される列は、無視され、トレーニングの前に削除される列です。これには、以下のものがあります。
-
ID 列
-
ラベル列
-
一意の値が 1 つのみの列 (datetime pandas データ型の列を除く)
DDL から Python への型変換
以下の表に、AutoML がデータ列を分類するために使用する、DDL データ型から Python データ型へのマッピングを示します。
DDL データ型 | Python データ型 |
---|---|
BIGINT | integer |
BINARY | bytes |
BIT | Boolean |
DATE | datetime64 (numpy) |
DECIMAL | decimal |
DOUBLE | float |
INTEGER | integer |
NUMERIC | float |
REAL | float |
SMALLINT | integer |
TIME | datetime64 (numpy) |
TIMESTAMP | datetime64 (numpy) |
TINYINT | integer |
VARBINARY | bytes |
VARCHAR | string |
DDL データ型および関連する InterSystems IRIS® データ・プラットフォーム・データ型の詳細は、"InterSystems SQL リファレンス" の “データ型” を参照してください。
データ変換
変換関数は、データセット全体を機械学習モデルで使用される形式に変換します。これは、トレーニング・セットにはトレーニングの前に適用され、将来のデータセットには予測が行われる前に適用されます。
追加の日/時列が作成されます。datetime 列ごとに、必要に応じて、以下の別個の列が追加されます。
-
時間
-
曜日
-
月
AutoML は期間列も作成します。追加される各列は、元の日/時列のいずれかであり、この列の各値は、その特定の日/時列の日付と他のすべての日/時列の日付との間の期間です。例えば、以下の 3 つの日/時列を持つ患者データを考えてみます。
-
生年月日
-
入院日
-
退院日
AutoML はこれらの列から、経過日時 (生年月日と入院日との間の期間) と滞在期間 (入院日と退院日との間の期間) という 2 つの有用な期間列を作成します。
最後に、存在するリスト列ごとに、リストのサイズの列が追加されます。つまり、古い列の対応するリストの長さが、新しい列の値になります。
データセットの一部の列の値が欠落していて、不完全なことがよくあります。これを補って、パフォーマンスを向上させるために、AutoML は欠落する値/Null 値に値を入力します。
-
カテゴリカル列と日付列の場合、AutoML は欠落する値を列の最頻値 (最も頻度の高い値) で置き換えます。
-
数値列と期間列の場合、AutoML は欠落する値を列の平均値 (平均) で置き換えます。
-
リスト列とテキストの場合、AutoML は欠落する値を空の文字列で置き換えます。
各数値列には、標準のスカラが適合します。これには、元の数値列と、期間列およびリスト・サイズ列が含まれます。
数値列の値もビニングされてから、カテゴリカル値として使用されます。すでに存在する数値列のほかに、これらの新しいカテゴリカル・ビン列が別個に追加されます。各数値列は 4 つのビンに分割され、それぞれがその列の値の四分位数を表します。新規のビニングされた列は、カテゴリカル列として扱われます。
各テキスト列とリスト列には、データをトレーニングに必要な形式に変換するためのベクトライザが適合します。これは、SciKit Learn の TFIDF ベクトライザによって行われます。詳細は、こちらのドキュメントOpens in a new tabを参照してください。
次のパラメータが使用されます。
パラメータ | 値 |
---|---|
Convert to lowercase | True |
Stop Words | なし |
N-Gram Range | (1.1) |
Max Features | 10000 |
Norm | L2 |
バイナリ列は 1 と 0 で構成されるように変換され、true 値は 1 にマッピングされます。
カテゴリカル列は、one-hot エンコーディングOpens in a new tabされてからトレーニングに使用されます。
トレーニングの前の最後の手順として、冗長性の排除、トレーニング速度の改善、およびモデルの正確性の向上のために、特徴量の削除が実行されます。これは、Scikit Learn の SelectFPROpens in a new tab 関数を使用して行われます。
次のパラメータが使用されます。
パラメータ | 値 |
---|---|
スコアリング関数 | f_classif |
alpha | 0.2 |