Jelajahi Sumber

doc: 文档更新,包括hdfs文件相关接口说明,机器学习参数说明

tscRubbish 4 tahun lalu
induk
melakukan
c6049086a5

TEMPAT SAMPAH
参考/~$eb前端结构.docx


+ 237 - 0
参考/前后端逻辑整理.md

@@ -0,0 +1,237 @@
+### 逻辑模块划分
+
+- 文件模块
+  - 文件上传
+  - 列表
+  - 文件修改
+- 数据分析模块
+  - 选择文件
+  - 选择特征字段,函数分析
+  - 分析结果
+- 模型管理
+  - 机器学习模型
+    - 特征字段选择
+    - 模型参数
+  - 深度学习模型
+    - 模型参数属性
+  - 模型属性参数列表
+- 模型训练和使用
+  - 模型训练
+  - 模型使用
+  - 模型结果
+
+
+
+### 文件模块逻辑
+
+#### 文件上传
+
+| API接口          | 输入数据                 | 返回数据     |
+| ---------------- | ------------------------ | ------------ |
+| /api/file/upload | 用户id,文件内容,文件名 | 文件上传结果 |
+
+补充:处理时建议加上用户id前缀,不然感觉会重名
+
+#### 文件列表展示
+
+| API接口                      | 输入数据 | 返回数据             |
+| ---------------------------- | -------- | -------------------- |
+| /api/file/get/all            | 用户id   | 文件id和名列表       |
+| /api/file/get/detail         | 文件id   | FileDetail数据       |
+| /api/file/get/allfileandfunc | 用户id   | 文件名和分析函数列表 |
+
+暂定逻辑:
+
+先通过get/all获取所有文件id,依次查询get/detail获取详细信息。当用户选择显示分析函数时,调用get/allfileandfunc
+
+#### 文件修改
+
+| API接口          | 输入数据 | 返回数据 |
+| ---------------- | -------- | -------- |
+| /api/file/delete | 文件id   | 删除结果 |
+
+暂定逻辑:包括修改和删除
+
+用户选择删除文件时,前端调用/delete,传入get/all中获取的文件id
+
+/update暂时不太明白如何使用,参数太多
+
+
+
+### 数据分析模块
+
+#### 选择文件
+
+| API接口              | 输入数据 | 返回数据       |
+| -------------------- | -------- | -------------- |
+| /api/file/get/all    | 用户id   | 文件id和名列表 |
+| /api/file/get/detail | 文件id   | FileDetail数据 |
+
+#### 特征字段选择,函数分析
+
+| API接口                   | 输入数据           | 返回数据                       |
+| ------------------------- | ------------------ | ------------------------------ |
+| /api/file/analysis        | 文件id             | 获取文件分析信息,包括字段列表 |
+| /api/file/analysis/fields | 字段id列表和函数id | 分析结果object                 |
+
+注意:根据funcId查询函数信息,获得funcName
+
+需要在后端数据库导入函数数据才能调用analysis/fields
+
+注意:这里的fieldId(字段ID)对应的应该是/analysis接口中返回的headinfo中的id
+
+
+
+##### 暂定逻辑:
+
+先通过analysis进行自动分析,获得字段列表
+
+在选择字段界面选择后,传入字段id列表,调用/analysis/fields进行字段分析
+
+用户可以选择保存为config
+
+#### 分析结果
+
+| API接口                      | 输入数据 | 返回数据             |
+| ---------------------------- | -------- | -------------------- |
+| /api/file/get/detail         | 文件id   | FileDetail数据       |
+| /api/file/get/allfileandfunc | 用户id   | 文件名和分析函数列表 |
+
+##### 用户查看函数分析结果:
+
+对/analysis的字段列表和/analysis/fields返回的分析数据进行可视化
+
+目前后端似乎并没有找到持久化保存文件分析结果的相关接口和逻辑,只有几个获取文件数据的接口可用
+
+
+
+### 模型配置模块(机器学习模型)
+
+现有问题:后端并没有可以更改model的config内容的接口,所以只能先创建config,在创建模型时要求填入
+
+后端针对modelController的修改只有/change:**改变模型名称和类型**
+
+#### 获取模型列表
+
+| API接口            | 输入数据 | 返回数据     |
+| ------------------ | -------- | ------------ |
+| /api/model/get/all | 用户id   | 模型数据列表 |
+
+#### 添加模型
+
+| API接口        | 输入数据 | 返回数据 |
+| -------------- | -------- | -------- |
+| /api/model/add | modelVO  | 添加结果 |
+
+传入一部分模型的基本数据
+
+- 注意,这里modelVO的一部分属性不是必须值,可以由前端传入默认值(比如0号id)
+- 这里的modelType是必须数据,选择模型类型后,通过/api/model/get/models,获得指定模型名,参数等详细信息呈现
+- 在获得模型参数后,需要用户填写参数,填入modelVO传入
+- 通过读取模型配置列表,选择填入已有模型配置ConfigId
+
+modelVO的结构见接口文档
+
+#### 删除模型
+
+| API接口           | 输入数据 | 返回数据 |
+| ----------------- | -------- | -------- |
+| /api/model/delete | modelId  | 删除结果 |
+
+暂定逻辑:
+
+modelId通过get/all获取,然后用户触发删除后调用/delete,传入modelId
+
+#### 获得某个模型类型属性
+
+| API接口               | 输入数据      | 返回数据       |
+| --------------------- | ------------- | -------------- |
+| /api/model/get/models | modelTypeName | 模型名,参数等 |
+
+在用户选择模型后,调用/api/model/get/models获取需要的参数,让用户填写
+
+#### 添加模型配置
+
+| API接口         | 输入数据 | 返回数据 |
+| --------------- | -------- | -------- |
+| /api/config/add | configVO | 添加结果 |
+
+暂定逻辑:
+
+用户可以在文件列表中选择文件,自定义模型名,特征字段,由前端再传入id数据
+
+文件id由选择文件功能的/api/file/get/all获得
+
+#### 获得模型配置列表
+
+| API接口             | 输入数据 | 返回数据     |
+| ------------------- | -------- | ------------ |
+| /api/config/get/all | 用户id   | 模型配置列表 |
+
+暂定逻辑:
+
+用户可以在文件列表中选择文件,自定义模型名,训练特征,由前端再传入id数据
+
+文件id由选择文件功能的/api/file/get/all获得
+
+#### 修改/删除配置
+
+| API接口            | 输入数据                     | 返回数据 |
+| ------------------ | ---------------------------- | -------- |
+| /api/config/change | 配置id,配置名,训练特征列表 |          |
+| /api/config/delete | 配置id                       | 删除结果 |
+
+修改配置可以修改自定义配置名和特征字段的列表
+
+#### 模型配置-自动化特征选择
+
+| API接口                  | 输入数据       | 返回数据             |
+| ------------------------ | -------------- | -------------------- |
+| /api/config/get/features | 文件id和文件名 | headInfo特征字段列表 |
+
+暂定逻辑:
+
+用户在进行模型配置时,可以选择手动填入特征字段或自动特征选择,选择后者
+
+则要求用户选择进行自动特征选择的文件,触发该接口
+
+#### 选择文件
+
+同上,让用户在列表中选择文件
+
+| API接口              | 输入数据 | 返回数据       |
+| -------------------- | -------- | -------------- |
+| /api/file/get/all    | 用户id   | 文件id和名列表 |
+| /api/file/get/detail | 文件id   | FileDetail数据 |
+
+/api/file/get/detail会返回文件字段列表
+
+
+
+### 模型训练和使用模块(机器学习模型)
+
+#### 模型训练
+
+| API接口          | 输入数据 | 返回数据 |
+| ---------------- | -------- | -------- |
+| /api/model/train | 模型id   | 训练结果 |
+
+#### 模型使用
+
+| API接口        | 输入数据       | 返回数据                  |
+| -------------- | -------------- | ------------------------- |
+| /api/model/use | 文件id和模型id | List<Map<String, String>> |
+
+模型对指定文件进行预测,返回的数据如何利用需要研究,由前端进行可视化
+
+
+
+### 模型配置模块(深度学习模型)
+
+跟机器学习差不多,不过文件从结构化文件变成图片,调用picController的接口
+
+
+
+### 模型训练使用模块(深度学习模型)
+
+调用的接口似乎和机器学习模型一致,但是可能要区分一下

+ 373 - 0
参考/接口调用测试与说明.md

@@ -0,0 +1,373 @@
+## 接口调用测试与说明
+
+本文档将带入具体的数据进行测试,并解释一部分的参数和逻辑,并会给出hdfs的测试方法
+
+#### 用户注册与登录
+
+数据库中,已注册用户tsc,密码为12345678
+
+注册时id可以**随意取值**,因为数据库会自动填充id
+
+请求成功后,用navicat打开user表,发现出现了tsc用户
+
+如果想重置自动递增的id,用truncate table user
+
+登录成功后,会返回userId,需要本地缓存,用于其他接口
+
+<img src="E:\大学学习资料\创新创业项目资料\TeamAI-FrontEnd\参考\接口测试md\接口调用测试&说明.assets\用户注册.jpg" alt="用户注册" style="zoom:50%;" />
+
+<img src="E:\大学学习资料\创新创业项目资料\TeamAI-FrontEnd\参考\接口测试md\接口调用测试&说明.assets\用户登录.jpg" alt="用户登录" style="zoom:50%;" />
+
+#### 文件上传
+
+**注意:该接口没有判重,所以尽可能不要重复上传同一文件**
+
+如果要重新上传,先用hdfs命令删除
+
+<img src="E:\大学学习资料\创新创业项目资料\TeamAI-FrontEnd\参考\接口测试md\接口调用测试&说明.assets\文件上传2.jpg" alt="文件上传2" style="zoom:50%;" />
+
+在postman里,点击file右侧可以选择text类型或file类型,file类型可以选择文件
+
+上传成功后
+
+##### hdfs操作相关方法
+
+hdfs页面在50070端口
+
+spark页面在8080端口
+
+```
+cd /ai_environment_jars/hadoop-2.7.4
+#进入hadoop目录
+bin/hdfs dfs -ls /data/java_compile/
+#查看上传文件
+bin/hdfs dfs -rm -r /data/java_compile/*
+#删除所有文件
+```
+
+![hdfs文件查看](E:\大学学习资料\创新创业项目资料\TeamAI-FrontEnd\参考\接口测试md\接口调用测试&说明.assets\hdfs文件查看.jpg)
+
+#### 文件查询
+
+getall只需要传入userId,这里传入tsc用户的id
+
+![文件getall](E:\大学学习资料\创新创业项目资料\TeamAI-FrontEnd\参考\接口测试md\接口调用测试&说明.assets\文件getall.jpg)
+
+getDetail接口传入文件id,这里传入上面upload的event_data.csv的fileId=1
+
+![文件getDetail](E:\大学学习资料\创新创业项目资料\TeamAI-FrontEnd\参考\接口测试md\接口调用测试&说明.assets\文件getDetail.jpg)
+
+结果为
+
+```
+{
+    "timestamp": 1647334283649,
+    "status": 200,
+    "data": {
+        "fileName": "event_data",
+        "createTime": "2022-03-15T08:47:52.093+00:00",
+        "fileStrucInfo": {
+            "totalRows": "754"
+        },
+        "headerInfos": [
+            {
+                "id": 33,
+                "fileInfoId": 1,
+                "fieldName": "frame_index",
+                "aliasName": "",
+                "fieldDes": "",
+                "nullsRatio": 0.0,
+                "conOrDis": 1,
+                "fieldType": "int",
+                "valueInfo": "[\"79\",\"89992\"]"
+            },
+            {
+                "id": 34,
+                "fileInfoId": 1,
+                "fieldName": "time",
+                "aliasName": "",
+                "fieldDes": "",
+                "nullsRatio": 0.0,
+                "conOrDis": 1,
+                "fieldType": "double",
+                "valueInfo": "[\"3.16\",\"3599.68\"]"
+            },
+            {
+                "id": 35,
+                "fileInfoId": 1,
+                "fieldName": "road",
+                "aliasName": "",
+                "fieldDes": "",
+                "nullsRatio": 0.0,
+                "conOrDis": 0,
+                "fieldType": "string",
+                "valueInfo": "[\"R\",\"L\"]"
+            },
+            {
+                "id": 36,
+                "fileInfoId": 1,
+                "fieldName": "lane",
+                "aliasName": "",
+                "fieldDes": "",
+                "nullsRatio": 0.0,
+                "conOrDis": 0,
+                "fieldType": "string",
+                "valueInfo": "[\"r\",\"m\",\"l\"]"
+            },
+            {
+                "id": 37,
+                "fileInfoId": 1,
+                "fieldName": "vehicle_class",
+                "aliasName": "",
+                "fieldDes": "",
+                "nullsRatio": 0.0,
+                "conOrDis": 0,
+                "fieldType": "string",
+                "valueInfo": "[\"car\",\"truck\",\"bus\"]"
+            },
+            {
+                "id": 38,
+                "fileInfoId": 1,
+                "fieldName": "vehicle_id",
+                "aliasName": "",
+                "fieldDes": "",
+                "nullsRatio": 0.0,
+                "conOrDis": 1,
+                "fieldType": "int",
+                "valueInfo": "[\"20\",\"46862\"]"
+            },
+            {
+                "id": 39,
+                "fileInfoId": 1,
+                "fieldName": "event_type",
+                "aliasName": "",
+                "fieldDes": "",
+                "nullsRatio": 0.0,
+                "conOrDis": 0,
+                "fieldType": "string",
+                "valueInfo": "[\"cruise\",\"overdrive\"]"
+            },
+            {
+                "id": 40,
+                "fileInfoId": 1,
+                "fieldName": "duration",
+                "aliasName": "",
+                "fieldDes": "",
+                "nullsRatio": 0.0,
+                "conOrDis": 0,
+                "fieldType": "string",
+                "valueInfo": "[\"48,60\",\"24,36\",\"36,48\",\"12,24\",\"0,12\"]"
+            }
+        ]
+    }
+}
+```
+
+具体含义查看接口文档
+
+##### get/allfileandfunc
+
+相比get/all,会返回可用的数理分析函数信息
+
+这里的funcInfos是手动导入的,**有些参数作用不明**
+
+```
+{
+    "timestamp": 1647335129081,
+    "status": 200,
+    "data": {
+        "fileNamePojos": [
+            {
+                "fileId": "1",
+                "fileName": "event_data"
+            }
+        ],
+        "funcInfos": [
+            {
+                "id": 1,
+                "funcDes": null,
+                "funcName": "数据分布",
+                "flagOfType": 2,
+                "flagOfConOrDis": 2
+            },
+            {
+                "id": 2,
+                "funcDes": null,
+                "funcName": "散点图",
+                "flagOfType": 2,
+                "flagOfConOrDis": 2
+            },
+            {
+                "id": 3,
+                "funcDes": null,
+                "funcName": "数据统计",
+                "flagOfType": 2,
+                "flagOfConOrDis": 2
+            },
+            {
+                "id": 4,
+                "funcDes": null,
+                "funcName": "偏度-峰度",
+                "flagOfType": 2,
+                "flagOfConOrDis": 2
+            },
+            {
+                "id": 5,
+                "funcDes": null,
+                "funcName": "皮尔森相关系数",
+                "flagOfType": 2,
+                "flagOfConOrDis": 2
+            },
+            {
+                "id": 6,
+                "funcDes": null,
+                "funcName": "平均值",
+                "flagOfType": 2,
+                "flagOfConOrDis": 2
+            }
+        ]
+    }
+}
+```
+
+#### 文件分析
+
+传入fileId=1,即上传的event_data.csv,结果为
+
+```
+{
+    "timestamp": 1647335223563,
+    "status": 200,
+    "data": {
+        "fileName": "event_data",
+        "createTime": "2022-03-15T09:02:05.093+00:00",
+        "fileStrucInfo": {
+            "totalRows": "754"
+        },
+        "headerInfos": [
+            {
+                "id": 73,
+                "fileInfoId": 1,
+                "fieldName": "frame_index",
+                "aliasName": "",
+                "fieldDes": "",
+                "nullsRatio": 0.0,
+                "conOrDis": 1,
+                "fieldType": "int",
+                "valueInfo": "[\"79\",\"89992\"]"
+            },
+            {
+                "id": 74,
+                "fileInfoId": 1,
+                "fieldName": "time",
+                "aliasName": "",
+                "fieldDes": "",
+                "nullsRatio": 0.0,
+                "conOrDis": 1,
+                "fieldType": "double",
+                "valueInfo": "[\"3.16\",\"3599.68\"]"
+            },
+            {
+                "id": 75,
+                "fileInfoId": 1,
+                "fieldName": "road",
+                "aliasName": "",
+                "fieldDes": "",
+                "nullsRatio": 0.0,
+                "conOrDis": 0,
+                "fieldType": "string",
+                "valueInfo": "[\"R\",\"L\"]"
+            },
+            {
+                "id": 76,
+                "fileInfoId": 1,
+                "fieldName": "lane",
+                "aliasName": "",
+                "fieldDes": "",
+                "nullsRatio": 0.0,
+                "conOrDis": 0,
+                "fieldType": "string",
+                "valueInfo": "[\"r\",\"m\",\"l\"]"
+            },
+            {
+                "id": 77,
+                "fileInfoId": 1,
+                "fieldName": "vehicle_class",
+                "aliasName": "",
+                "fieldDes": "",
+                "nullsRatio": 0.0,
+                "conOrDis": 0,
+                "fieldType": "string",
+                "valueInfo": "[\"car\",\"truck\",\"bus\"]"
+            },
+            {
+                "id": 78,
+                "fileInfoId": 1,
+                "fieldName": "vehicle_id",
+                "aliasName": "",
+                "fieldDes": "",
+                "nullsRatio": 0.0,
+                "conOrDis": 1,
+                "fieldType": "int",
+                "valueInfo": "[\"20\",\"46862\"]"
+            },
+            {
+                "id": 79,
+                "fileInfoId": 1,
+                "fieldName": "event_type",
+                "aliasName": "",
+                "fieldDes": "",
+                "nullsRatio": 0.0,
+                "conOrDis": 0,
+                "fieldType": "string",
+                "valueInfo": "[\"cruise\",\"overdrive\"]"
+            },
+            {
+                "id": 80,
+                "fileInfoId": 1,
+                "fieldName": "duration",
+                "aliasName": "",
+                "fieldDes": "",
+                "nullsRatio": 0.0,
+                "conOrDis": 0,
+                "fieldType": "string",
+                "valueInfo": "[\"48,60\",\"24,36\",\"36,48\",\"12,24\",\"0,12\"]"
+            }
+        ]
+    }
+}
+```
+
+**当调用getDetail时似乎已经完成了分析过程**
+
+这里head_info字段id不同是因为想在数据库中吧自动递增设为1失败了,所以继续递增
+
+#### 模型类别
+
+使用时可以通过GET:/get/models,通过模型类型的名称获得详细数据
+
+参数的含义详见模型类别表model_type
+
+| 类型名                         | 中文名           | 参数列表                           |
+| ------------------------------ | ---------------- | ---------------------------------- |
+| LogisticRegression             | 逻辑回归         | [MaxIter,RegParam,ElasticNetParam] |
+| DecisionTree                   | 决策树           | [Category,TrainingDataSetOccupy]   |
+| RandomForest                   | 随机森林         | [MaxIter,RegParam,ElasticNetParam] |
+| GBDT                           | 梯度提升决策树   | [MaxIter,RegParam,ElasticNetParam] |
+| MultilayerPerceptronClassifier | 多层感知器分类器 | [Category,TrainingDataSetOccupy]   |
+| NaiveBayes                     | 朴素贝叶斯       | [Category,TrainingDataSetOccupy]   |
+| RandomForestRegression         | 随机森林回归     | [Category,TrainingDataSetOccupy]   |
+| K-Means                        | K-均值           | [NumOfCluster,Seed]                |
+
+#### 分析函数类别
+
+目前分析函数表func_info其他属性意义不明
+
+| 数据分布       |
+| -------------- |
+| 散点图         |
+| 数据统计       |
+| 偏度-峰度      |
+| 皮尔森相关系数 |
+| 平均值         |
+

+ 46 - 0
参考/机器学习模型参数.md

@@ -0,0 +1,46 @@
+## 机器学习模型参数
+
+#### LogisticRegression
+
+- MaxIter:最大迭代次数
+- RegParam设置正则化项系数(默认0),正则化主要用于防止过拟合现象,如果数据集较小,特征维数又多,易出现过拟合,考虑增大正则化系数
+- setElasticNetParam正则化范式比(默认0),正则化有两种方式:L1(Lasso)和L2(Ridge),L1用于特征的稀疏化,L2用于防止过拟合
+
+#### DecisionTree
+
+- Category:具有该数量以上的字段视为连续
+- TrainingDataSetOccupy:训练集比例
+
+#### RandomForest
+
+- MaxIter:最大迭代次数
+- RegParam设置正则化项系数(默认0),正则化主要用于防止过拟合现象,如果数据集较小,特征维数又多,易出现过拟合,考虑增大正则化系数
+- setElasticNetParam正则化范式比(默认0),正则化有两种方式:L1(Lasso)和L2(Ridge),L1用于特征的稀疏化,L2用于防止过拟合
+
+#### GBDT
+
+- MaxIter:最大迭代次数
+- RegParam设置正则化项系数(默认0),正则化主要用于防止过拟合现象,如果数据集较小,特征维数又多,易出现过拟合,考虑增大正则化系数
+- setElasticNetParam正则化范式比(默认0),正则化有两种方式:L1(Lasso)和L2(Ridge),L1用于特征的稀疏化,L2用于防止过拟合
+
+#### K-Means
+
+默认设置了maxcategories=4,大于4个值视为连续
+
+- NumOfCluster:K值
+- Seed:作用不明
+
+#### MultilayerPerceptronClassifier
+
+- Category:具有该数量以上的字段视为连续
+- TrainingDataSetOccupy:训练集比例
+
+#### NaiveBayes
+
+- Category:具有该数量以上的字段视为连续
+- TrainingDataSetOccupy:训练集比例
+
+#### RandomForestRegression
+
+- Category:具有该数量以上的字段视为连续
+- TrainingDataSetOccupy:训练集比例