本文將介紹使用使用者自訂模型進行預測分類的案例。
假設需要做一個預測任務,根據檢測的資料來預測患者是否生病。
模型建立的資料是由一個正則化後的30維度向量組成,該資料從Wisconsin Breast Cancer Dataset擷取,並已提前將資料匯入至資料庫中,如下圖所示:

其中,通過模型建立資料中的diagnosis列來判斷患者是否真的生病。
使用的模型為TensorFlow平台模型建立的一個羅吉斯迴歸預測模型,將模型儲存為TensorFlow的二進位檔案並上傳至oss bucket。具體的模型建立過程本案例參考https://www.tensorflow.org/guide/core/logistic_regression_core。
使用自訂模型進行預測分類的操作步驟如下:
在目的地組群上開啟PolarDB for AI功能和冷資料歸檔功能。具體的操作步驟請參見開啟PolarDB for AI功能和開啟冷資料歸檔。
串連資料庫,並將建立好的模型上傳至AI節點。
執行以下SQL語句上傳模型
lr_model,此處您可以自訂模型名稱,但要以字母開頭且不能包含中折線(-),且下文使用的SQL語句中模型名稱需保持一致。/*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,表示模型上傳成功。
部署模型。
執行以下SQL語句部署模型。
/*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,表示模型部署完成。
建立函數。
執行以下SQL語句建立函數
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表示沒有生病。