mae与rmse公式 python
时间: 2023-10-16 07:07:15 浏览: 83
MAE和RMSE是用于衡量模型预测误差的指标,它们的公式如下:
MAE(平均绝对误差):
$$MAE = \frac{1}{n}\sum_{i=1}^n|y_i - \hat{y_i}|$$
RMSE(均方根误差):
$$RMSE = \sqrt{\frac{1}{n}\sum_{i=1}^n(y_i - \hat{y_i})^2}$$
其中,$n$表示样本数量,$y_i$表示真实值,$\hat{y_i}$表示预测值。
下面是Python的实现代码:
```python
import numpy as np
# 计算MAE
def mae(y_true, y_pred):
return np.mean(np.abs(y_true - y_pred))
# 计算RMSE
def rmse(y_true, y_pred):
return np.sqrt(np.mean(np.square(y_true - y_pred)))
```
其中,`y_true`和`y_pred`分别表示真实值和预测值。可以使用numpy库中的函数来计算平均值和平方等操作。
相关问题
mae, mse, rmse, r2
在Python中,MAE(Mean Absolute Error)、MSE(Mean Squared Error)、RMSE(Root Mean Squared Error)和R²(R-squared)都是评估模型预测性能的指标,通常用于回归分析。
1. **MAE (Mean Absolute Error)**:平均绝对误差,计算的是每个预测值与真实值之间的绝对差的平均值。它对异常值不敏感,因为没有平方项,所以较小的数据偏差不会被放大。
```python
from sklearn.metrics import mean_absolute_error
y_true = [1, 2, 3, 4]
y_pred = [1.5, 2.8, 2.9, 4.0]
mae = mean_absolute_error(y_true, y_pred)
```
2. **MSE (Mean Squared Error)**:均方误差,计算的是每个预测值与真实值之间差的平方的平均值。由于平方的存在,较大的偏差会被放大,因此MSE更侧重于惩罚大的错误。
```python
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(y_true, y_pred)
```
3. **RMSE (Root Mean Squared Error)**:根均方误差,是MSE的平方根,它提供了MSE的一个直观尺度,单位与原始数据相同。计算公式是MSE的平方根,使得结果更容易理解。
```python
rmse = np.sqrt(mean_squared_error(y_true, y_pred))
```
4. **R² (R-squared or Coefficient of Determination)**:决定系数或R方,衡量了模型能够解释因变量变异性的比例。它的取值范围在0到1之间,越接近1表示模型拟合得越好;0则表示模型没有任何解释能力。
```python
from sklearn.metrics import r2_score
r2 = r2_score(y_true, y_pred)
```
这些指标在选择和比较模型时非常有用,可以帮助我们了解哪些模型更好地捕捉到了数据中的模式。使用哪个指标取决于具体的问题和偏好,比如对于稳健度要求较高的情况,可能更倾向于使用MAE,而对于追求高精度的情况,则可能关注RMSE和R²。
用python定义一个类,实现有三层感知器的BP神经网络算法,使其将数据集EGT_corret划分为训练集EGT_train、预测集EGT_pred和验证集EGT_val,其比例为6:2:2,对神经网络进行训练后输出评价指标MAE、MSE和RMSE
首先,让我们一步步地创建一个三层感知器的BP(Backpropagation)神经网络,并使用Python来实现。我们将使用`numpy`库来进行矩阵运算,`sklearn`库中的`train_test_split`来划分数据集,以及`scikit-neuralnetwork`库来构建和训练神经网络。如果你还没有安装这些库,可以通过pip安装:
```bash
pip install numpy scikit-learn scikit-neuralnetwork
```
以下是一个简单的实现步骤:
1. 导入所需的库
2. 定义神经网络结构(三层感知器)
3. 加载数据并划分数据集
4. 创建神经网络模型
5. 初始化权重和偏置
6. 定义激活函数(sigmoid或ReLU等)
7. 训练模型(包含前向传播、反向传播和参数更新)
8. 测试模型(计算MAE、MSE和RMSE)
```python
import numpy as np
from sklearn.model_selection import train_test_split
from sknn.mlp import Classifier, Layer
# 假设你已经有了一个名为EGT_corret的数据集,包含特征X和目标变量y
X = EGT_corret.drop('target', axis=1) # 删掉最后一列作为目标变量
y = EGT_corret['target']
# 数据集划分
test_size = 0.4
random_state = 42
X_train, X_val_pred, y_train, y_val = train_test_split(X, y, test_size=test_size, random_state=random_state, stratify=y)
# 创建三层感知器神经网络(隐藏层节点数量可调整)
hidden_layer_1 = Layer("Rectifier", units=10)
hidden_layer_2 = Layer("Rectifier", units=10)
output_layer = Layer("Linear") # 输出层,没有激活函数,因为我们处理的是回归问题
# 创建神经网络模型
model = Classifier(
layers=[hidden_layer_1, hidden_layer_2, output_layer],
learning_rate=0.01, # 学习率
n_iter=1000 # 迭代次数
)
# 初始化权重和偏置
model.initialize()
# 激活函数(这里使用ReLU)
def relu(x):
return np.maximum(0, x)
# 前向传播函数
def forward_pass(model, inputs):
for layer in model.layers[:-1]:
inputs = layer(inputs)
return model.layers[-1](inputs)
# 反向传播和参数更新
def backpropagation(model, inputs, targets, output):
... (这里你需要实现BP算法的具体步骤,包括梯度计算和参数更新)
# 训练模型
for i in range(model.n_iter):
# 前向传播
outputs = forward_pass(model, X_train)
# 计算误差
errors = outputs - y_train
# 反向传播和参数更新
backpropagation(model, X_train, y_train, outputs)
# 验证集上的评估
if i % 100 == 0 or i == model.n_iter - 1:
val_outputs = forward_pass(model, X_val_pred)
mae = mean_absolute_error(y_val, val_outputs)
mse = mean_squared_error(y_val, val_outputs)
rmse = np.sqrt(mse)
print(f"Iteration {i+1}: MAE={mae:.4f}, MSE={mse:.4f}, RMSE={rmse:.4f}")
# 注意:你需要自己实现backpropagation函数,这通常涉及到计算梯度和更新权重的过程。具体的公式取决于所使用的损失函数和激活函数。
阅读全文