模型及算法

RDS SQLFlow模型库中提供了多种不同的模型,适用于各种业务场景。您可以根据所需解决问题的类型选择合适的模型。本文将介绍不同的模型及其算法。

模型简介

分类模型

分类模型用于解决数据集中存在两个或多个类别的情况,以推测新的数据属于哪个类别,进而解决“是或否”(二分类)及“AB还是C”(多分类)的问题。

适用场景

  • 图像分类:应用于手写数字识别、物体识别等任务。

  • 文本分类:执行情感分析、垃圾邮件识别等相关任务。

  • 推荐系统:在电子商务领域,预测用户的购买意向等相关行为。

  • 医疗诊断:通过分析患者数据以预测疾病风险等。

回归模型

回归模型适用于数据中已存在的某些关联关系,能够根据这些关系在新的数据集上预测连续值。该模型基于输入变量(特征)与输出变量(目标)之间的关系进行建模,旨在解决“有多少”的问题。

适用场景

  • 经济学:通过预测房价、股票价格等经济指标,线性回归能够有效地帮助我们理解不同变量之间的关系。

  • 医学领域:通过特征(如生活方式、基因信息等)来预测健康结果,例如血糖水平。

  • 市场营销:分析广告支出与销售额之间的关系,以优化营销策略。

  • 工程:可用于预测产品性能,并基于多种参数对结果进行建模。

  • 社会科学:研究社会现象,例如教育水平对收入的影响。

聚类模型

聚类模型适用于在数据集中发现规律特征,并生成新数据实例的模型,旨在解决“数据中有什么”的问题。聚类模型是机器学习领域的一种无监督学习方法,其主要目标是根据特征相似性将一组样本进行分组,使得同一组内的样本彼此相似,而不同组之间的样本差异显著。聚类模型在数据分析和模式识别领域得到了广泛应用,因为它们能够在无标签的情况下有效地识别数据中的潜在结构。

适用场景

  • 客户细分:商家可以利用聚类分析对顾客的行为模式和偏好进行深入研究,以实施精准营销策略。

  • 图像处理:在图像分类和对象识别过程中,可以通过聚类将具有相似特征的像素归类于同一类别。

  • 异常检测:通过识别不属于任何聚类的样本,以发现潜在的异常值,例如在网络安全领域中的攻击检测。

  • 文档聚类:将大量文档根据主题或内容进行分组,有助于信息检索和数据整理。

  • 生物信息学:在基因表达数据分析中,聚类分析能够辅助研究者识别相似的基因群体。

分类模型

DNNClassifier

算法介绍

DNNClassifierTensorFlow 提供的一个高级API,用于构建深度神经网络(DNN)模型,主要用于二分类或多分类的预测。该API通过多层全连接网络来捕捉数据中的非线性关系,并通过训练优化权重和偏置,从而最小化模型输出与实际类别之间的损失。

DNNClassifier具有以下特点:

  • 易用性:提供高级API,简化了深度学习模型的构建流程。

  • 模块化:能够灵活配置网络结构,例如隐藏层的数量和规模。

  • 并行训练:可以利用多核CPUGPU加速训练过程。

  • 支持多种输入特征:支持数值型和类别型特征的混合。

参数说明

参数

说明

model.hidden_units

DNN模型中,每个隐层的神经元个数,例如[128, 32],表示该模型包含两个隐层,且各隐层的神经元个数分别为12832。

model.n_classes

模型可分类的类别总数(适用于分类器模型),例如:2 表示模型将数据分为两类。

model.optimizer

配置模型训练所使用的优化器。

model.batch_norm

是否在每个隐层之后使用batch_norm。取值:

  • True:表示使用。

  • False:默认值,表示不使用。

model.dropout

配置dropout概率,比如:0.5,默认值为None。

使用示例

###训练
SELECT * FROM iris.train TO TRAIN DNNClassifier WITH
  model.n_classes = 3,
  train.epoch = 10
COLUMN sepal_length, sepal_width, petal_length, petal_width
LABEL class
INTO sqlflow_models.my_dnn_model;

##预测
SELECT * FROM iris.test
TO PREDICT iris.predict.class
USING sqlflow_models.my_dnn_model;

XGBoost gbtree

算法介绍

XGBoost(Extreme Gradient Boosting)是一种高效的梯度提升树(Gradient Boosting Tree)算法,广泛应用于分类和回归问题。其gbtree模型专注于使用决策树作为基学习器。

该算法具有以下特点:

  • 高性能:在许多分类任务中,与传统方法相比,BoostedTreesClassifier通常能够实现更高的准确性。

  • 适应性强:能够自动评估特征的重要性,适应不同的数据分布。

  • 可解释性:通过特征重要性分析,可以了解模型如何做出决策。

  • 防止过拟合:通过正则化手段,Boosted Trees能够有效对抗过拟合问题,尤其是在遍历深层树时。

  • 处理缺失值的能力:能够较好地处理样本中的缺失值,确保不会因缺失值而导致预处理问题。

  • 支持并行化及分布式训练:在大规模数据集上能够更高效地训练模型。

使用示例

## 用于二分类
SELECT * FROM train_table
TO TRAIN xgboost.gbtree
WITH objective="binary:logistic", validation.select="SELECT * FROM val_table"
LABEL class
INTO my_xgb_classification_model;

## 用于多分类
SELECT * FROM train_table	
TO TRAIN xgboost.gbtree
WITH objective="multi:softmax", num_class=3, validation.select="SELECT * FROM val_table"
LABEL class
INTO my_xgb_classification_model;

## 用于回归任务
SELECT * FROM train_table
TO TRAIN xgboost.gbtree
WITH objective="reg:squarederror", validation.select="SELECT * FROM val_table"
LABEL target
INTO my_xgb_regression_model;

GCN

算法介绍

GCN(Graph Convolutional Network)是一种专门用于图数据的深度学习模型。它通过图卷积的方式处理图结构数据,能够有效捕捉节点之间的关系和特征传播,适用于分析具有复杂结构和关系的数据,例如社交网络、推荐系统和生物网络等。GCN处理的输入是图(Graph),该图由节点(Nodes)和边(Edges)组成。在许多业务场景中,数据可以自然地表示为图结构,例如社交网络和知识图谱等。GCN借用卷积神经网络中的卷积思想,通过邻接节点的信息更新每个节点的表示,使得节点的表示能够考虑到其邻域的特征。

适用场景

  • 社交网络分析:GCN可以用于社交网络中的用户推荐、关系预测、社区检测等任务。

  • 节点分类:例如在知识图谱中,可以对节点(实体)进行分类,预测某个实体所属的类别,例如品牌、产品等。

  • 图像分割:在像素构成的图像中应用GCN,可以增强图像分割和物体识别的效果。

回归模型

DNNRegressor

算法介绍

DNNRegressorTensorFlow提供的一个高级API,用于深度学习回归任务。它属于TensorFlow Estimator模块,用于处理结构化数据(例如表格或CSV格式的数据),并能够学习复杂的非线性关系,从而预测价格或概率等连续值输出。

参数说明

参数

说明

n_classes

模型可分类的类别总数(适用于分类器模型),例如:2 表示模型将数据分为两类。

optimizer

配置模型训练所使用的优化器。

sparse_combiner

指定当类别列输入包含多个相同值时的处理方法,例如:meansqrtnsum

使用示例

##训练
SELECT f9, target FROM housing.train
TO TRAIN DNNRegressor WITH model.hidden_units = [10, 20]
COLUMN EMBEDDING(CATEGORY_ID(f9, 1000), 2, "sum")
LABEL target
INTO housing.dnn_model;

##预测
SELECT f9, target FROM housing.test
TO PREDICT housing.predict.class USING housing.dnn_model;

RNNBasedTimeSeriesModel

算法介绍

RNNBasedTimeSeriesModel(简称RNN)是基于LSTM时间序列的预测模型,通过输入多个时间点的特征信息,预测未来多个时间点的表现。RNN是一种能够处理序列数据的神经网络,在每一个时间步,RNN不仅接收当前的输入数据,还考虑前一个时间步的状态信息。这使得RNN特别适合处理时间序列数据,例如股票价格、气象数据、自然语言处理等。

RNN具有以下特点:

  • 记忆能力:RNN能够存储先前输入的信息,使其能够捕捉时间序列中的长期依赖性。

  • 动态输入长度:RNN可以处理任意长度的输入序列,这对于时间序列数据尤为重要。

  • 非线性映射:RNN能够建立输入和输出之间的非线性关系,使其适用于复杂的时间序列预测任务。

  • 序列生成:RNN不仅可以用于预测,还可以用于生成新的时间序列,例如生成音乐或文本。

参数说明

参数

说明

model.stack_units

LSTM层数及每层的大小配置,默认值为:[500, 500]。

model.n_in

输入的时间点个数。

model.n_out

输出的时间点个数。

使用示例

##训练
SELECT sepal_length, sepal_width, petal_length, concat(petal_width,',',class) as class 
FROM iris.train 
TO TRAIN sqlflow_models.RNNBasedTimeSeriesModel WITH
    model.n_in=3,
    model.stack_units = [10, 10],
    model.n_out=2,
    model.model_type="lstm",
    validation.metrics= "MeanAbsoluteError,MeanSquaredError"
LABEL class
INTO sqlflow_models.my_dnn_regts_model_2;

##预测
SELECT sepal_length, sepal_width, petal_length, concat(petal_width,',',class) as class 
FROM iris.test 
TO PREDICT iris.predict_ts_2.class 
USING sqlflow_models.my_dnn_regts_model_2;

聚类模型

DeepEmbeddingClusterModel

算法介绍

DeepEmbeddingClusterModel(深度嵌入聚类模型)是一种结合了深度学习与聚类方法的模型。它主要用于自动学习数据的低维嵌入表示,并在这个嵌入空间中进行聚类。

DeepEmbeddingClusterModel主要特点如下:

  • 深度学习:利用深度神经网络进行数据的特征提取,能够自动学习数据的有用表示,捕捉复杂的非线性关系。

  • 嵌入表示:将高维数据投影到较低维度的嵌入空间中,从而简化聚类任务,提高聚类效果。

  • 聚类能力:在嵌入空间中直接进行聚类,使得同类数据点距离更近,从而提高聚类的精度和可解释性。

  • 泛化能力:由于深度学习的特性,模型通常具有较强的泛化能力,可以处理数据的噪声和复杂性。

  • 可扩展性:适合处理大规模数据集,能够通过深度学习方法进行有效的迭代和更新。

参数说明

参数

说明

model.n_clusters

聚类类别的数量,默认值:10。

model.kmeans_init

执行K-means算法的次数用于获得最佳中心点,默认值:20。

model.run_pretrain

是否执行预训练,默认值:True。

model.pretrain_dims

预训练autoencoder时,各隐层的维度,默认值:[500, 500, 2000, 10]。

model.pretrain_activation_func

autoencoder部分的激活函数,默认值:'relu'

model.pretrain_batch_size

autoencoder训练的批量大小,默认值:256。

model.train_batch_size

训练的批量大小,默认值:256。

model.pretrain_epochs

执行预训练的轮数,默认值:10。

model.pretrain_initializer

autoencoder参数的初始化方法,默认值:'glorot_uniform'

model.pretrain_lr

预训练的学习率,默认值:1。

model.train_lr

训练学习率,默认值:0.1。

model.train_max_iters

训练最大迭代步数,默认值:8000。

model.update_interval

更新目标分布的间隔步数,默认值:100 。

model.tol

容忍度(tol),默认值:0.001。

使用示例

##训练
SELECT (sepal_length - 4.4) / 3.5 as sepal_length, (sepal_width - 2.0) / 2.2 as sepal_width, (petal_length - 1) / 5.9 as petal_length, (petal_width - 0.1) / 2.4 as petal_width
FROM iris.train
TO TRAIN sqlflow_models.DeepEmbeddingClusterModel
WITH
  model.pretrain_dims = [10,10,3],
  model.n_clusters = 3,
  model.pretrain_epochs=5,
  train.batch_size=10,
  train.verbose=1
INTO sqlflow_models.my_clustering_model;

##预测
SELECT (sepal_length - 4.4) / 3.5 as sepal_length, (sepal_width - 2.0) / 2.2 as sepal_width, (petal_length - 1) / 5.9 as petal_length, (petal_width - 0.1) / 2.4 as petal_width
FROM iris.test
TO PREDICT iris.predict.class
USING sqlflow_models.my_clustering_model;

相关文档

RDS Custom简介