特征管理

本文介绍了在PolarDB for AI中,特征管理的适用场景,以及创建特征、更新特征、查看特征状态、查看特征列表以及删除特征的语法及其示例内容。

适用场景

从原始数据直接构建机器学习模型往往比较困难。机器学习模型的输入一般会先对原始数据进行处理或计算,得到新的数据。原始数据和已加工的数据则作为特征。

例如,如果我们有一个数据集,其中包含了关于房屋的信息,比如面积、卧室数量、地理位置、建造年份等,那么每一项信息都可以被视为一个特征。

特征的选择和准备对于构建有效的机器学习模型至关重要。良好的特征可以大幅提高模型的性能,而不相关或冗余的特征可能会干扰模型的学习过程,导致性能下降。

特征工程可能包括选择最相关的特征、将原始数据转换为更适合机器学习算法的格式、创建从原始数据派生的新特征等。

以下是一些常见的特征使用场景:

  • 分类问题

    • 邮件分类:使用邮件内容的单词和短语作为特征来识别垃圾邮件。

    • 图片识别:使用像素值、颜色、纹理、形状等特征来进行图像分类。

    • 客户流失预测:使用客户历史交易数据、活跃度、购买频率等特征来预测客户是否会流失。

  • 回归问题

    • 房价预测:使用房屋的位置、面积、房龄、周边设施等特征来预测房价。

    • 股票价格预测:使用历史价格、交易量、经济指标等特征来预测未来股价。

  • 聚类问题

    • 市场细分:使用顾客的购买历史、偏好、人口统计信息等特征进行客户分群。

    • 社交网络分析:使用用户的社交活动数据、连接性等特征来发现社交网络中的群体。

  • 推荐系统

    • 电影推荐:使用用户的观看历史、评分、电影的类型、演员等特征来推荐电影。

    • 商品推荐:使用用户的购买历史、浏览行为、产品属性等特征来推荐商品。

  • 时间序列分析

    • 天气预测:使用历史天气数据、日期、节气等特征来预测未来的天气状况。

    • 财务预测:使用公司的财务报表数据、市场趋势等特征来预测财务状况。

  • 异常检测

    • 信用卡欺诈检测:使用交易的时间、地点、金额等特征来识别异常交易。

    • 网络安全:使用网络流量数据、连接类型、流量大小等特征来检测网络攻击。

  • 自然语言处理(NLP)

    • 情感分析:使用单词、短语、句子结构等特征来分析文本的情感倾向。

    • 机器翻译:使用单词、语法结构、上下文等特征来帮助机器进行语言翻译。

  • 计算机视觉

    • 人脸识别:使用人脸的关键点、轮廓、纹理等特征来识别个人。

    • 对象检测:使用物体的形状、大小、颜色等特征来检测图片中的对象。

特征在各个领域都有着广泛的应用。特征选取和工程化是模型构建过程中非常关键的步骤,它们对模型的性能有着直接的影响。

创建特征

特征的创建过程是异步的,需要通过查询特征的状态来判断当前特征是否创建成功。

语法说明

  • 基于数据库中的数据来创建特征。

    CREATE FEATURE feature_name WITH (feature_class= '',parameters=()) AS (SELECT select_expr[, select_expr] ... FROM table_reference)
  • 基于已有的特征来创建新的特征。

    CREATE FEATURE feature_name WITH (feature_class = '',parameters=()) USING FEATURE feature_reference

参数说明

参数

说明

feature_name

特征名称。

feature_class

特征的类型。取值如下:

  • graph:构建图。基于数据库中的数据来创建特征时使用该值。

  • connected_subgraph:构建连通子图。基于已有特征来创建新特征时使用该值。且只能基于由graph创建的特征来创建连通子图。

  • iv:用于对输入特征变量进行编码,同时评估特征变量的预测能力。取值范围为0到正无穷。基于数据库中的数据来创建特征时使用该值。详情请参见IV算法

  • none_value:计算特征缺失比例,以此来判断特征的可用程度。基于数据库中的数据来创建特征时使用该值。

    说明
    • 如果特征缺失比例过高(>=0.8),可能会考虑丢弃该特征。

    • 如果特征缺失比例不高,可以考虑使用平滑操作来减少因特征带来的影响。

  • pearson:判断两个特征之间的线性关系。基于数据库中的数据来创建特征时使用该值。详情请参见Pearson相关系数

  • psi:检查数据的实际分布和期望分布的差异,以评估模型的稳定性。基于数据库中的数据来创建特征时使用该值。详情请参见群体稳定性指标PSI

parameters

创建特征时用户自定义的参数。

select_expr

用于创建特征的列名。

table_reference

用于创建特征的列所在的表的名称。

feature_reference

已存在的特征名称。

示例

  • 基于数据库中的数据来创建特征。

    /*polar4ai*/create feature test_graph_1 with (feature_class='graph') as (select ip, user_id from small_sample limit 30)

    执行结果如下:

    Query OK, 0 rows affected (0.79 sec)
  • 基于已有的特征来创建新的特征。

    /*polar4ai*/create feature test_subgraph_1 with (feature_class='connected_subgraph') using feature test_graph_1

    执行结果如下:

    Query OK, 0 rows affected (0.79 sec)

更新特征

更新特征的过程是异步的,需要通过查询特征状态来判断当前特征是否更新完成。

语法说明

UPDATE FEATURE feature_name WITH (feature_class = '',parameters=()) AS (SELECT select_expr [, select_expr] ... FROM table_reference)

参数说明

参数

说明

feature_name

特征名称。

feature_class

特征的类型,固定为graph。

parameters

创建特征时用户自定义的参数。

select_expr

用于更新已创建的特征的列名。

说明
  • 如果待更新的列与特征中已存在的列的列名不同但含义相同,则待更新的列名与特征中已存在的列的名称需要保持一致,您可以通过起别名的方式来保持列名一致。

  • 如果待更新的列与特征中已存在的列的列名相同但含义不同,则待更新的列名不能与特征中已存在的列的名称相同,您可以通过起别名的方式来区分列名。

table_reference

用于更新已创建的特征的列所在的表的名称。

示例

将特征test_subgraph_1的列修改为small_sample表中的ipuser_id列。

/*polar4ai*/update feature test_graph_1 with (feature_class='graph') as (select ip, user_id from small_sample limit 30)

执行结果如下:

Query OK, 0 rows affected (0.79 sec)

查看特征状态

查看特征当前的状态,一般情况下,在创建特征或更新特征之后,用来查询特征是否创建或更新成功。特征的状态有以下几种:

  • INIT:特征初始化完毕。

  • PREPARING:特征所需数据准备中。

  • PREPARED:特征所需数据准备完成。

  • COMPUTING:特征计算中。

  • COMPUTED:特征计算完成。

  • RESTORING:特征计算结果存储中。

  • RESTORED:特征计算结果存储完成。

  • FINISHED:特征计算结束。

  • FAILED:特征计算失败。

语法说明

SHOW FEATURE feature_name 

参数说明

参数

说明

feature_name

特征名称。

示例

查看test_subgraph_1特征状态。

/*polar4ai*/show feature test_subgraph_1;

执行结果如下:

+-----------+-------------------------------------------------------------------------------------------------------------------------------+
| CSGStatus | featurePath                                                                                                                   |
+-----------+-------------------------------------------------------------------------------------------------------------------------------+
| FINISHED  | http://db4ai-collie-cn-hangzhou-dataset.oss-cn-hangzhou.aliyuncs.com/xxxx.txt?OSSAccessKeyId=xxxx&Expires=xxxx&Signature=xxxx |
+-----------+-------------------------------------------------------------------------------------------------------------------------------+
说明

featurePath的有效时间为100分钟,您可以通过featurePath中的Expires参数查看链接是否在有效期内。如果您需要访问该链接,请在有效期内进行访问。

查看特征列表

查看当前集群下的所有特征。

语法说明

SHOW FEATURES

示例

/*polar4ai*/show features;

执行结果如下:

+--------------------+-----------------+----------------+
| feature_class      | feature_name    | feature_status |
+--------------------+-----------------+----------------+
| connected_subgraph | test_subgraph_1 | DELETED        |
| graph              | test_graph_1    | FINISHED       |
+--------------------+-----------------+----------------+
2 rows in set (0.32 sec)

删除特征

删除已经创建的特征。

语法说明

DROP FEATURE feature_name 

参数说明

参数

说明

feature_name

特征名称。

示例

删除已经创建的特征test_subgraph_1

/*polar4ai*/drop feature test_subgraph_1

执行结果如下,表示已成功删除特征:

Query OK, 0 rows affected (0.69 sec)