全部產品
Search
文件中心

PolarDB:使用者自訂模型使用案例

更新時間:Dec 10, 2024

本文將介紹使用使用者自訂模型進行預測分類的案例。

假設需要做一個預測任務,根據檢測的資料來預測患者是否生病。

模型建立的資料是由一個正則化後的30維度向量組成,該資料從Wisconsin Breast Cancer Dataset擷取,並已提前將資料匯入至資料庫中,如下圖所示:

11.png

其中,通過模型建立資料中的diagnosis列來判斷患者是否真的生病。

使用的模型為TensorFlow平台模型建立的一個羅吉斯迴歸預測模型,將模型儲存為TensorFlow的二進位檔案並上傳至oss bucket。具體的模型建立過程本案例參考https://www.tensorflow.org/guide/core/logistic_regression_core

使用自訂模型進行預測分類的操作步驟如下:

  1. 在目的地組群上開啟PolarDB for AI功能和冷資料歸檔功能。具體的操作步驟請參見開啟PolarDB for AI功能開啟冷資料歸檔

  2. 串連資料庫,並將建立好的模型上傳至AI節點。

    1. 執行以下SQL語句上傳模型lr_model,此處您可以自訂模型名稱,但要以字母開頭且不能包含中折線(-),且下文使用的SQL語句中模型名稱需保持一致。

      /*polar4ai*/ UPLOAD MODEL lr_model WITH (model_location = 'https://shared-model.oss-cn-hangzhou.aliyuncs.com/logistic_regression_model.tgz');
    2. 執行以下命令查看模型狀態。

      /*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,表示模型上傳成功。

  3. 部署模型。

    1. 執行以下SQL語句部署模型。

      /*polar4ai*/ DEPLOY MODEL lr_model WITH (mode = 'in_db');
    2. 執行以下命令查看模型狀態。

      /*polar4ai*/ SHOW MODEL lr_model;

      返回結果如下:

      +-------------+---------------------------------------------------------+
      | modelStatus | modelPath                                               |
      +-------------+---------------------------------------------------------+
      | serving     | http://user_bucket_prefix/logistic_regression_model.tgz |
      +-------------+---------------------------------------------------------+
      1 row in set (0.16 sec)

      模型狀態顯示為serving,表示模型部署完成。

  4. 建立函數。

    執行以下SQL語句建立函數lr_model

    CREATE FUNCTION lr_model RETURNS REAL SONAME "#ailib#_lr_model.so";

    返回結果如下表示建立成功:

    Query OK, 0 rows affected (0.11 sec)
  5. 調用函數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表示沒有生病。