From 98b2b755a05b5a2ff62a90ab839b4908886a0593 Mon Sep 17 00:00:00 2001 From: haotian <2421912570@qq.com> Date: Thu, 10 Apr 2025 16:45:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9--=E4=BF=AE=E6=94=B9=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/典型示例新版.md | 80 +++++++++++++++++++++++++++--------- model/model.yaml | 58 ++++++++++++++++++++++++++ model/parameter.yaml | 97 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 216 insertions(+), 19 deletions(-) diff --git a/doc/典型示例新版.md b/doc/典型示例新版.md index 59ff0e0..3236142 100644 --- a/doc/典型示例新版.md +++ b/doc/典型示例新版.md @@ -6,7 +6,7 @@ #### 1.1.1 数据集概述 -NASA Turbofan Engine Degradation Simulation数据集(通常称为C-MAPSS数据集)是一个广泛应用于预测性维护和剩余使用寿命(Remaining Useful Life, RUL)预测的基准数据集。它由NASA的Prognostics Center of Excellence (PCoE)开发,旨在模拟航空发动机在运行过程中的性能退化,帮助研究人员开发和验证故障预测与健康管理(PHM)算法。 +NASA Turbofan Engine Degradation Simulation数据集(通常称为C-MAPSS数据集)是一个广泛应用于预测性维护和剩余使用寿命(Remaining Useful Life, RUL)预测的基准数据集。它由NASA的Prognostics Center of Excellence (PCoE)开发,旨在模拟航空发动机在运行过程中的性能退化,帮助研究人员开发和验证故障预测算法。 **数据集背景**: - **目标**:预测涡轮发动机的剩余使用寿命(RUL),即在发生故障前还能正常运行的时间周期 @@ -28,9 +28,9 @@ NASA Turbofan Engine Degradation Simulation数据集(通常称为C-MAPSS数据 ### 1.2 数据集处理流程 -1. **剩余寿命计算**:根据`RUL_FD001.txt`中每个发动机最后时刻的剩余寿命,反推前一时刻的寿命值 -2. **数据格式转换**:将原始txt数据转换为csv格式便于处理 -3. **冗余列移除**:观察发现第2、3、7、8、12、19、22列数据值相同,移除这些冗余列,保留17列有效特征 +1. **特征生成(剩余寿命计算)**:原始数据集中只存在每个发动机模拟运行后最终的剩余寿命,可以通过最终寿命和两个时刻的时间差,反推前一时刻的寿命值. +2. **数据格式转换**:将原始txt数据转换为csv格式便于处理.共8个txt文件(4特征,4结果),共80000多数据. +3. **冗余数据移除**:观察发现第2、3、7、8、12、19、22列数据值相同,移除这些冗余列,保留17列有效特征 4. **异常值检测**:采用IsolationForest方法识别并移除异常值 5. **数据标准化**:使用StandardScaler方法将特征缩放到[-1, 1]区间 6. **数据集划分**:按照8:2的比例划分训练集和验证集 @@ -68,7 +68,28 @@ NASA Turbofan Engine Degradation Simulation数据集(通常称为C-MAPSS数据 #### 1.3.1 算法选择 -剩余寿命预测属于回归任务,我们从以下常用回归算法中选择了四种代表性方法: +剩余寿命预测属于回归任务,我们的平台共存在以下可选的方法: +```json +{ + "method": [ + "LinearRegression", // 线性回归,适用于线性关系明确,且数据量适中的问题。 + "PolynomialRegression", // 多项式回归,适用于非线性数据拟合,但需避免过拟合。 + "Ridge", //岭回归,适用于特征多且存在共线性的线性回归问题 + "Lasso", // Lasso回归,适用于需要特征选择或特征较多的线性回归问题 + "ElasticNet",// 弹性网络回归, 适用于高维数据,且特征间存在线性相关的情况。 + "SVR", // 支持向量回归,适用于数据具有非线性关系且数据量适中的问题。 + "DecisionTreeRegressor", // 决策树回归, 适用于非线性回归,且对数据的复杂性有较高的容忍度。 + "RandomForestRegressor",// 随机森林回归,适用于复杂的回归问题,尤其是特征维度较高的场景。 + "XGBRegressor",// XGBoost回归,适用于大规模数据集且对预测精度要求较高的问题。 + "AdaBoostRegressor",// AdaBoost回归, 适用于弱学习器的组合优化问题,特别是样本不平衡的场景。 + "CatBoostRegressor",// CatBoost回归, 适用于包含大量类别特征的数据集,且数据量较大的问题。 + "LGBMRegressor",// LightGBM回归,适用于大规模数据集,尤其是处理海量数据时效果优越。 + "MLPRegressor"// 多层感知机,适用于需要捕捉复杂非线性关系的回归问题,尤其在数据量大时效果较好 + ] +} +``` +现实中,结果(寿命)和特征(传感器数据)一般不是简单的线性关系.所以,我们采用以下四种适用于非线性数据的回归方法. + - RandomForestRegressor - XGBRegressor - LGBMRegressor @@ -76,7 +97,7 @@ NASA Turbofan Engine Degradation Simulation数据集(通常称为C-MAPSS数据 #### 1.3.2 RandomForestRegressor模型 -**初始参数设置**: +**模型初始参数**: ```json { "algorithm": "RandomForestRegressor", @@ -89,15 +110,15 @@ NASA Turbofan Engine Degradation Simulation数据集(通常称为C-MAPSS数据 } ``` -**初始训练结果**: +**模型初始训练结果**: ```json { "metrics": { - "mae": 44.86, - "mse": 3357.92, - "rmse": 57.95, - "r2": 0.445, - "explained_variance": 0.445 + "mae": 44.86,// 平均绝对误差,表示预测值与真实值之差的绝对值的均值。 + "mse": 3357.92,// 均方误差,表示预测值与真实值之差的平方的均值。 + "rmse": 57.95, // 均方根误差,上一个数开根号 + "r2": 0.445, // 决定系数,表示模型解释数据方差的能力 + "explained_variance": 0.445 // 解释方差,衡量预测数据与真实数据的方差相似程度。 } } ``` @@ -107,6 +128,7 @@ NASA Turbofan Engine Degradation Simulation数据集(通常称为C-MAPSS数据 - 超过55%的变异性未被模型捕获,说明初始模型拟合效果不佳 **模型优化方法** +- 实际过程中,我们往往需要调整参数进行多次实验,才能得到更好的结果.每次手动调整参数太过繁琐,平台提供了自动优化方法.只要事先指定参数搜索范围和评价指标,平台会自动搜索最优模型并保存最优参数.以下是实现的模型优化方法. ```json { "status": "success", @@ -160,7 +182,7 @@ NASA Turbofan Engine Degradation Simulation数据集(通常称为C-MAPSS数据 ``` **参数优化**: -RandomForestRegressor使用GridSearchCV进行超参数调优,探索以下参数组合(共1296种组合): +GridSearchCV 会穷举我们设定的每一种组合,来寻找最优模型.我们的参数可选值如下所示.共需要探索3x4x3x3x3x2x2=1296参数组合. | 参数名称 | 可选值 | |----------|--------| @@ -172,14 +194,14 @@ RandomForestRegressor使用GridSearchCV进行超参数调优,探索以下参 | bootstrap | true, false | | criterion | "squared_error", "absolute_error" | -**计算机配置** +**实验计算机配置** - CPU: 12th Gen Intel(R) Core(TM) i5-12600KF - 内存: 32G ddr4 3200 - GPU: NVIDIA GeForce RTX 3060 12G **优化结果**: -- 共计1296种优化组合,每种组合耗时越30s,共耗时越11小时.随着搜索项数的增多,模型优化的时间成倍数增长.建议只在网格数较少时使用网格搜索. +- 共计1296种优化组合,每种组合约耗时32s,共耗时约11小时.随着搜索项数的增多,模型优化的时间成倍数增长.建议只在网格数较少时使用网格搜索. ```json { "metrics": { @@ -241,9 +263,9 @@ RandomForestRegressor使用GridSearchCV进行超参数调优,探索以下参 } ``` -### 1.5 研究意义与工业应用 +### 1.5 工业应用价值 -本研究在以下几个方面具有重要意义: +本案例在以下几个方面具有重要意义: 1. **预测性维护革新**:准确预测发动机剩余寿命可显著减少计划外停机时间,优化维护计划,节省维护成本 2. **安全性提升**:提前预知潜在故障风险,避免灾难性故障,特别是在航空等高风险领域 @@ -348,7 +370,7 @@ Concrete Strength Prediction数据集包含1030个样本,涵盖混凝土配比 - R²高达0.92,表明模型捕捉到了混凝土配方与强度之间的复杂关系 - 训练时间虽然比RandomForest长,但比LGBM快得多,在性能和效率之间达到良好平衡 -**研究意义与行业应用**: +**行业应用价值**: 1. **材料设计优化**: - 减少实验室试验次数,降低材料研发成本 @@ -443,6 +465,26 @@ TEP数据集共包含53个特征列: ### 3.3 模型开发与评估 +平台实现的分类方法 +```json +"method": [ + "LogisticRegression", // 逻辑回归是一种线性分类模型,使用 Sigmoid 函数将线性回归的输出映射到 [0,1] 之间,适用于二分类问题。 + "SVC", // 支持向量机(SVM)通过寻找最大化类别间隔的超平面进行分类,支持线性和非线性分类(通过核函数)。 + "SVDD",// 支持向量数据描述(SVDD)是一种基于支持向量机的单类分类方法,通过寻找最小球面来包围正常数据点,从而检测异常值。 + "DecisionTreeClassifier", // 决策树基于特征的划分规则构建一棵树,通过树结构进行分类 + "RandomForestClassifier", // 随机森林是一种集成学习方法,通过构建多个决策树并投票或平均进行分类,提高模型的稳定性和准确性。 + "XGBClassifier", // XGBoost(Extreme Gradient Boosting)是一种基于梯度提升树(GBDT)的改进算法,具有更强的正则化和并行处理能力。 + "AdaBoostClassifier", // AdaBoost 是一种提升方法,它通过组合多个弱分类器来提高整体分类精度,赋予错误分类样本更高的权重。 + "CatBoostClassifier", // CatBoost 是一种专为类别特征优化的梯度提升决策树方法,适用于处理高维稀疏数据。 + "LGBMClassifier", // LightGBM 是一种基于直方图优化的梯度提升树方法,优化了计算效率,适用于大规模数据。 + "GaussianNB", // 高斯朴素贝叶斯基于贝叶斯定理,假设特征服从高斯分布进行分类。 + "KNeighborsClassifier", // K 近邻(KNN)是一种基于距离度量的分类算法,通过找到最近的 K 个邻居来进行分类。 + "MLPClassifier", // 多层感知机(MLP)是一种前馈神经网络,通过多个隐藏层和非线性激活函数实现复杂分类任务。 + "GradientBoostingClassifier", // 梯度提升决策树(GBDT)是一种集成学习方法,通过迭代训练多个决策树,使模型不断优化误差。 + "DNN" // 深度神经网络(DNN)是一种多层神经网络,通过多层非线性变换提取数据的复杂特征。 + ] +``` + 异常检测任务属于多分类问题(正常+21种故障类型),我们选择了以下五种分类算法进行评估: 1. SVC (Support Vector Classification) @@ -495,7 +537,7 @@ TEP数据集共包含53个特征列: | 反应物比例异常(8) | 0.84 | 0.81 | 0.82 | 原料流量比例变化 | | 多参数异常(15) | 0.78 | 0.75 | 0.76 | 多项指标同时变化 | -#### 3.4.3 研究意义与工业价值 +#### 3.4.3 工业价值 **安全生产与事故预防**: - 提前识别设备或工艺异常,防止事故发生 diff --git a/model/model.yaml b/model/model.yaml index e641bb2..24183a1 100644 --- a/model/model.yaml +++ b/model/model.yaml @@ -158,6 +158,35 @@ classification_algorithms: - "自动驾驶。" - "自然语言处理。" + CNN: + principle: "全卷积网络(CNN)是一种专为序列数据设计的深度学习模型,通过一维卷积层提取时序特征,适用于时间序列分类任务。" + advantages: + - "能够自动提取时序特征,无需手动特征工程。" + - "对序列长度不敏感,可处理变长序列。" + - "计算效率高,训练速度快。" + disadvantages: + - "需要大量数据进行训练。" + - "对超参数选择较为敏感。" + applicable_scenarios: + - "工业设备故障分类。" + - "传感器数据异常检测。" + - "时序信号分类。" + + FCNN: + principle: "全连接神经网络(FCNN)是一种基础的前馈神经网络,通过多层全连接层和非线性激活函数实现复杂分类任务。" + advantages: + - "结构简单,易于理解和实现。" + - "能够学习复杂的非线性关系。" + - "适用于各种类型的输入数据。" + disadvantages: + - "参数量大,容易过拟合。" + - "对高维数据的处理效率较低。" + - "需要大量数据进行训练。" + applicable_scenarios: + - "图像分类。" + - "文本分类。" + - "特征维度适中的分类问题。" + regression_algorithms: LinearRegression: @@ -290,6 +319,35 @@ regression_algorithms: - "容易过拟合,特别是在数据较少时" applicable_scenarios: "适用于需要捕捉复杂非线性关系的回归问题,尤其在数据量大时效果较好。" + CNN: + principle: "全卷积网络回归(CNN)是一种专为时间序列回归设计的深度学习模型,通过一维卷积层提取时序特征,预测连续值。" + advantages: + - "能够自动提取时序特征,无需手动特征工程。" + - "对序列长度不敏感,可处理变长序列。" + - "计算效率高,训练速度快。" + disadvantages: + - "需要大量数据进行训练。" + - "对超参数选择较为敏感。" + applicable_scenarios: + - "设备剩余寿命预测。" + - "能源消耗预测。" + - "金融市场趋势预测。" + + FCNNRegressor: + principle: "全连接神经网络回归器(FCNN)是一种基于多层感知机的回归模型,通过多层全连接层和非线性激活函数实现连续值预测。" + advantages: + - "能够学习复杂的非线性关系。" + - "结构灵活,可根据问题复杂度调整网络深度和宽度。" + - "适用于各种类型的回归问题。" + disadvantages: + - "容易过拟合,需要适当的正则化。" + - "训练时间较长,尤其是数据量大时。" + - "对超参数选择较为敏感。" + applicable_scenarios: + - "房价预测。" + - "股票价格预测。" + - "能源消耗预测。" + clustering_algorithms: KMeans: principle: "K均值聚类通过最小化样本点到其最近簇中心的距离来将数据分为K个簇。" diff --git a/model/parameter.yaml b/model/parameter.yaml index 8bef8e4..46d1706 100644 --- a/model/parameter.yaml +++ b/model/parameter.yaml @@ -199,6 +199,64 @@ classification_algorithms: default: "3" description: "每棵树的最大深度。" + DNN: + parameters: + - name: "hidden_layer_sizes" + type: "tuple" + default: "(100, 50)" + description: "隐藏层的神经元数量和层数。" + - name: "activation" + type: "str" + default: "relu" + description: "激活函数,可选 'identity', 'logistic', 'tanh', 'relu'。" + - name: "solver" + type: "str" + default: "adam" + description: "优化算法,可选 'lbfgs', 'sgd', 'adam'。" + - name: "alpha" + type: "float" + default: "0.0001" + description: "L2正则化参数。" + - name: "max_iter" + type: "int" + default: "200" + description: "最大迭代次数。" + + FCNN: + parameters: + - name: "hidden_layers" + type: "list" + default: "[512, 256, 128]" + description: "隐藏层的神经元数量列表,列表长度决定了网络深度。" + - name: "activation" + type: "str" + default: "relu" + description: "激活函数,可选 'relu', 'tanh', 'sigmoid'等。" + - name: "dropout_rate" + type: "float" + default: "0.3" + description: "Dropout层的丢弃率,用于防止过拟合。" + - name: "batch_size" + type: "int" + default: "32" + description: "训练批次大小,影响训练速度和内存使用。" + - name: "learning_rate" + type: "float" + default: "0.001" + description: "学习率,控制参数更新步长。" + - name: "epochs" + type: "int" + default: "100" + description: "训练轮数,控制模型训练的总迭代次数。" + - name: "optimizer" + type: "str" + default: "adam" + description: "优化器,可选 'adam', 'sgd', 'rmsprop'等。" + - name: "batch_normalization" + type: "bool" + default: "True" + description: "是否使用批量归一化,有助于加速训练和提高模型稳定性。" + regression_algorithms: LinearRegression: @@ -480,6 +538,45 @@ regression_algorithms: default: "200" description: "最大迭代次数。" + FCNNRegressor: + parameters: + - name: "hidden_layers" + type: "list" + default: "[512, 256, 128]" + description: "隐藏层的神经元数量列表,列表长度决定了网络深度。" + - name: "activation" + type: "str" + default: "relu" + description: "激活函数,可选 'relu', 'tanh', 'sigmoid'等。" + - name: "dropout_rate" + type: "float" + default: "0.3" + description: "Dropout层的丢弃率,用于防止过拟合。" + - name: "batch_size" + type: "int" + default: "32" + description: "训练批次大小,影响训练速度和内存使用。" + - name: "learning_rate" + type: "float" + default: "0.001" + description: "学习率,控制参数更新步长。" + - name: "epochs" + type: "int" + default: "100" + description: "训练轮数,控制模型训练的总迭代次数。" + - name: "optimizer" + type: "str" + default: "adam" + description: "优化器,可选 'adam', 'sgd', 'rmsprop'等。" + - name: "batch_normalization" + type: "bool" + default: "True" + description: "是否使用批量归一化,有助于加速训练和提高模型稳定性。" + - name: "loss_function" + type: "str" + default: "mse" + description: "损失函数,可选 'mse'(均方误差), 'mae'(平均绝对误差), 'huber'(Huber损失)等。" + clustering_algorithms: KMeans: