MLPlatform/doc/接口文档code.md
2025-02-26 10:38:11 +08:00

33 KiB
Raw Blame History

机器学习平台接口文档

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 主要功能

  1. 异步任务处理

    • 支持多个模型同时训练
    • 后台任务状态监控
    • 任务队列管理
  2. 实时监控

    • 系统资源监控
    • 训练进度监控
    • 日志实时查看
  3. 错误处理

    • 全局异常处理
    • 错误日志记录
    • 优雅降级策略
  4. 安全性

    • API认证授权
    • 请求限流
    • 参数验证

4.4 性能优化

  1. 数据处理

    • 数据流式处理
    • 缓存机制
    • 批量处理
  2. 模型训练

    • GPU利用优化
    • 分布式训练支持
    • 模型检查点
  3. 系统监控

    • 性能指标采集
    • 资源使用预警
    • 自动清理机制

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 页面设计

  1. 数据处理模块

    • 数据集列表页
      • 展示所有可用数据集
      • 支持数据集预览和基本统计信息
      • 数据集处理状态追踪
    • 数据预处理页
      • 预处理方法选择和配置
      • 参数可视化调整
      • 处理进度实时展示
    • 特征工程页
      • 特征工程方法选择
      • 特征重要性可视化
      • 数据分布展示
  2. 模型管理模块

    • 模型列表页
      • 展示可用算法和模型
      • 模型详细信息查看
      • 模型对比功能
    • 模型训练页
      • 训练参数配置
      • 训练过程监控
      • 训练结果可视化
    • 模型评估页
      • 多指标评估结果
      • 预测结果分析
      • 模型解释性展示
  3. 系统监控模块

    • 资源监控页
      • CPU/GPU使用率图表
      • 内存使用情况
      • 系统负载监控
    • 训练历史页
      • 实验记录列表
      • 训练详情查看
      • 实验对比分析
    • 日志查看页
      • 日志实时展示
      • 日志级别筛选
      • 日志搜索功能

5.4 交互设计

  1. 数据处理流程

    graph LR
    A[上传数据] --> B[数据预览]
    B --> C[预处理配置]
    C --> D[特征工程]
    D --> E[数据划分]
    E --> F[处理完成]
    
  2. 模型训练流程

    graph LR
    A[选择数据] --> B[选择算法]
    B --> C[参数配置]
    C --> D[开始训练]
    D --> E[监控进度]
    E --> F[查看结果]
    

5.5 组件设计

  1. 通用组件

    • 数据表格组件
    • 图表展示组件
    • 参数配置表单
    • 进度展示组件
    • 文件上传组件
  2. 业务组件

    • 数据预处理配置组件
    • 模型训练配置组件
    • 评估结果展示组件
    • 系统监控面板组件

5.6 状态管理

  1. 全局状态

    • 用户配置信息
    • 系统运行状态
    • 全局加载状态
  2. 模块状态

    • 数据处理状态
    • 模型训练状态
    • 系统监控数据

5.7 性能优化

  1. 数据处理

    • 大数据分页加载
    • 数据缓存机制
    • 延迟加载策略
  2. 交互优化

    • 防抖和节流
    • 骨架屏加载
    • 虚拟滚动列表
  3. 可视化优化

    • 图表按需渲染
    • 数据分片处理
    • WebWorker处理大数据

5.8 错误处理

  1. 全局错误处理

    • API请求错误
    • 组件渲染错误
    • 路由错误处理
  2. 用户提示

    • 操作成功提示
    • 错误信息展示
    • 加载状态反馈

附录A方法详细说明

A1. 数据预处理方法

A1.1 缺失值处理

  1. 均值填充 (mean)
原理: 使用特征列的均值填充缺失值
优点:
  - 简单直观,计算快速
  - 保持数据分布的均值不变
缺点:
  - 降低数据方差
  - 忽略特征间相关性
适用场景:
  - 数据近似正态分布
  - 缺失比例较小(<30%)
  - 特征间相关性不强
  1. 中位数填充 (median)
原理: 使用特征列的中位数填充缺失值
优点:
  - 对异常值不敏感
  - 保持数据分布的中心趋势
缺点:
  - 忽略特征间相关性
  - 可能改变数据分布形状
适用场景:
  - 数据存在异常值
  - 数据分布偏斜
  - 缺失比例中等(<50%)
  1. KNN填充
原理: 基于K近邻样本的值进行填充
优点:
  - 考虑特征间相关性
  - 保持数据局部结构
缺点:
  - 计算开销大
  - 对K值敏感
适用场景:
  - 特征间强相关
  - 数据量适中
  - 缺失模式随机

A1.2 异常值检测

  1. Z-score方法
原理: 基于均值和标准差判断异常值
优点:
  - 计算简单快速
  - 适用于正态分布数据
缺点:
  - 对分布假设敏感
  - 不适用于多峰分布
参数:
  threshold: 标准差倍数(通常取3)
适用场景:
  - 数据近似正态分布
  - 需要快速检测
  1. IQR方法
原理: 基于四分位数范围判断异常值
优点:
  - 对分布假设不敏感
  - 稳健性好
缺点:
  - 可能过于保守
  - 不适合多模态数据
参数:
  multiplier: IQR倍数(通常取1.5)
适用场景:
  - 数据分布未知
  - 存在较多噪声
  1. Isolation Forest
原理: 基于孤立树检测异常点
优点:
  - 处理高维数据效果好
  - 计算效率高
  - 不需要假设数据分布
缺点:
  - 对参数敏感
  - 随机性较大
参数:
  contamination: 异常比例估计
  n_estimators: 树的数量
适用场景:
  - 高维数据
  - 大规模数据集
  - 复杂异常模式

A2. 特征工程方法

A2.1 特征缩放

  1. 标准化 (StandardScaler)
原理: 转换为均值为0、标准差为1的分布
优点:
  - 消除量纲影响
  - 适合正态分布数据
  - 适合梯度下降算法
缺点:
  - 对异常值敏感
  - 改变原始数据分布
适用场景:
  - 线性模型
  - 神经网络
  - 数据近似正态分布
  1. 最小最大缩放 (MinMaxScaler)
原理: 线性变换到[0,1]区间
优点:
  - 保持零值
  - 保持稀疏矩阵稀疏性
缺点:
  - 对异常值敏感
适用场景:
  - 图像处理
  - 神经网络输入
  - 需要非负值的场景
  1. 稳健缩放 (RobustScaler)
原理: 基于分位数的缩放方法
优点:
  - 对异常值不敏感
  - 保持数据分布形状
缺点:
  - 计算相对较慢
适用场景:
  - 存在异常值
  - 分布有偏的数据

A2.2 特征选择

  1. 方差选择
原理: 删除方差小于阈值的特征
优点:
  - 计算简单快速
  - 易于理解
缺点:
  - 忽略特征间相关性
  - 忽略与目标变量的关系
参数:
  threshold: 方差阈值
适用场景:
  - 初步特征筛选
  - 去除常量特征
  1. 互信息选择
原理: 基于特征与目标变量的互信息量选择特征
优点:
  - 可以捕捉非线性关系
  - 适用于分类问题
缺点:
  - 计算开销大
  - 需要离散化连续变量
参数:
  k: 选择的特征数量
适用场景:
  - 分类问题
  - 特征间存在非线性关系

A3. 机器学习模型

A3.1 分类模型

  1. XGBoost
原理: 基于梯度提升的集成树模型
优点:
  - 预测准确率高
  - 处理缺失值
  - 内置正则化
  - 支持并行计算
缺点:
  - 参数调优复杂
  - 内存消耗大
关键参数:
  max_depth: 树的最大深度
  learning_rate: 学习率
  n_estimators: 树的数量
适用场景:
  - 结构化数据
  - 高维特征
  - 大规模数据集
  1. LightGBM
原理: 基于梯度提升的轻量级框架
优点:
  - 训练速度快
  - 内存占用小
  - 支持类别特征
缺点:
  - 小数据集容易过拟合
  - 对参数较敏感
关键参数:
  num_leaves: 叶子节点数
  learning_rate: 学习率
  min_data_in_leaf: 叶节点最小样本数
适用场景:
  - 大规模数据集
  - 高维稀疏特征
  - 类别特征较多
  1. LSTM
原理: 长短期记忆神经网络
优点:
  - 处理序列数据能力强
  - 可以学习长期依赖
  - 解决梯度消失问题
缺点:
  - 训练时间长
  - 需要大量数据
  - 计算资源消耗大
关键参数:
  hidden_units: 隐藏单元数
  num_layers: 网络层数
  dropout_rate: 丢弃率
适用场景:
  - 时间序列预测
  - 自然语言处理
  - 序列分类

A3.2 回归模型

  1. ElasticNet
原理: 结合L1和L2正则化的线性回归
优点:
  - 处理多重共线性
  - 可进行特征选择
  - 防止过拟合
缺点:
  - 需要调整两个正则化参数
  - 只能处理线性关系
关键参数:
  alpha: 正则化强度
  l1_ratio: L1正则化比例
适用场景:
  - 特征间存在相关性
  - 需要特征选择
  - 数据量适中
  1. SVR (支持向量回归)
原理: 基于支持向量机的回归方法
优点:
  - 可处理非线性关系
  - 对异常值不敏感
  - 理论基础扎实
缺点:
  - 计算复杂度高
  - 核函数选择困难
关键参数:
  kernel: 核函数类型
  C: 惩罚参数
  epsilon: 误差容忍度
适用场景:
  - 非线性回归
  - 中小规模数据集
  - 需要高精度预测

补充说明

  1. 所有接口返回格式统一:
{
    "status": "success/error",
    "data/error": {
        // 具体数据或错误信息
    }
}
  1. 错误处理:
  • HTTP 400: 请求参数错误
  • HTTP 401: 未授权访问
  • HTTP 404: 资源不存在
  • HTTP 500: 服务器内部错误
  1. 认证方式:
  • 使用Bearer Token认证
  • Token在请求头中携带
Authorization: Bearer <token>
  1. 数据格式要求:
  • 所有请求和响应均使用JSON格式
  • 文件上传使用multipart/form-data
  • 时间格式统一使用ISO 8601标准
  1. 接口版本控制:
  • 在URL中包含版本号/api/v1/...
  • 在请求头中指定版本API-Version: 1.0
  1. 方法选择建议:

    • 根据数据特点选择合适的预处理方法
    • 考虑计算资源和时间限制
    • 优先选择简单且可解释的方法
  2. 参数调优建议:

    • 使用交叉验证选择参数
    • 考虑模型复杂度和性能的平衡
    • 记录参数调优历史
  3. 性能评估:

    • 使用多个评估指标
    • 考虑模型的稳定性
    • 关注模型在特定场景的表现
    • 关注模型在特定场景的表现