このトピックでは、カスタムモデルを予測と分類に使用するサンプルのユースケースについて説明します。
検出されたデータに基づいて患者が病気であるかどうかを予測する必要があるとします。
正規化された30次元ベクトルで構成されるデータセットに基づいて予測を行います。 次の図に示すように、データセットはWisconsin Breast Cancer datasetから取得され、PolarDBデータベースにインポートされています。

データセットの診断列は、患者が病気であるかどうかを判断するために使用されます。
TensorFlowプラットフォームで作成されたロジスティック回帰予測モデルを使用して予測を実行します。 モデルはバイナリファイルとして保存され、Object Storage Service (OSS) バケットにアップロードされます。 モデル作成プロセスの詳細については、次のURLをご覧ください。https://www.tensorflow.org/guide/core/logistic_regression_core
予測と分類にカスタムモデルを使用するには、次の手順を実行します。
クラスターのPolarDB for AIおよびコールドデータアーカイブ機能を有効にします。 詳細については、「PolarDB For AI機能の有効化」および「コールドデータアーカイブの有効化」をご参照ください。
データベースに接続し、作成したモデルをAIノードにアップロードします。
次のステートメントを実行して、
lr_modelという名前のモデルをアップロードします。 モデルのカスタム名を指定できます。 モデル名は英字で始める必要があり、ハイフン (-) を含めることはできません。 後続のセクションで使用するステートメントで指定するモデル名は、このカスタム名と一致している必要があります。/*polar4ai*/ UPLOAD MODEL lr_model WITH (model_location = 'https://shared-model.oss-cn-hangzhou.aliyuncs.com/logistic_regression_model.tgz');次のステートメントを実行して、モデルのステータスを表示します。
/*polar4ai*/ SHOW MODEL lr_model;次の応答が返されます。
+-------------+----------------------------------------------------+ | modelStatus | modelPath | +-------------+----------------------------------------------------+ | saved_oss | http://bucket_prefix/logistic_regression_model.tgz | +-------------+----------------------------------------------------+ 1 row in set (0.16 sec)モデルのステータスがsaved_ossの場合、モデルはアップロードされます。
モデルをデプロイします。
次のステートメントを実行して、モデルをデプロイします。
/*polar4ai*/ DEPLOY MODEL lr_model WITH (mode = 'in_db');次のステートメントを実行して、モデルのステータスを表示します。
/*polar4ai*/ SHOW MODEL lr_model;次の応答が返されます。
+-------------+---------------------------------------------------------+ | modelStatus | modelPath | +-------------+---------------------------------------------------------+ | serving | http://user_bucket_prefix/logistic_regression_model.tgz | +-------------+---------------------------------------------------------+ 1 row in set (0.16 sec)モデルステータスがservingの場合、モデルはデプロイされます。
関数を作成します。
次のステートメントを実行して、
lr_model関数を作成します。CREATE FUNCTION lr_model RETURNS REAL SONAME "#ailib#_lr_model.so";次の結果は、関数が作成されたことを示します。
Query OK, 0 rows affected (0.11 sec)次のステートメントを実行して、予測と分類のために
lr_model関数を呼び出します。SELECT lr_model(radius_mean, texture_mean, perimeter_mean, area_mean, smoothness_mean, compactness_mean, concavity_mean, concave_poinits_mean, symmetry_mean, fractal_dimension_mean, radius_ste, texture_ste, perimeter_ste, area_ste, smoothness_ste, compactness_ste, concavity_ste, concave_poinits_ste, symmetry_ste, fractal_dimension_ste, radius_largest, texture_largest, perimeter_largest, area_largest, smoothness_largest, compactness_largest, concavity_largest, concave_poinits_largest, symmetry_largest, fractal_dimension_largest) AS classification_result FROM logistic_regression_model_norm_table limit 10;次の応答が返されます。
+-----------------------+ | classification_result | +-----------------------+ | 1.00000000 | | 1.00000000 | | 1.00000000 | | 0.00000000 | | 1.00000000 | | 0.00000000 | | 1.00000000 | | 0.00000000 | | 1.00000000 | | 0.00000000 | +-----------------------+ 10 rows in set (0.71 sec)前の結果において、値1は患者が病気であることを示し、値0は患者が病気でないことを示す。