41、自主计算中作为 MAPE - K 循环的反馈控制

自主计算中作为 MAPE - K 循环的反馈控制

1 计算系统中的反馈循环

1.1 自适应和可重构计算系统

计算系统正变得越来越具有动态可重构性或适应性。一方面,这些系统需要对环境变化或执行平台的改变做出动态反应,以提高性能和/或能源效率;另一方面,复杂系统规模过大,手动管理容易出错且效率低下,因此需要自动化管理。

这种趋势在服务和应用软件、中间件、虚拟机、操作系统以及硬件架构等多个层面都有体现。自动化动态适应管理涵盖计算和通信资源、服务质量、容错等多个方面,涉及从传感器网络等小型嵌入式系统到数据中心和云等大规模系统。例如,数据中心基础设施通过管理循环来管理计算资源,通常会考虑能源效率,并可能涉及冷却系统的管理;基于 FPGA 的架构可以在运行时动态部分地重新配置。

1.2 自主计算

自主计算提出了一种通用的反馈循环结构来处理自适应和可重构计算。在这个闭环中,系统配备了传感器监测器和重新配置操作(执行器),二者通过控制和决策组件关联,该组件实现动态适应策略。这个循环可以用 MAPE - K 方法定义,包括对监测数据的分析、规划响应行动、执行这些行动,所有这些都基于对被管理系统的知识表示。

阶段 说明
监测(Monitor) 对系统进行数据采集
分析(Analyse) 对采集的数据进行处理和分析
### 平均绝对百分比误差(MAPE)的定义与计算 平均绝对百分比误差(Mean Absolute Percentage Error, MAPE)是一种常用的回归模型评估指标,用于衡量预测值相对于真实值的平均绝对百分比误差。其计算公式如下: \[ \text{MAPE} = \frac{1}{n} \sum_{i=1}^{n} \left| \frac{y_i - \hat{y}_i}{y_i} \right| \times 100 \] 其中: - \( n \) 是样本数量, - \( y_i \) 表示第 \( i \) 个样本的真实值, - \( \hat{y}_i \) 表示第 \( i \) 个样本的预测值。 此公式的含义是对每个样本的绝对百分比误差取平均,并将其转换为百分比形式[^1]。 在 Python 中可以利用 `sklearn.metrics.mean_absolute_percentage_error` 函数来快速计算 MAPE 值。如果需要手动实现该函数,则可以通过 NumPy 来完成。 --- ### 使用 `scikit-learn` 实现 MAPE 的代码示例 以下是基于 `scikit-learn` 库的 MAPE 计算方式: ```python from sklearn.metrics import mean_absolute_percentage_error import numpy as np # 示例数据 true_values = np.array([3, -0.5, 2, 7]) # 真实值 predicted_values = np.array([2.5, 0.0, 2, 8]) # 预测值 # 计算 MAPE mape_value = mean_absolute_percentage_error(true_values, predicted_values) print(f"MAPE: {mape_value * 100:.2f}%") # 转换为百分比表示 ``` 上述代码通过调用 `mean_absolute_percentage_error` 方法直接获取 MAPE 结果。 --- ### 手动实现 MAPE 的代码示例 如果不依赖外部库,也可以使用纯 Python 或 NumPy 编写自定义函数来计算 MAPE: ```python import numpy as np def calculate_mape(y_true, y_pred): """ 自定义函数用于计算 MAPE 参数: y_true (array-like): 真实值数组 y_pred (array-like): 预测值数组 返回: float: MAPE 值 """ y_true, y_pred = np.array(y_true), np.array(y_pred) # 过滤掉真实值为零的情况以避免除零错误 mask = y_true != 0 return np.mean(np.abs((y_true[mask] - y_pred[mask]) / y_true[mask])) * 100 # 示例数据 true_values = np.array([3, -0.5, 2, 7]) predicted_values = np.array([2.5, 0.0, 2, 8]) # 计算 MAPE mape_result = calculate_mape(true_values, predicted_values) print(f"Custom MAPE: {mape_result:.2f}%") ``` 在此代码中,为了防止分母为零引发异常,增加了过滤条件 `mask = y_true != 0`。 --- ### 数据分割与训练测试集划分 对于实际应用中的机器学习项目,通常会先将数据划分为训练集和测试集后再进行模型训练与验证。以下是一个简单的例子展示如何拆分数据并计算 MAPE: ```python from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_absolute_percentage_error import numpy as np # 构造模拟特征矩阵和标签向量 np.random.seed(42) features_r = np.random.rand(100, 5) # 特征矩阵 labels_b = np.dot(features_r, np.array([1.5, -2.3, 1.1, 0.9, -0.5])) + np.random.normal(size=(100)) # 标签向量 # 划分训练集和测试集 train_features, test_features, train_labels, test_labels = train_test_split( features_r, labels_b, test_size=0.25, random_state=42 )[^2] # 创建线性回归模型并拟合 model = LinearRegression() model.fit(train_features, train_labels) # 获取预测值 predictions = model.predict(test_features) # 计算 MAPE mape_score = mean_absolute_percentage_error(test_labels, predictions) print(f"Model's MAPE on Test Set: {mape_score * 100:.2f}%") ``` 以上代码展示了完整的流程:从数据准备到模型训练再到性能评估[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值