33 KiB
33 KiB
机器学习平台接口文档
1. 数据处理模块
1.1 获取数据预处理方法列表
GET /data/preprocessing/methods
Response:
{
"status": "success",
"methods": [
{
"name": "missing_value_handler",
"description": "缺失值处理",
"method": ["SimpleImputer", "IterativeImputer", "KNNImputer", "MissingIndicator"]
},
{
"name": "outlier_detector",
"description": "异常值检测",
"method":["IsolationForest",...]
},
{
"name": "standardizer",
"description": "标准化处理",
"method" : ["StandardScaler", ...]
}
]
}
1.2 获取预处理方法详情
GET /data/preprocessing/method/{method_name}
Response:
{
"status": "success",
"method": {
"name": "SimpleImputer",
"principle": "使用统计方法(如均值、中位数、众数)或常数值填充缺失值。",
"advantages": ["实现简单,计算速度快。","适用于数值型和分类型数据。"],
"disadvantages": ["未考虑特征之间的相关性,可能导致偏差。"],
"applicable_scenarios": ["数据缺失比例较小且随机分布。", "需要快速处理缺失值的场景。"],
"parameters": [
{
"name": "missing_values",
"type":"int, float, str, np.nan, None",
"default": "np.nan",
"description": "指定需要填充的缺失值。进行修改。"
},
{
"name": "strategy",
"type": "str",
"default": "'mean'",
"description": "填充策略,可选值为 'mean'(均值)、'median'(中位数)、'most_frequent'(众数)和 'constant'(常数)。"
},
{
...
}
]
}
}
1.3 获取特征工程方法列表
GET /data/feature/methods
Response:
{
"status": "success",
"methods": [
{
"name": "KBinsDiscretizer",
"description": "将连续特征离散化,即将数值特征分桶,转换为离散的整数值或独热编码。",
},
{
"name": "SelectKBest",
"description": "根据统计检验方法选择得分最高的 K 个特征,进行特征选择。",
},
{
"name": "pca",
"description": "主成分分析,通过线性变换将高维数据投影到低维空间,保留数据的主要信息。",
},
{
...,
}
]
}
1.4 获取特征工程方法详情
GET /data/feature/method/{method_name}
Response:
{
"status": "success",
"method": {
"name": "SelectKBest",
"description": "选择最重要的 K 个特征。",
"parameters": [
{
"name": "score_func",
"type": "callable",
"default": f_classif,
"description": "用于计算特征得分的函数。"
},
{
"name": "k",
"type": "int",
"default": 10,
"description": "要选择的特征数量。"
},
{
...,
}
]
}
}
1.5 处理数据集
POST /data/process
Content-Type: application/json
Request:
{
"input_path": "dataset/dataset_raw/data.csv",
"output_dir": "dataset/dataset_processed/",
"preprocessing": [
{
"method": "missing_value_handler",
"params": {
"strategy": "mean"
}
},
{
"method": "standard_scaler",
"params": {
"with_mean": true,
"with_std": true
}
}
],
"feature_methods":[
{
"method" : "KBinsDiscretizer"
"params":{
"n_bins": 5,
"encode": onehot,
...
}
}
],
"split_params": {
"train": 0.7,
"val": 0.15,
"test": 0.15
}
}
Response:
{
"status": "success",
"process_id": "proc_20230820_001",
"output_files": {
"train": "dataset/dataset_processed/train_20230820_001.csv",
"val": "dataset/dataset_processed/val_20230820_001.csv",
"test": "dataset/dataset_processed/test_20230820_001.csv"
},
"process_log": "logs/process_20230820_001.log"
}
1.6 查看可用数据集
GET /data/datasets
Response:
{
"status": "success",
"datasets": [
"input_file": "dataset/dataset_raw/breast_cancer.csv",
"timestamp": "2025-02-18T09:48:48.983863",
"process_methods": [
{
"method_name": "SimpleImputer",
"params": {
"strategy": "mean",
"missing_values": NaN
}
},
{
"method_name": "IsolationForest",
"params": {
"contamination": 0.1,
"random_state": 42
}
},
{
"method_name": "StandardScaler",
"params": {
"with_mean": true,
"with_std": true
}
}
],
"feature_methods": [],
"split_params": {
"test_size": 0.2,
"val_size": 0.1
},
"steps": [
{
"step": "load_data",
"shape": [
569,
31
]
},
{
"step": "cleaning",
"method": "SimpleImputer",
"params": {
"strategy": "mean",
"missing_values": NaN
},
"shape": [
569,
31
]
},
{
"step": "cleaning",
"method": "IsolationForest",
"params": {
"contamination": 0.1,
"random_state": 42
},
"shape": [
512,
31
]
},
{
"step": "cleaning",
"method": "StandardScaler",
"params": {
"with_mean": true,
"with_std": true
},
"shape": [
512,
31
]
}
],
"output_files": {
"train": "dataset/dataset_processed/breast_cancer_20250218_094848/train_breast_cancer_20250218_094848.csv",
"validation": "dataset/dataset_processed/breast_cancer_20250218_094848/val_breast_cancer_20250218_094848.csv",
"test": "dataset/dataset_processed/breast_cancer_20250218_094848/test_breast_cancer_20250218_094848.csv"
}
]
}
1.7 读取csv文件并展示
POST /data/csv
Content-Type: application/json
Request:
{
"data_path": "dataset/dataset_raw/data.csv",
"head": 5, # 可选,默认显示前5行
"tail": 5, # 可选,默认显示后5行
"info": true, # 可选,是否显示数据集信息
"describe": true # 可选,是否显示数据统计信息
}
Response:
{
"status": "success",
"data": {
"head": [ # 数据集前几行
{
"column1": "value1",
"column2": "value2",
...
},
...
],
"tail": [ # 数据集后几行
{
"column1": "value1",
"column2": "value2",
...
},
...
],
"info": { # 数据集基本信息
"rows": 1000,
"columns": 10,
"column_types": {
"column1": "int64",
"column2": "float64",
"column3": "object",
...
},
"memory_usage": "80.5 KB",
"missing_values": {
"column1": 0,
"column2": 5,
...
}
},
"describe": { # 数据统计信息
"column1": {
"count": 1000,
"mean": 45.3,
"std": 12.5,
"min": 0,
"25%": 35.0,
"50%": 45.0,
"75%": 55.0,
"max": 100.0
},
...
}
}
}
Error Response:
{
"status": "error",
"message": "读取CSV文件失败",
"details": {
"error_type": "FileNotFoundError",
"error_message": "File not found: dataset/dataset_raw/data.csv"
}
}
1.8 前端上传数据集展示
GET /data/datasets/raw
1.9 返回待处理数据集
GET /data/upload
Response:
{
"status":success,
"datasets": [
{
"name": 'breast_cancer.csv',
"path": 'dataset/dataset_raw/breast_cancer.csv',
"size": 121385,
"created_at": '2025-02-13T16:58:15.505059'
},
{
"name":xxx,
"path":xxx,
"size":xxx,
"created_at":xxx
}
]
}
2. 模型接口
2.1 获取可用模型列表
GET /model/available
Response:
{
"status": "success",
"models": [
{
"name": "xgboost",
"type": "classification",
"description": "XGBoost分类器",
"tags": ["tree", "ensemble", "classification"]
},
{
"name": "lightgbm",
"type": "classification",
"description": "LightGBM分类器",
"tags": ["tree", "ensemble", "classification"]
}
]
}
2.2 获取模型详情
GET /model/available/{model_name}
Response:
{
"status": "success",
"model": {
"name": "xgboost",
"description": "XGBoost分类器",
"parameters": [
{
"name": "max_depth",
"type": "int",
"range": [3, 10],
"default": 6,
"description": "树的最大深度"
},
{
"name": "learning_rate",
"type": "float",
"range": [0.01, 0.3],
"default": 0.1,
"description": "学习率"
}
]
}
}
2.3 获取评价指标列表
GET /model/metrics
Response:
{
"status": "success",
"metric": {
"classification": [
{
"name": "accuracy",
"description": "准确率",
"range": [0, 1],
"interpretation": "值越大越好"
},
{
"name": "f1",
"description": "F1分数",
"range": [0, 1],
"interpretation": "值越大越好"
}
],
"regression": [
{
"name": "mse",
"description": "均方误差",
"range": [0, null],
"interpretation": "值越小越好"
},
{
"name": "mae",
"description": "平均绝对误差",
"range": [0, null],
"interpretation": "值越小越好"
}
]
}
}
2.4 模型训练
POST /model/train
Content-Type: application/json
Request:
{
"model": "xgboost",
"dataset": {
"train": "dataset/dataset_processed/train.csv",
"val": "dataset/dataset_processed/val.csv",
"test": "dataset/dataset_processed/test.csv"
},
"parameters": {
"max_depth": 6,
"learning_rate": 0.1
},
"metrics": ["accuracy", "f1"]
}
Response:
{
"status": "success",
"task_id": "train_20230820_001",
"status_url": "/api/train/status/train_20230820_001"
}
2.5 获取MLFlow中保存的实验
GET /model/experiments
Response:
{
"status": "success",
"experiments": [
{
"experiment_id": "656341556838275234",
"name": "breast_cancer_classification_2",
"artifact_location": "mlruns/656341556838275234",
"lifecycle_stage": "active",
"creation_time": "2025-02-19T08:43:02",
"last_update_time": "2025-02-19T14:30:00",
"tags": {
"mlflow.note.content": "乳腺癌分类实验",
"mlflow.user": "admin"
},
"runs_count": 5
}
],
"total_count": 1,
"page": 1,
"page_size": 10
}
2.6 获取已经训练好的模型列表
GET /model/experiment/{experiment_name}
Response:
{
"status": "success",
"models": [
{
"run_id" 7970364d490f4e0aa0375c2db26215f3
'experiment_id' 656341556838275234
'algorithm': XGBClassifier
'task_type': classification
'dataset': /home/admin-root/haotian/MLPlatform/dataset/dataset_processed/breast_cancer_20250219_144629
'training_start_time': 2025-02-19 08:43:02.067000+00:00
'training_end_time': 2025-02-19 08:43:05.256000+00:00
'metrics':{
roc_auc: 0.9608
recall: 0.9610
f1: 0.9612
precision: 0.9618
accuracy: 0.9610
}
},
{
...
}
],
"total_count": 2,
"page": 1,
"page_size": 10
}
2.7 删除指定的训练好的模型
DELETE /model/{run_id}
Response:
{
"status": "success",
"message": "模型删除成功",
"details": {
"run_id": "7970364d490f4e0aa0375c2db26215f3",
"experiment_id": "656341556838275234",
"model_name": "XGBClassifier",
"deleted_artifacts": [
"models/7970364d490f4e0aa0375c2db26215f3/model.pkl",
"models/7970364d490f4e0aa0375c2db26215f3/requirements.txt",
"models/7970364d490f4e0aa0375c2db26215f3/conda.yaml"
]
}
}
2.8 模型预测
POST /model/predict
Content-Type: application/json
Request:
{
"run_id": "7970364d490f4e0aa0375c2db26215f3",
"data_path": "dataset/dataset_processed/test.csv",
"output_path": "predictions/pred_20250219_001.csv",
"batch_size": 32,
"device": "cuda",
"return_proba": true,
"metrics": ["accuracy", "f1", "precision", "recall"]
}
Response:
{
"status": "success",
"prediction": {
"id": "pred_20250219_001",
"run_id": "7970364d490f4e0aa0375c2db26215f3",
"model_name": "XGBClassifier",
"output_file": "predictions/pred_20250219_001.csv",
"prediction_time": "2025-02-19 15:30:45",
"samples_count": 1000,
"metrics": {
"accuracy": 0.956,
"f1": 0.948,
"precision": 0.962,
"recall": 0.935
},
"execution_time": "5.23s"
}
}
Error Response:
{
"status": "error",
"message": "模型预测失败",
"details": {
"error_type": "ValueError",
"error_message": "输入数据格式不正确"
}
}
2.9 模型优化 -- 未实现
3. 系统监控
3.1 获取资源使用情况
GET /system/resources
Response:
{
"status": "success",
"resources": {
"gpu": [
{
"id": 0,
"name": "NVIDIA GeForce RTX 3090",
"memory": {
"total": 24576, // MB
"used": 3678, // MB
"free": 20898 // MB
},
"utilization": {
"gpu": 45, // %
"memory": 15 // %
},
"temperature": 65, // °C
"power": {
"draw": 180.5, // W
"limit": 350.0 // W
},
"processes": [
{
"pid": 1234,
"name": "python",
"memory": 2048 // MB
}
]
}
],
"cpu": {
"count": {
"physical": 16,
"logical": 32
},
"utilization": 35.5, // %
"frequency": {
"current": 3.6, // GHz
"min": 2.5, // GHz
"max": 4.2 // GHz
},
"temperature": 45.5, // °C
"memory": {
"total": 32768, // MB
"used": 16384, // MB
"free": 16384, // MB
"percent": 50.0 // %
},
"swap": {
"total": 8192, // MB
"used": 1024, // MB
"free": 7168, // MB
"percent": 12.5 // %
}
},
"disk": {
"/": {
"total": 512000, // MB
"used": 256000, // MB
"free": 256000, // MB
"percent": 50.0 // %
},
"/home": {
"total": 1024000, // MB
"used": 512000, // MB
"free": 512000, // MB
"percent": 50.0 // %
}
},
"processes": {
"total": 256,
"running": 2,
"sleeping": 254
}
},
"timestamp": "2025-02-19T15:30:45"
}
Error Response:
{
"status": "error",
"message": "获取资源信息失败",
"details": {
"error_type": "GPUQueryError",
"error_message": "Failed to query GPU information"
}
}
3.2 获取训练历史
GET /system/history?page=1&page_size=10&start_time=2025-02-01&end_time=2025-02-19&status=completed&experiment_name=breast_cancer_classification
Parameters:
- page: 页码 (默认: 1)
- page_size: 每页数量 (默认: 10)
- start_time: 开始时间 (可选, 格式: YYYY-MM-DD)
- end_time: 结束时间 (可选, 格式: YYYY-MM-DD)
- status: 运行状态过滤 (可选: completed, failed, running)
- experiment_name: 实验名称过滤 (可选)
Response:
{
"status": "success",
"history": [
{
"run_id": "7970364d490f4e0aa0375c2db26215f3",
"experiment_id": "656341556838275234",
"experiment_name": "breast_cancer_classification",
"model_name": "XGBClassifier",
"dataset": "breast_cancer",
"start_time": "2025-02-19T08:43:02",
"end_time": "2025-02-19T08:43:05",
"duration": "3s",
"status": "completed",
"parameters": {
"max_depth": 6,
"learning_rate": 0.1,
"n_estimators": 100
},
"metrics": {
"accuracy": 0.956,
"precision": 0.962,
"recall": 0.935,
"f1": 0.948
},
"tags": {
"version": "v1.0",
"author": "admin"
}
}
],
"pagination": {
"current_page": 1,
"page_size": 10,
"total_pages": 5,
"total_items": 42
}
}
Error Response:
{
"status": "error",
"message": "获取训练历史失败",
"details": {
"error_type": "MLflowError",
"error_message": "Failed to connect to MLflow server"
}
}
3.3 获取系统中训练状态 ---- 未完成, 等开发系统后台时再实现.
GET /model/train/status/{task_id}
Response:
{
"status": "success",
"task": {
"id": "train_20230820_001",
"status": "running",
"progress": 0.75,
"current_epoch": 15,
"total_epochs": 20,
"metrics": {
"train_loss": 0.234,
"val_loss": 0.245
},
"start_time": "2023-08-20T10:00:00",
"estimated_completion": "2023-08-20T10:30:00"
}
}
3.4 获取系统日志
GET /system/logs?level=error&start_time=2025-02-19T00:00:00&end_time=2025-02-19T23:59:59&module=training&page=1&page_size=20
Parameters:
- level: 日志级别过滤 (可选: debug, info, warning, error, critical)
- start_time: 开始时间 (可选, 格式: YYYY-MM-DDThh:mm:ss)
- end_time: 结束时间 (可选, 格式: YYYY-MM-DDThh:mm:ss)
- module: 模块名称过滤 (可选: training, data_processing, model, system)
- page: 页码 (默认: 1)
- page_size: 每页数量 (默认: 20)
Response:
{
"status": "success",
"logs": [
{
"timestamp": "2025-02-19T10:15:00",
"level": "ERROR",
"module": "training",
"message": "Out of memory error in GPU 0",
"details": {
"error_type": "RuntimeError",
"gpu_id": 0,
"memory_used": "15.6GB",
"memory_total": "16GB"
},
"context": {
"experiment_id": "656341556838275234",
"run_id": "7970364d490f4e0aa0375c2db26215f3",
"model": "XGBClassifier"
}
}
],
"pagination": {
"current_page": 1,
"page_size": 20,
"total_pages": 3,
"total_items": 42
},
"summary": {
"error_count": 5,
"warning_count": 12,
"info_count": 25,
"most_frequent_error": "Out of memory error",
"most_affected_module": "training"
}
}
Error Response:
{
"status": "error",
"message": "获取系统日志失败",
"details": {
"error_type": "FileNotFoundError",
"error_message": "Log file not found"
}
}
4. 系统后台整体实现
4.1 系统架构
MLPlatform/
├── api/ # API接口层
│ ├── __init__.py
│ ├── data_api.py # 数据处理相关接口
│ ├── model_api.py # 模型相关接口
│ └── system_api.py # 系统监控相关接口
├── function/ # 功能实现层
│ ├── data_manager.py # 数据处理类
│ ├── model_manager.py # 模型管理类
│ ├── system_monitor.py # 系统监控类
│ └── utils/ # 工具函数
├── config/ # 配置文件
│ └── config.yaml # 系统配置
├── dataset/ # 数据集
│ ├── dataset_raw/ # 原始数据
│ └── dataset_processed/ # 处理后数据
├── .log/ # 日志文件
├── doc/ # 文档
└── main.py # 主程序入口
4.2 技术栈
- FastAPI: Web框架
- MLflow: 模型管理和实验跟踪
- PyTorch/Scikit-learn: 机器学习框架
- Pydantic: 数据验证
- Uvicorn: ASGI服务器
4.3 主要功能
-
异步任务处理
- 支持多个模型同时训练
- 后台任务状态监控
- 任务队列管理
-
实时监控
- 系统资源监控
- 训练进度监控
- 日志实时查看
-
错误处理
- 全局异常处理
- 错误日志记录
- 优雅降级策略
-
安全性
- API认证授权
- 请求限流
- 参数验证
4.4 性能优化
-
数据处理
- 数据流式处理
- 缓存机制
- 批量处理
-
模型训练
- GPU利用优化
- 分布式训练支持
- 模型检查点
-
系统监控
- 性能指标采集
- 资源使用预警
- 自动清理机制
5. 前端设计
5.1 技术栈
- Vue3: 前端框架
- TypeScript: 编程语言
- Element Plus: UI组件库
- Axios: HTTP请求库
- ECharts: 数据可视化库
- Pinia: 状态管理
- Vue Router: 路由管理
5.2 目录结构
frontend/
├── src/
│ ├── api/ # API接口封装
│ │ ├── data.ts # 数据处理相关接口
│ │ ├── model.ts # 模型管理相关接口
│ │ └── system.ts # 系统监控相关接口
│ ├── components/ # 公共组件
│ │ ├── DataTable/ # 数据表格组件
│ │ ├── ModelCard/ # 模型卡片组件
│ │ └── Charts/ # 图表组件
│ ├── views/ # 页面组件
│ │ ├── data/ # 数据处理相关页面
│ │ ├── model/ # 模型管理相关页面
│ │ └── system/ # 系统监控相关页面
│ ├── store/ # 状态管理
│ ├── router/ # 路由配置
│ └── utils/ # 工具函数
├── public/ # 静态资源
└── package.json # 项目配置
5.3 页面设计
-
数据处理模块
- 数据集列表页
- 展示所有可用数据集
- 支持数据集预览和基本统计信息
- 数据集处理状态追踪
- 数据预处理页
- 预处理方法选择和配置
- 参数可视化调整
- 处理进度实时展示
- 特征工程页
- 特征工程方法选择
- 特征重要性可视化
- 数据分布展示
- 数据集列表页
-
模型管理模块
- 模型列表页
- 展示可用算法和模型
- 模型详细信息查看
- 模型对比功能
- 模型训练页
- 训练参数配置
- 训练过程监控
- 训练结果可视化
- 模型评估页
- 多指标评估结果
- 预测结果分析
- 模型解释性展示
- 模型列表页
-
系统监控模块
- 资源监控页
- CPU/GPU使用率图表
- 内存使用情况
- 系统负载监控
- 训练历史页
- 实验记录列表
- 训练详情查看
- 实验对比分析
- 日志查看页
- 日志实时展示
- 日志级别筛选
- 日志搜索功能
- 资源监控页
5.4 交互设计
-
数据处理流程
graph LR A[上传数据] --> B[数据预览] B --> C[预处理配置] C --> D[特征工程] D --> E[数据划分] E --> F[处理完成] -
模型训练流程
graph LR A[选择数据] --> B[选择算法] B --> C[参数配置] C --> D[开始训练] D --> E[监控进度] E --> F[查看结果]
5.5 组件设计
-
通用组件
- 数据表格组件
- 图表展示组件
- 参数配置表单
- 进度展示组件
- 文件上传组件
-
业务组件
- 数据预处理配置组件
- 模型训练配置组件
- 评估结果展示组件
- 系统监控面板组件
5.6 状态管理
-
全局状态
- 用户配置信息
- 系统运行状态
- 全局加载状态
-
模块状态
- 数据处理状态
- 模型训练状态
- 系统监控数据
5.7 性能优化
-
数据处理
- 大数据分页加载
- 数据缓存机制
- 延迟加载策略
-
交互优化
- 防抖和节流
- 骨架屏加载
- 虚拟滚动列表
-
可视化优化
- 图表按需渲染
- 数据分片处理
- WebWorker处理大数据
5.8 错误处理
-
全局错误处理
- API请求错误
- 组件渲染错误
- 路由错误处理
-
用户提示
- 操作成功提示
- 错误信息展示
- 加载状态反馈
附录A:方法详细说明
A1. 数据预处理方法
A1.1 缺失值处理
- 均值填充 (mean)
原理: 使用特征列的均值填充缺失值
优点:
- 简单直观,计算快速
- 保持数据分布的均值不变
缺点:
- 降低数据方差
- 忽略特征间相关性
适用场景:
- 数据近似正态分布
- 缺失比例较小(<30%)
- 特征间相关性不强
- 中位数填充 (median)
原理: 使用特征列的中位数填充缺失值
优点:
- 对异常值不敏感
- 保持数据分布的中心趋势
缺点:
- 忽略特征间相关性
- 可能改变数据分布形状
适用场景:
- 数据存在异常值
- 数据分布偏斜
- 缺失比例中等(<50%)
- KNN填充
原理: 基于K近邻样本的值进行填充
优点:
- 考虑特征间相关性
- 保持数据局部结构
缺点:
- 计算开销大
- 对K值敏感
适用场景:
- 特征间强相关
- 数据量适中
- 缺失模式随机
A1.2 异常值检测
- Z-score方法
原理: 基于均值和标准差判断异常值
优点:
- 计算简单快速
- 适用于正态分布数据
缺点:
- 对分布假设敏感
- 不适用于多峰分布
参数:
threshold: 标准差倍数(通常取3)
适用场景:
- 数据近似正态分布
- 需要快速检测
- IQR方法
原理: 基于四分位数范围判断异常值
优点:
- 对分布假设不敏感
- 稳健性好
缺点:
- 可能过于保守
- 不适合多模态数据
参数:
multiplier: IQR倍数(通常取1.5)
适用场景:
- 数据分布未知
- 存在较多噪声
- Isolation Forest
原理: 基于孤立树检测异常点
优点:
- 处理高维数据效果好
- 计算效率高
- 不需要假设数据分布
缺点:
- 对参数敏感
- 随机性较大
参数:
contamination: 异常比例估计
n_estimators: 树的数量
适用场景:
- 高维数据
- 大规模数据集
- 复杂异常模式
A2. 特征工程方法
A2.1 特征缩放
- 标准化 (StandardScaler)
原理: 转换为均值为0、标准差为1的分布
优点:
- 消除量纲影响
- 适合正态分布数据
- 适合梯度下降算法
缺点:
- 对异常值敏感
- 改变原始数据分布
适用场景:
- 线性模型
- 神经网络
- 数据近似正态分布
- 最小最大缩放 (MinMaxScaler)
原理: 线性变换到[0,1]区间
优点:
- 保持零值
- 保持稀疏矩阵稀疏性
缺点:
- 对异常值敏感
适用场景:
- 图像处理
- 神经网络输入
- 需要非负值的场景
- 稳健缩放 (RobustScaler)
原理: 基于分位数的缩放方法
优点:
- 对异常值不敏感
- 保持数据分布形状
缺点:
- 计算相对较慢
适用场景:
- 存在异常值
- 分布有偏的数据
A2.2 特征选择
- 方差选择
原理: 删除方差小于阈值的特征
优点:
- 计算简单快速
- 易于理解
缺点:
- 忽略特征间相关性
- 忽略与目标变量的关系
参数:
threshold: 方差阈值
适用场景:
- 初步特征筛选
- 去除常量特征
- 互信息选择
原理: 基于特征与目标变量的互信息量选择特征
优点:
- 可以捕捉非线性关系
- 适用于分类问题
缺点:
- 计算开销大
- 需要离散化连续变量
参数:
k: 选择的特征数量
适用场景:
- 分类问题
- 特征间存在非线性关系
A3. 机器学习模型
A3.1 分类模型
- XGBoost
原理: 基于梯度提升的集成树模型
优点:
- 预测准确率高
- 处理缺失值
- 内置正则化
- 支持并行计算
缺点:
- 参数调优复杂
- 内存消耗大
关键参数:
max_depth: 树的最大深度
learning_rate: 学习率
n_estimators: 树的数量
适用场景:
- 结构化数据
- 高维特征
- 大规模数据集
- LightGBM
原理: 基于梯度提升的轻量级框架
优点:
- 训练速度快
- 内存占用小
- 支持类别特征
缺点:
- 小数据集容易过拟合
- 对参数较敏感
关键参数:
num_leaves: 叶子节点数
learning_rate: 学习率
min_data_in_leaf: 叶节点最小样本数
适用场景:
- 大规模数据集
- 高维稀疏特征
- 类别特征较多
- LSTM
原理: 长短期记忆神经网络
优点:
- 处理序列数据能力强
- 可以学习长期依赖
- 解决梯度消失问题
缺点:
- 训练时间长
- 需要大量数据
- 计算资源消耗大
关键参数:
hidden_units: 隐藏单元数
num_layers: 网络层数
dropout_rate: 丢弃率
适用场景:
- 时间序列预测
- 自然语言处理
- 序列分类
A3.2 回归模型
- ElasticNet
原理: 结合L1和L2正则化的线性回归
优点:
- 处理多重共线性
- 可进行特征选择
- 防止过拟合
缺点:
- 需要调整两个正则化参数
- 只能处理线性关系
关键参数:
alpha: 正则化强度
l1_ratio: L1正则化比例
适用场景:
- 特征间存在相关性
- 需要特征选择
- 数据量适中
- SVR (支持向量回归)
原理: 基于支持向量机的回归方法
优点:
- 可处理非线性关系
- 对异常值不敏感
- 理论基础扎实
缺点:
- 计算复杂度高
- 核函数选择困难
关键参数:
kernel: 核函数类型
C: 惩罚参数
epsilon: 误差容忍度
适用场景:
- 非线性回归
- 中小规模数据集
- 需要高精度预测
补充说明
- 所有接口返回格式统一:
{
"status": "success/error",
"data/error": {
// 具体数据或错误信息
}
}
- 错误处理:
- HTTP 400: 请求参数错误
- HTTP 401: 未授权访问
- HTTP 404: 资源不存在
- HTTP 500: 服务器内部错误
- 认证方式:
- 使用Bearer Token认证
- Token在请求头中携带:
Authorization: Bearer <token>
- 数据格式要求:
- 所有请求和响应均使用JSON格式
- 文件上传使用multipart/form-data
- 时间格式统一使用ISO 8601标准
- 接口版本控制:
- 在URL中包含版本号:/api/v1/...
- 在请求头中指定版本:API-Version: 1.0
-
方法选择建议:
- 根据数据特点选择合适的预处理方法
- 考虑计算资源和时间限制
- 优先选择简单且可解释的方法
-
参数调优建议:
- 使用交叉验证选择参数
- 考虑模型复杂度和性能的平衡
- 记录参数调优历史
-
性能评估:
- 使用多个评估指标
- 考虑模型的稳定性
- 关注模型在特定场景的表现
- 关注模型在特定场景的表现