v1.2-fixPicMarkdown
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
在openGauss中提供了完善的日志系统,其中的审计日志中就记录了用户每次的操作,日志中每一条记录表示: 时间t用户A对客体B进行了操作C。首先对原始的审计日志进行筛选过滤去除噪声记录,然后使用特征工程设计了基于统计学上的特征。最后让AI模型使用前面的特征自动学习数据更深层的特征。最后模型具有识别不同类型用户的能力。
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# openGauss中的AI模块调研
|
||||
*Tang Wuguo, tangwg@csu.edu.cn*
|
||||
|
||||
这篇博客中对openGauss中的AI模块进行介绍,并且以iris鸢尾花数据集为例介绍AI模块的使用.
|
||||
这篇博客中对openGauss中的[AI模块](https://docs.opengauss.org/zh/docs/5.0.0/docs/AIFeatureGuide/AI%E7%89%B9%E6%80%A7.html)进行介绍,并且以iris鸢尾花数据集为例介绍AI模块的使用.
|
||||
|
||||
openGauss将AI与数据库结合,其中的AI特性大致可分为AI4DB和DB4AI两个部分:
|
||||
|
||||
|
|
@ -10,15 +10,15 @@ openGauss将AI与数据库结合,其中的AI特性大致可分为AI4DB和DB4AI
|
|||
|
||||
## DB4AI概要
|
||||
在我们的用户操作模型的构建中,主要使用DB4AI模块,借助其中的类似SQL语句的形式,直接在openGauss数据库中对数据进行建模、训练及预测。
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
## 鸢尾花分类模型实践
|
||||
下面我们已鸢尾花数据集为例,使用openGauss中的DB4AI模块搭建两种模型:二分类模型,多分类模型。同时还利用内置的函数`_gs_explain_model_`查看模型的详细信息,`_PREDICT BY_`关键字来进行模型的推理。
|
||||
### Iris数据集
|
||||
iris数据集是ML中最经典的数据集之一,其中共包括150个样本,对于每个样本有花萼长度、花萼宽度、花瓣长度、花瓣宽度4个特征,我们需要依据这4个特征区分3种花型:山鸢尾、变色鸢尾还是维吉尼亚鸢尾。
|
||||

|
||||

|
||||
### 划分数据集
|
||||
我们对iris数据集随机打乱,选择80%的数据作为训练集,剩下的作为测试集。
|
||||
训练集用于模型的训练,模型训练好后可以分别在计算训练集和测试集上的准确率。
|
||||
|
|
@ -43,7 +43,7 @@ WHERE row_num > total_rows * 0.8;
|
|||
```
|
||||
|
||||
### 二分类模型
|
||||
假定我们现在的目标是要区分是否为山鸢尾,yes or no,这是一个二分类问题,这里我们选择使用逻辑回归来解决。
|
||||
假定我们现在的目标是要区分是否为山鸢尾,yes or no,这是一个二分类问题,这里我们选择使用逻辑回归算法来解决。
|
||||
|
||||
**CREATE MODEL**
|
||||
```sql
|
||||
|
|
@ -56,11 +56,11 @@ WITH batch_size=20;
|
|||
执行上面的脚本后正常会输出:`MODEL CREATED. PROCESSED 1`
|
||||
表示模型构建好了,下面测试模型的预测效果
|
||||
通过查询`gs_model_warehouse`表可以看到数据库中的所有模型
|
||||

|
||||

|
||||
通过使用`gs_explain_model`函数可以查看指定模型的详细参数:
|
||||
`select gs_explain_model('iris_m1');`
|
||||

|
||||

|
||||

|
||||
|
||||
|
||||
**PREDICT BY**
|
||||
```sql
|
||||
|
|
@ -75,8 +75,7 @@ PREDICT BY iris_m1 (FEATURES sepal_length,sepal_width,petal_length,petal_width)
|
|||
target_id < 2 as "LABEL"
|
||||
FROM iris_test;
|
||||
```
|
||||

|
||||

|
||||

|
||||
|
||||
**计算分类准确率**
|
||||
准备率 = 分类正确的数量 / 样本总数
|
||||
|
|
@ -96,7 +95,7 @@ SELECT
|
|||
END AS accuracy
|
||||
FROM temp_pred;
|
||||
```
|
||||

|
||||

|
||||
|
||||
### 多分类模型
|
||||
假定现在的任务是给定一个样本要预测是3种花型中的哪一种,这是一个多分类的问题。
|
||||
|
|
@ -125,12 +124,11 @@ SELECT
|
|||
FROM temp_pred;
|
||||
```
|
||||
batch_size=20
|
||||

|
||||

|
||||

|
||||
|
||||
经过调节超参数batch_size=4,在训练集上的结果可以提升
|
||||

|
||||

|
||||

|
||||
|
||||
|
||||
## 小结
|
||||
最后总结下使用openGauss中AI模块的流程
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 118 KiB |
|
After Width: | Height: | Size: 112 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 166 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 117 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
|
|
@ -6,11 +6,9 @@
|
|||
## 1.日志位置
|
||||
查询到各种配置文件的路径:
|
||||
例如postgresql.conf文件路径:`/var/lib/opengauss/data/postgresql.conf`
|
||||

|
||||
查看审计日志的文件夹名:
|
||||

|
||||
审计日志完整路径:`/var/lib/opengauss/data/pg_audit`
|
||||

|
||||

|
||||
查看审计日志的文件夹名:`show audit_directory;` 默认是pg_audit
|
||||
所以审计日志完整路径为:`/var/lib/opengauss/data/pg_audit`
|
||||
|
||||
|
||||
## 2.比较OG和PG 中的日志管理
|
||||
|
|
@ -119,7 +117,7 @@ select * from pg_query_audit('2023-05-18 00:00:00','2025-05-18 08:00:00');
|
|||
2021-03-04 08:00:08+08 | login_success | ok | 10 | omm | postgres | gsql@::1 | postgres | login db(postgres) success, SSL=off | dn_6001_6002_6003 | 140477687527168@668131208211425 |17778 | 46946
|
||||
|
||||
```
|
||||

|
||||
|
||||
### 3.4审计日志存储到表格
|
||||
在前面我们可以通过查询语句查看日志,但是仍不方便。我们可以使用下面的语句将查询到的日志信息存储到表格中,方便我们观察、过滤日志信息。
|
||||
```sql
|
||||
|
|
@ -146,7 +144,8 @@ CREATE TABLE audit_log
|
|||
SELECT * INTO audit_log FROM pg_query_audit('2023-05-18 00:00:00','2025-05-18 08:00:00');
|
||||
|
||||
```
|
||||

|
||||
审计日志的格式如下图所示:
|
||||

|
||||
|
||||
|
||||
*参考资料*
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# 设计文档
|
||||
*Tang Wuguo, tangwg@csu.edu.cn*
|
||||
|
||||
首先我们明确一下将用户的画像问题看作一个多分类任务,确定好模型的输入输出。模型的输入是设计好的用户操作特征,模型输出的是该用户的类型。而要从原始的审计日志到用户特征需要经过特征工程模块;在用户操作模型中选用的是openGauss中定义好的机器学习模型。
|
||||
首先我们明确一下将用户的画像问题看作一个多分类任务,确定好模型的输入输出。模型的输入是设计好的用户操作特征,模型输出的是该用户的类型。而要从原始的审计日志到用户特征需要经过特征工程模块;在用户操作模型中选用的是openGauss中定义好的机器学习模型。
|
||||
整体的流程如下图所示:
|
||||
|
||||
1. 首先需要收集指定时间段的审计审计日志
|
||||
|
|
@ -11,14 +11,14 @@
|
|||
5. 根据指标的好坏,我们可以调整模型的超参数,使得模型在训练集上分类得更好;
|
||||
6. 选定好超参数后模型就可以部署上线,之后数据库中又会产生许多的用户操作日志,我们可以重新收集日志来迭代模型;
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
## 1.模拟审计日志
|
||||
由于没有找到公开的审计日志可以使用,于是设计了一个多数据库用户操作的教务管理系统,并使用python脚本模拟各个用户操作数据库,从而得到审计日志。
|
||||
|
||||
模拟日志流程:
|
||||

|
||||

|
||||
|
||||
### 1.1数据库db_school设计
|
||||
该数据库包括两个模式,教务管理系统中的各种数据存在public模式下;操作日志、操作模型相关的数据都存在pm模式下。
|
||||
|
|
@ -29,10 +29,10 @@
|
|||
课程表(课程号,授课老师工号,课程名,学分)
|
||||
成绩表(学号,课程号,成绩)
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
### 1.2多用户设计
|
||||
opengauss:超级管理员,创建用户pm
|
||||
|
|
|
|||