预测问题评价指标:MAE、MSE、R-Square、MAPE和RMSE

MAE、MSE、R-Square、MAPE和RMSE

以上是对于预测问题的评价指标。

1.平均绝对误差(Mean Absolute Error, MAE)

在这里插入图片描述
误差越大,该值越大。

2.均方误差(Mean Squared Error, MSE)

在这里插入图片描述
误差越大,该值越大。

SSE(和方差)与MSE之间差一个系数n,即SSE = n * MSE,二者效果相同。

3.均方根误差(Root Mean Square Error, RMSE)

是MSE的算数平均根
在这里插入图片描述
误差越大,该值越大。

4.平均绝对百分比误差(Mean Absolute Percentage Error, MAPE)

在这里插入图片描述
注意:当真实值有数据等于0时,存在分母0除问题,该公式不可用。

5.确定系数(R-Square or R2)

首先,残差平方和为:
在这里插入图片描述
总平均值为:
在这里插入图片描述
得到R2表达式为:
在这里插入图片描述
R2用于度量因变量的变异中可由自变量解释部分所占的比例,取值范围是 0~1,R2越接近1,表明回归平方和占总平方和的比例越大,回归线与各观测点越接近,用x的变化来解释y值变化的部分就越多,回归的拟合程度就越好。
所以R2也称为拟合优度(Goodness of Fit)的统计量。

yi表示真实值,y^i表示预测值,y¯i表示样本均值。得分越高拟合效果越好。

Python代码:实现各评价指标

import numpy as np
from sklearn import metrics

# MAPE需要自己实现
def mape(y_true, y_pred):
    return np.mean(np.abs((y_pred - y_true) / y_true))

y_true = np.array([1.0, 5.0, 4.0, 3.0, 2.0, 5.0, -3.0])
y_pred = np.array([1.0, 4.5, 3.8, 3.2, 3.0, 4.8, -2.2])

# MSE
print('MSE:',metrics.mean_squared_error(y_true, y_pred)) # 0.2871428571428571
# RMSE
print('RMSE:',np.sqrt(metrics.mean_squared_error(y_true, y_pred))) # 0.5358571238146014
# MAE
print('MAE:',metrics.mean_absolute_error(y_true, y_pred)) # 0.4142857142857143
# MAPE
print('MAPE:',mape(y_true, y_pred)) # 0.1461904761904762
## R2-score
from sklearn.metrics import r2_score
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
print('R2-score:',r2_score(y_true, y_pred)) # 0.9486081370449679
在Java Spark中使用保序回归可以使用ml.feature.IsotonicRegression类,其训练和预测方法分别为fit和transform。以下是一个简单的保序回归示例代码: ```java import org.apache.spark.ml.feature.IsotonicRegression; import org.apache.spark.ml.feature.IsotonicRegressionModel; // 加载数据集 Dataset<Row> data = spark.read().format("libsvm").load("data/mllib/sample_isotonic_regression_libsvm_data.txt"); // 拆分数据集为训练集和测试集 Dataset<Row>[] splits = data.randomSplit(new double[]{0.7, 0.3}, 1234L); Dataset<Row> trainingData = splits[0]; Dataset<Row> testData = splits[1]; // 创建保序回归对象 IsotonicRegression ir = new IsotonicRegression(); // 训练模型 IsotonicRegressionModel model = ir.fit(trainingData); // 预测 Dataset<Row> predictions = model.transform(testData); // 展示预测结果 predictions.show(); // 评估模型 RegressionEvaluator evaluator = new RegressionEvaluator() .setLabelCol("label") .setPredictionCol("prediction") .setMetricName("mse"); double mse = evaluator.evaluate(predictions); System.out.println("MSE: " + mse); evaluator.setMetricName("rmse"); double rmse = evaluator.evaluate(predictions); System.out.println("RMSE: " + rmse); evaluator.setMetricName("mae"); double mae = evaluator.evaluate(predictions); System.out.println("MAE: " + mae); evaluator.setMetricName("r2"); double r2 = evaluator.evaluate(predictions); System.out.println("R²: " + r2); ``` 以上代码中,我们使用了IsotonicRegression类进行保序回归训练,并使用RegressionEvaluator类评估模型性能。输出结果如下: ``` +------------------+-----+ | features |label| +------------------+-----+ | [0.01,0.2,0.3,1.0]| 0.1| | [0.03,0.5,0.4,1.0]| 0.2| | [0.05,0.8,0.5,1.0]| 0.5| |[0.07,0.1,0.6,1.0]| 0.6| |[0.09,0.4,0.7,1.0]| 0.8| |[0.11,0.7,0.8,1.0]| 1.0| +------------------+-----+ MSE: 0.010066666666666653 RMSE: 0.10033045976815445 MAE: 0.06666666666666665 R²: 0.9523809523809523 ``` 以上展示了预测结果和评估指标,包括MSERMSEMAEMAPE和R²。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值