<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          AI預測:基于流計算Oceanus (Flink) 實現病癥的實時預測

          共 16794字,需瀏覽 34分鐘

           ·

          2021-11-24 08:40


          一、方案描述


          (一)概述


          近年來,人工智能的風潮為醫(yī)療行業(yè)帶來一場全新革命,AI 在輔助診斷、疾病預測、療法選擇等方面發(fā)揮著重要作用。機器學習領域的特征選擇和有監(jiān)督學習建模方法越來越多地用于疾病預測和輔助診斷,常用的算法如決策樹、隨機森林、邏輯回歸等。

          乳腺癌是目前發(fā)病率僅次于肺癌的常見癌癥,機器學習算法能夠分析已有的臨床乳腺癌數據,得到與乳腺癌發(fā)病關系最密切的特征,這能夠極大地幫助醫(yī)生進行早期診斷,及時拯救患者。

          本方案結合智能鈦機器學習平臺(TI-ONE)、智能鈦彈性模型服務(TI-EMS)、騰訊云流計算Oceanus(Flink)、消息隊列CKafka、云數據倉庫ClickHouse、對象存儲(COS)針對乳腺癌預測案例使用決策樹分類算法實現全流程解決方案,包括離線模型訓練、實時特征工程及實時在線預測功能。




          (二)方案架構


          首先由TI-ONE進行離線模型訓練,將模型文件存放在COS上,然后由TI-EMS將模型文件封裝成一個PMML模型服務供流計算Oceanus調用。流計算 Oceanus利用Datagen Connector模擬實時生成特征數據后存放在CKafka上,之后流計算Oceanus取CKafka的特征數據經過數據轉換傳入到TI-EMS的PMML模型服務中調用決策樹分類模型并返回預測結果,最后將預測結果存儲在ClickHouse中。



          涉及產品列表:


          • 流計算Oceanus(Flink)

          • 智能鈦機器學習平臺(TI-ONE)

          • 智能鈦彈性模型服務(TI-EMS)

          • 消息隊列CKafka

          • 云數據倉庫ClickHouse

          • 對象存儲(COS)



          二、前置準備


          (一)創(chuàng)建私有網絡VPC


          私有網絡(VPC)是一塊您在騰訊云上自定義的邏輯隔離網絡空間,在構建流計算Oceanus、CKafka、COS、ClickHouse集群等服務時選擇的網絡建議選擇同一個VPC,網絡才能互通。否則需要使用對等連接、NAT網關VPN等方式打通網絡。私有網絡VPC創(chuàng)建步驟請參考幫助文檔[1]


          (二)創(chuàng)建流計算Oceanus集群


          流計算Oceanus是大數據產品生態(tài)體系的實時化分析利器,是基于Apache Flink構建的具備一站開發(fā)、無縫連接、亞秒延時、低廉成本、安全穩(wěn)定等特點的企業(yè)級實時大數據分析平臺。流計算Oceanus以實現企業(yè)數據價值最大化為目標,加速企業(yè)實時化數字化的建設進程。


          流計算Oceanus控制臺[2]的【集群管理】->【新建集群】頁面創(chuàng)建集群,選擇地域、可用區(qū)、VPC、日志、存儲,設置初始密碼等。VPC及子網使用剛剛創(chuàng)建好的網絡。創(chuàng)建完后Flink的集群如下:




          (三)創(chuàng)建CKafka實例


          進入CKafka控制臺[3],選擇左側【實例列表】,單擊【新建】進行購買,注意【地域】需選擇VPC所在地域,VPC選擇及子網選擇之前創(chuàng)建的VPC 和子網。新建成功后,單擊實例進入實例詳情頁面,單擊【topic管理】新建topic。


          (四)創(chuàng)建COS實例


          進入COS控制臺[4],選擇左側【存儲桶列表】,單擊【創(chuàng)建存儲桶】,【所屬地域】選擇VPC所在地域,具體操作細節(jié)可參考COS控制臺快速入門[5]


          (五)創(chuàng)建ClickHouse集群


          進入ClickHouse控制臺[6],單擊【新建集群】創(chuàng)建ClickHouse集群,注意地域、可用區(qū)和網絡的選擇。創(chuàng)建成功之后選擇一臺與其同VPC的CVM進入,在該CVM下下載ClickHouse客戶端,創(chuàng)建數據庫和表。具體操作可參考ClickHouse快速入門[7]



          # 下載 ClickHouse-Client 命令wget https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/clickhouse-client-20.7.2.30-2.noarch.rpmwget https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/clickhouse-common-static-20.7.2.30-2.x86_64.rpm
          # 安裝客戶端rpm -ivh *.rpm
          # 使用 tcp 端口登陸 ClickHouse 集群,IP 地址可通過控制臺查看clickhouse-client -hxxx.xxx.xxx.xxx --port 9000


          -- 創(chuàng)建數據庫CREATE DATABASE IF NOT EXISTS testdb ON CLUSTER default_cluster;
          -- 創(chuàng)建表CREATE TABLE testdb.model_predict_result_1 on cluster default_cluster (res String,Sign Int8) ENGINE = ReplicatedCollapsingMergeTree('/clickhouse/tables/{layer}-{shard}/testdb/model_predict_result_1', '{replica}',Sign) ORDER BY res;



          (六)注冊開通TI-ONE服務


          智能鈦機器學習平臺是為AI工程師打造的一站式機器學習服務平臺,為用戶提供從數據預處理、模型構建、模型訓練、模型評估到模型服務的全流程開發(fā)及部署支持。


          進入TI-ONE控制臺[8],在彈出的頁面上開通【角色授權】。


          • 單擊【前往訪問管理】,頁面將跳轉至訪問管理控制臺。


          • 單擊【同意授權】,即可創(chuàng)建服務預設角色并授予智能鈦機器學習平臺相關權限。



          角色授權開通后,返回TI-ONE控制臺[8],開通所需地區(qū)的后付費計費模式。?具體步驟可參考TI-ONE的官方文檔注冊與開通服務[9]


          (七)注冊開通TI-EMS服務


          智能鈦彈性模型服務(Tencent Intelligence Elastic Model Service,TI-EMS)是具備虛擬化異構算力和彈性擴縮容能力的無服務器化在線推理平臺。


          角色授權:進入TI-EMS控制臺[10],參考上面步驟進行【角色授權】 ??

          創(chuàng)建專用資源組:TI-EMS平臺目前提供公共資源組和專用資源組兩種模式,關于兩種模式的優(yōu)缺點可參見官網文檔資源組管理[11]。本例子通過流計算Oceanus調用TI-EMS服務,需打通相對應的VPC,因此需選用專用資源組。關于專用資源組的開通方式可參見官網文檔資源組管理[11]


          三、方案實現


          本文通過TI-ONE平臺,利用決策樹算法搭建乳腺癌預測模型(決策樹分類模型),將模型結果保存在COS上 (用戶也可以自己在本地訓練完成后將訓練好的模型文件保存在本地或者COS,之后通過TI-EMS創(chuàng)建模型服務配置即可調用)。然后由流計算Oceanus模擬生成實時特征數據,以CSV格式存儲在 CKafka,再通過流計算Oceanus取CKafka的特征數據作為入參,結合TI-EMS進行乳腺癌模型的實時調用,預測結果保存在ClickHouse中。

          (一)離線模型訓練


          • 數據集介紹


          本次任務我們采用公開的乳腺癌數據集[12],該數據集共包含569個樣本,其中357個陽性(y=1)樣本,212個陰性(y=0)樣本;每個樣本有32個特征,但本次實驗中選取其中10個特征。數據信息及模型訓練流程請參考TI-ONE最佳實踐乳腺癌預測[13]

          數據集具體字段信息如下:


          數據集具體內容抽樣展示如下(前9列:特征,第10列:標簽):


          • 離線模型訓練



          模型訓練:進入TI-ONE控制臺[8],點擊左側【工程列表】,單擊【新建工程】,【COS Bucket】選擇之前創(chuàng)建好的COS。進入【工作流編輯頁面】,按需拖拽對應的輸入、算法、輸出等模塊到右側頁面即可快速構建一個完整的模型訓練框架,具體構建方法可參考官網文檔使用可視化建模構建模[14]。?當然,用戶也可以自行編寫代碼上傳到【Notebook】頁面進行模型訓練,具體請參考官網使用Notebook構建模型[15],另外也可以使用TI SDK構建模型[16]



          模型效果:運行成功后,右鍵單擊【二分類任務評估】>【評估指標】,即可查看模型效果。


          模型保存:右鍵單擊模型文件(【決策樹分類】左側小圓圈),點擊【模型操作】>【保存到模型倉庫】,保存成功后返回【模型倉庫】頁面,查看保存的模型服務。



          (二)實時特征工程


          本示例基于流計算Oceanus SQL作業(yè)生成,使用Datagen連接器模擬生成實時特征數據,并將結果以CSV格式存儲在CKafka中,供之后進行模型調用。用戶可以根據實際業(yè)務情況自行選擇SQL、ETL、JAR作業(yè)方式進行實時特征數據的輸出。

          • 創(chuàng)建Source


          -- random source 用于模擬患者病歷實時特征數據
          CREATE TABLE random_source ( ClumpThickness INT, UniformityOfCellSize INT, UniformityOfCellShape INT, MarginalAdhsion INT, SingleEpithelialCellSize INT, BareNuclei INT, BlandChromation INT, NormalNucleoli INT, Mitoses INT ) WITH ( 'connector' = 'datagen', 'rows-per-second'='1', -- 每秒產生的數據條數 'fields.ClumpThickness.kind'='random', -- 無界的隨機數 'fields.ClumpThickness.min'='0', -- 隨機數的最小值 'fields.ClumpThickness.max'='10', -- 隨機數的最大值 'fields.UniformityOfCellSize.kind'='random', -- 無界的隨機數 'fields.UniformityOfCellSize.min'='0', -- 隨機數的最小值 'fields.UniformityOfCellSize.max'='10', -- 隨機數的最大值 'fields.UniformityOfCellShape.kind'='random', -- 無界的隨機數 'fields.UniformityOfCellShape.min'='0', -- 隨機數的最小值 'fields.UniformityOfCellShape.max'='10', -- 隨機數的最大值 'fields.MarginalAdhsion.kind'='random', -- 無界的隨機數 'fields.MarginalAdhsion.min'='0', -- 隨機數的最小值 'fields.MarginalAdhsion.max'='10', -- 隨機數的最大值 'fields.SingleEpithelialCellSize.kind'='random', -- 無界的隨機數 'fields.SingleEpithelialCellSize.min'='0', -- 隨機數的最小值 'fields.SingleEpithelialCellSize.max'='10', -- 隨機數的最大值 'fields.BareNuclei.kind'='random', -- 無界的隨機數 'fields.BareNuclei.min'='0', -- 隨機數的最小值 'fields.BareNuclei.max'='10', -- 隨機數的最大值 'fields.BlandChromation.kind'='random', -- 無界的隨機數 'fields.BlandChromation.min'='0', -- 隨機數的最小值 'fields.BlandChromation.max'='10', -- 隨機數的最大值 'fields.NormalNucleoli.kind'='random', -- 無界的隨機數 'fields.NormalNucleoli.min'='0', -- 隨機數的最小值 'fields.NormalNucleoli.max'='10', -- 隨機數的最大值 'fields.Mitoses.kind'='random', -- 無界的隨機數 'fields.Mitoses.min'='0', -- 隨機數的最小值 'fields.Mitoses.max'='10' -- 隨機數的最大值);

          • 創(chuàng)建Sink


           CREATE TABLE `KafkaSink` (    ClumpThickness             INT,    UniformityOfCellSize       INT,    UniformityOfCellShape      INT,    MarginalAdhsion            INT,    SingleEpithelialCellSize   INT,    BareNuclei                 INT,    BlandChromation            INT,    NormalNucleoli             INT,    Mitoses                    INT ) WITH (     'connector' = 'kafka',                                  -- 可選 'kafka','kafka-0.11'. 注意選擇對應的內置  Connector     'topic' = 'topic-decision-tree-predict-1',              -- 替換為您要消費的 Topic     'properties.bootstrap.servers' = '172.28.28.211:9092',  -- 替換為您的 Kafka 連接地址     'properties.group.id' = 'RealTimeFeatures',             -- 必選參數, 一定要指定 Group ID     'format' = 'csv' );

          • 編寫業(yè)務SQL


           INSERT INTO `KafkaSink` SELECT * FROM `random_source`

          • 選擇Connector


          點擊【作業(yè)參數】,在【內置Connector】選擇flink-connector-kafka,點擊【保存】>【發(fā)布草稿】運行作業(yè)。

          • 查詢數據


          進入CKafka控制臺[3],選擇相應的CKafka示例進入,單擊【topic管理】,選擇對應的topic,查詢寫入數據。




          (三)實時預測


          本示例基于流計算Oceanus JAR作業(yè)方式演示,首先將存儲在CKafka的特征數據提取出來,經過簡單的數據格式轉換發(fā)送到TI-EMS服務進行模型調用,并將返回結果存儲在ClickHouse中。本示例使用單一的在線推理服務,用戶可根據自己實際需求做負載均衡。

          • 啟動模型服務


          進入TI-ONE控制臺[8],點擊左側【模型倉庫】,選擇對應的模型服務單擊【啟動模型服務】,【資源組】選擇之前創(chuàng)建好的專用資源組。創(chuàng)建成功之后返回TI-EMS控制臺[10],在左側的【模型服務】>【在線推理】頁面查看所創(chuàng)建的模型服務。


          • 公網調用模型測試


          • 單擊右側【更多】>【調用】,創(chuàng)建公網調用地址。



          • 啟動控制臺,新建data.json文件,在某一文件夾下運行如下代碼:


          # 請將 <訪問地址>/<密鑰> 替換為實際的 IP 地址/密鑰curl -H "Content-Type: application/json" \-H "x-Auth-Token: <密鑰>" \-X POST <訪問地址>/v1/models/m:predict -d @data.json

          data.json數據格式如下:

          {"instances" : [{"_c0": 3, "_c1": 2, "_c2": 3, "_c3": 0, "_c4": 0, "_c5": 2, "_c6": 1, "_c7": 0, "_c8": 1}]}

          模型調用返回結果如下:

          {"predictions": [{"pmml(prediction)":"1","probability(0)":"0.47058823529411764","probability(1)":"0.5294117647058824","prediction":"1.0","label":"1"}]}

          • 通過流計算Oceanus調用模型服務


          除了可以使用公網調用模型外,還可以使用VPC方式調用模型。本小節(jié)著重介紹如何使用流計算Oceanus JAR作業(yè)的方式調用模型進行實時預測。


          • 本地代碼開發(fā)、調試。


          • 進入流計算Oceanus控制臺[2],單擊左側【依賴管理】新建依賴并上傳JAR包。?


          • 進入【作業(yè)管理】頁面,創(chuàng)建JAR作業(yè),選擇之前創(chuàng)建好的流計算Oceanus集群。?


          • 單擊【開發(fā)調試】指定相應的主程序包和主類,點擊【作業(yè)調試】,【內置Connector】選擇flink-connector-clickhouse和flink-connector-kafka。


          ClickHouse數據查詢


          Java代碼如下

          import org.apache.flink.api.common.functions.FlatMapFunction;import org.apache.flink.api.common.restartstrategy.RestartStrategies;import org.apache.flink.api.common.serialization.SimpleStringSchema;import org.apache.flink.api.java.utils.ParameterTool;import org.apache.flink.streaming.api.datastream.DataStream;import org.apache.flink.streaming.api.environment.CheckpointConfig;import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;import org.apache.flink.streaming.api.functions.source.SourceFunction;import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer;import org.apache.flink.table.api.Table;import org.apache.flink.util.Collector;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.HttpClientBuilder;import org.apache.http.util.EntityUtils;import org.apache.kafka.clients.consumer.ConsumerConfig;import org.json.JSONObject;import org.slf4j.LoggerFactory;import org.slf4j.Logger;import java.util.ArrayList;import java.util.Properties;import org.apache.flink.table.api.EnvironmentSettings;import org.apache.flink.table.api.bridge.java.StreamTableEnvironment;
          public class OnlinePredict {
          public static final Logger logger = LoggerFactory.getLogger(OnlinePredict.class);
          public static void main(String[] args) throws Exception { // kafka配置參數解析 final ParameterTool parameterTool = ParameterTool .fromPropertiesFile(OnlinePredict.class.getResourceAsStream("/KafkaSource.properties")); // 實例化運行環(huán)境 EnvironmentSettings settings = EnvironmentSettings .newInstance() .useBlinkPlanner() .inStreamingMode() .build(); StreamExecutionEnvironment streamEnv = StreamExecutionEnvironment.getExecutionEnvironment(); StreamTableEnvironment tableEnv = StreamTableEnvironment.create(streamEnv, settings);
          // checkpoint配置 streamEnv.enableCheckpointing(parameterTool.getLong("flink.stream.checkpoint.interval", 30_000)); streamEnv.getCheckpointConfig().enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION); // 重啟策略 streamEnv.getConfig().setRestartStrategy(RestartStrategies.fixedDelayRestart(4, 10_000)); // source、transfer、sink DataStream stringResult = streamEnv.addSource(buildKafkaSource(parameterTool)) .flatMap(new FlatMapFunction() { @Override public void flatMap(String value, Collector out) throws Exception { String paramInput = inputDataTransfer(value); String outputData = sendHttpData(paramInput); out.collect(outputData); } });
          Table tableResult = tableEnv.fromDataStream(stringResult); tableEnv.createTemporaryView("resultSink",tableResult);
          tableEnv.executeSql("CREATE TABLE `CKSink` (\n" + " res STRING,\n" + " PRIMARY KEY (`res`) NOT ENFORCED\n" + ") WITH (\n" + " 'connector' = 'clickhouse',\n" + " 'url' = 'clickhouse://172.28.1.138:8123',\n" + " 'database-name' = 'testdb',\n" + " 'table-name' = 'model_predict_result_1',\n" + " 'table.collapsing.field' = 'Sign'\n" + ")");
          tableEnv.executeSql("insert into CKSink select * from resultSink");
          }
          // kafka source public static SourceFunction buildKafkaSource(ParameterTool parameterTool) throws Exception { Properties properties = new Properties();
          properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, parameterTool.get("kafka.source.bootstrap.servers")); properties.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, parameterTool.get("kafka.source.auto.offset.reset", "latest")); properties.put(ConsumerConfig.GROUP_ID_CONFIG, parameterTool.get("kafka.source.group.id"));
          FlinkKafkaConsumer consumer = new FlinkKafkaConsumer( parameterTool.get("kafka.source.topic"), new SimpleStringSchema(), properties); consumer.setStartFromGroupOffsets();
          return consumer; }
          // kafka 數據格式轉換 // 返回數據格式:{"instances" : [{"_c0": 3, "_c1": 2, "_c2": 3, "_c3": 0, "_c4": 0, "_c5": 2, "_c6": 1, "_c7": 0, "_c8": 1}]} public static String inputDataTransfer(String value) { String[] input = value.split(","); ArrayList dataListMap = new ArrayList(); JSONObject jsondata = new JSONObject(); for (int i = 0; i < input.length; i++) { jsondata.put("_c" + i, Double.parseDouble(input[i])); } dataListMap.add(jsondata); String param = "{\"instances\":" + dataListMap.toString() + "}"; return param; }
          // TI-EMS 模型在線推理服務調用 // 返回數據格式如下:{"predictions": [{"pmml(prediction)":"1","probability(0)":"0.47058823529411764","probability(1)":"0.5294117647058824","prediction":"1.0","label":"1"}]} public static String sendHttpData(String paramJson) throws Exception { String data = null; try { // 請將 xx.xx.xx.xx:xxxx 替換為實際的 IP 地址,參考 3.2.2 圖中所示 創(chuàng)建 VPC 調用 String url = "http://xx.xx.xx.xx:xxxx/v1/models/m:predict"; HttpClient client = HttpClientBuilder.create().build(); HttpPost post = new HttpPost(url);
          post.addHeader("Content-type", "application/json"); post.addHeader("Accept", "application/json"); // 請將 xxxxxxxxxx 替換為實際密鑰,參考 3.2.2 圖中所示 創(chuàng)建 VPC 調用 post.addHeader("X-AUTH-TOKEN", "xxxxxxxxxx");
          StringEntity entity = new StringEntity(paramJson, java.nio.charset.Charset.forName("UTF-8")); post.setEntity(entity); HttpResponse response = client.execute(post);
          // 判斷是否正常返回 if (response.getStatusLine().getStatusCode() == 200) { // 解析數據 HttpEntity resEntity = response.getEntity(); data = EntityUtils.toString(resEntity); } else { data = "error input"; } System.out.print(data); System.out.println(data); } catch (Throwable e) { logger.error("", e); } return data; }
          }

          Kafka Source參數配置

          # source // 請?zhí)鎿Q為實際的參數kafka.source.bootstrap.servers=172.28.28.211:9092kafka.source.topic=topic-decision-tree-predict-1kafka.source.group.id=RealTimePredict1kafka.source.auto.offset.reset=latest

          POM依賴

          <properties>    <flink.version>1.11.0flink.version>properties>
          <dependencies>
          <dependency> <groupId>org.apache.flinkgroupId> <artifactId>flink-streaming-java_2.11artifactId> <version>${flink.version}version> <scope>providedscope> dependency>
          <dependency> <groupId>org.apache.flinkgroupId> <artifactId>flink-connector-kafka_2.11artifactId> <version>${flink.version}version> <scope>providedscope> dependency>
          <dependency> <groupId>org.apache.flinkgroupId> <artifactId>flink-connector-clickhouseartifactId> <version>${flink.version}version> <scope>providedscope> dependency>
          <dependency> <groupId>org.apache.flinkgroupId> <artifactId>flink-table-commonartifactId> <version>${flink.version}version> <scope>providedscope> dependency>
          <dependency> <groupId>org.apache.flinkgroupId> <artifactId>flink-table-api-java-bridge_2.11artifactId> <version>${flink.version}version> <scope>providedscope> dependency>
          <dependency> <groupId>org.apache.flinkgroupId> <artifactId>flink-table-api-javaartifactId> <version>${flink.version}version> <scope>providedscope> dependency>
          <dependency> <groupId>org.apache.httpcomponentsgroupId> <artifactId>httpclientartifactId> <version>4.5.3version> <scope>compilescope> dependency>
          <dependency> <groupId>org.jsongroupId> <artifactId>jsonartifactId> <version>20201115version> <scope>compilescope> dependency>
          dependencies>


          四、總結


          • 新版Flink 1.13集群無需用戶自己選擇內置Connector,平臺將自動匹配。


          • 除了使用CKafka及ClickHouse作為數據倉庫外,還可以使用Hive、Mysql、PG等作為數倉,根據用戶實際需求自行選擇。


          • 本方案最簡化了實時特征工程,用戶可以根據自身業(yè)務需求采用SQL、JAR、ETL作業(yè)的方式完成實時特征工程。


          • 本方案只初始化了一個PMML服務提供流計算Oceanus調用,如遇數據背壓情況可增多PMML服務循環(huán)調用。


          • TI-ONE、TI-EMS平臺暫時不支持實時訓練模型,如需更新模型可以自行編寫定時腳本拉取數據在TI-ONE平臺訓練更新。



          五、參考地址


          [1] VPC幫助文檔:https://cloud.tencent.com/document/product/215/36515
          [2] Oceanus控制臺:https://console.cloud.tencent.com/oceanus/job ?
          [3] CKafka控制臺:https://console.cloud.tencent.com/ckafka/overview ?
          [4] COS控制臺:https://console.cloud.tencent.com/cos5 ?
          [5] COS控制臺快速入門:https://cloud.tencent.com/document/product/436/38484 ?
          [6] ClickHouse控制臺:https://console.cloud.tencent.com/cdwch ?
          [7] ClickHouse快速入門:https://cloud.tencent.com/document/product/1299/49824 ?
          [8] TI-ONE控制臺:https://console.cloud.tencent.com/tione ?
          [9] 注冊與開通TI-ONE服務:https://cloud.tencent.com/document/product/851/39086
          [10] TI-EMS控制臺:https://console.cloud.tencent.com/tiems/overview ?
          [11] TI-EMS資源組管理:https://cloud.tencent.com/document/product/1120/38968 ?
          [12] 乳腺癌數據集:https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/ ?
          [13] 乳腺癌預測:https://cloud.tencent.com/document/product/851/35127 ?
          [14] 使用可視化建模構建模型:https://cloud.tencent.com/document/product/851/44432 ?
          [15] 使用Notebook構建模型:https://cloud.tencent.com/document/product/851/44434?
          [16] 使用TI SDK構建模型:https://cloud.tencent.com/document/product/851/44435 ?

          流計算Oceanus限量秒殺專享活動火爆進行中↓↓




          ??點擊「閱讀原文」了解騰訊云流計算Oceanus更多信息~
          瀏覽 59
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久依人网| www.大香蕉伊人 | 国产91白丝jk无套进入在线播放 | 免费看电影黄片一级片 | 又黄又骚的网站免费看 |