標準的なロジスティック回帰は二項分類を扱います。Platform for AI (PAI) の「多クラス分類のためのロジスティック回帰」コンポーネントは、L-BFGS 最適化アルゴリズムを用いて多クラス分類をサポートするように拡張されています。このコンポーネントは、スパース形式および密形式の両方の入力データ形式を受け付けます。
コンポーネントの構成
構成方法は 2 種類あります。ビジュアルモデリングを使用して、コード不要の視覚的設定を行います。また、PAI コマンドを使用して、スクリプトまたはパイプラインによる自動化されたワークフローを実行します。
方法 1:ビジュアルモデリングでの設定
ビジュアルモデリング(旧称:Machine Learning Studio)で「多クラス分類のためのロジスティック回帰」コンポーネントを開き、以下のパラメーターを設定します。
フィールド設定タブ
| パラメーター | 説明 |
|---|---|
| トレーニング特徴列 | 入力テーブルからトレーニングに使用する特徴列を選択します。DOUBLE および BIGINT データの型をサポートします。最大 2,000 万個の特徴量をサポートします。 |
| 対象列 | 入力テーブルの列をラベル付けします。 |
| スパース形式 | 入力データがスパース形式であるかどうかを指定します。 |
パラメーター設定タブ
| パラメーター | 説明 |
|---|---|
| 正則化タイプ | トレーニング中にモデルに適用されるペナルティです。有効な値: L1、L2、および なし。 |
| 最大反復回数 | L-BFGS アルゴリズムの最大反復回数です。デフォルト値:100。 |
| 正則化係数 | 正則化ペナルティの強さです。正則化タイプ を なし に設定した場合は適用されません。 |
| 最小収束逸脱度 | L-BFGS アルゴリズムの収束しきい値です。連続する反復間の対数尤度の差がこの値を下回ると、トレーニングが終了します。デフォルト値:0.000001。 |
方法 2:PAI コマンドを使用
PAI コマンドを用いて、logisticregression_multi アルゴリズムに直接パラメーターを渡します。PAI コマンドは SQL スクリプトコンポーネント経由で実行します。詳細については、「SQL スクリプト」をご参照ください。
以下の例はコマンド構文を示しています:
PAI -name logisticregression_multi
-project algo_public
-DmodelName="xlab_m_logistic_regression_6096"
-DregularizedLevel="1"
-DmaxIter="100"
-DregularizedType="l1"
-Depsilon="0.000001"
-DlabelColName="y"
-DfeatureColNames="pdays,emp_var_rate"
-DgoodValue="1"
-DinputTableName="bank_data"パラメーター
| パラメーター | 必須 | デフォルト | 説明 |
|---|---|---|---|
inputTableName | はい | — | 入力テーブルの名前です。 |
featureColNames | いいえ | すべての数値列 | 入力テーブルからトレーニングに使用する特徴列を選択します。最大 2,000 万個の特徴量をサポートします。 |
labelColName | はい | — | ラベル列の名前です。 |
inputTablePartitions | いいえ | 全テーブル | 入力テーブルから選択するパーティションです。単一パーティションには partition_name=value を、複数レベルのパーティションには name1=value1/name2=value2 を使用します。複数のパーティションを指定する場合は、カンマ (,) で区切ります。 |
modelName | はい | — | 出力モデルの名前です。 |
regularizedType | いいえ | l1 | 正則化タイプです。有効な値: l1、l2、および None。 |
regularizedLevel | いいえ | 1.0 | 正則化係数です。regularizedType が None の場合、適用されません。 |
maxIter | いいえ | 100 | L-BFGS アルゴリズムの最大反復回数です。 |
epsilon | いいえ | 1.0e-06 | L-BFGS アルゴリズムの収束しきい値です。連続する反復間の対数尤度の差がこの値より小さくなると、トレーニングが終了します。 |
enableSparse | いいえ | false | 入力データがスパース形式であるかどうかを指定します。有効な値: true および false。 |
itemDelimiter | いいえ | , | スパース形式の入力におけるキーと値のペア間の区切り文字です。 |
kvDelimiter | いいえ | : | スパース形式の入力におけるキーと値の間の区切り文字です。 |
coreNum | いいえ | システムデフォルト | コア数です。 |
memSizePerCore | いいえ | システムデフォルト | 1 コアあたりに割り当てるメモリ量(MB)です。 |
サンプル
このサンプルでは、4 つの特徴量を持つデータセットを用いて多クラスロジスティック回帰モデルをトレーニングし、予測を実行します。すべてのコマンドは SQL スクリプトコンポーネント経由で実行されます。
ステップ 1:トレーニングデータの作成
以下の SQL ステートメントを実行して、multi_lr_test_input テーブルを作成します:
drop table if exists multi_lr_test_input;
create table multi_lr_test_input
as
select
*
from
(
select
cast(1 as double) as f0,
cast(0 as double) as f1,
cast(0 as double) as f2,
cast(0 as double) as f3,
cast(0 as bigint) as label
union all
select
cast(0 as double) as f0,
cast(1 as double) as f1,
cast(0 as double) as f2,
cast(0 as double) as f3,
cast(0 as bigint) as label
union all
select
cast(0 as double) as f0,
cast(0 as double) as f1,
cast(1 as double) as f2,
cast(0 as double) as f3,
cast(2 as bigint) as label
union all
select
cast(0 as double) as f0,
cast(0 as double) as f1,
cast(0 as double) as f2,
cast(1 as double) as f3,
cast(1 as bigint) as label
) a;このテーブルには、4 つの DOUBLE 型の特徴列(f0~f3)と 1 つの BIGINT 型のラベル列が含まれます:
| f0 | f1 | f2 | f3 | label |
|---|---|---|---|---|
| 1.0 | 0.0 | 0.0 | 0.0 | 0 |
| 0.0 | 0.0 | 1.0 | 0.0 | 2 |
| 0.0 | 0.0 | 0.0 | 1.0 | 1 |
| 0.0 | 1.0 | 0.0 | 0.0 | 0 |
ステップ 2:モデルのトレーニング
以下の PAI コマンドを実行してモデルをトレーニングし、multi_lr_test_model として保存します:
drop offlinemodel if exists multi_lr_test_model;
PAI -name logisticregression_multi
-project algo_public
-DmodelName="multi_lr_test_model"
-DitemDelimiter=","
-DregularizedLevel="1"
-DmaxIter="100"
-DregularizedType="None"
-Depsilon="0.000001"
-DkvDelimiter=":"
-DlabelColName="label"
-DfeatureColNames="f0,f1,f2,f3"
-DenableSparse="false"
-DinputTableName="multi_lr_test_input";ステップ 3:予測の実行
以下の PAI コマンドを実行して予測を生成し、結果を multi_lr_test_prediction_result テーブルに書き込みます:
drop table if exists multi_lr_test_prediction_result;
PAI -name prediction
-project algo_public
-DdetailColName="prediction_detail"
-DmodelName="multi_lr_test_model"
-DitemDelimiter=","
-DresultColName="prediction_result"
-Dlifecycle="28"
-DoutputTableName="multi_lr_test_prediction_result"
-DscoreColName="prediction_score"
-DkvDelimiter=":"
-DinputTableName="multi_lr_test_input"
-DenableSparse="false"
-DappendColNames="label";ステップ 4:結果の確認
multi_lr_test_prediction_result テーブルをクエリして、予測結果を確認します:
| label | prediction_result | prediction_score | prediction_detail |
|---|---|---|---|
| 0 | 0 | 0.9999997274902165 | {"0": 0.9999997274902165, "1": 2.324679066261573e-07, "2": 2.324679066261569e-07} |
| 0 | 0 | 0.9999997274902165 | {"0": 0.9999997274902165, "1": 2.324679066261573e-07, "2": 2.324679066261569e-07} |
| 2 | 2 | 0.9999999155958832 | {"0": 2.018833979850994e-07, "1": 2.324679066261573e-07, "2": 0.9999999155958832} |
| 1 | 1 | 0.9999999155958832 | {"0": 2.018833979850994e-07, "1": 0.9999999155958832, "2": 2.324679066261569e-07} |
出力列には以下の情報が含まれます:
prediction_result:予測されたクラスラベルです。
prediction_score:予測されたクラスに割り当てられた確率です。
prediction_detail:各クラスラベルをその予測確率にマッピングした JSON オブジェクトです。各キーはクラスラベル、各値はそのクラスに対するモデルの信頼度です。たとえば、
{"0": 0.999..., "1": 2.32e-07, "2": 2.32e-07}は、モデルがクラス0にほぼ確実な判断を下し、クラス1および2にはほぼゼロの確率を割り当てていることを示します。