实验目的
理解和掌握回归问题和分类问题模型评估方法,学会使用均方误差、最大绝对误差、均方根误差指标评估回归模型,学会使用错误率、精度、查全率、查准率、F1指标评价分类模型。
实验内容
给定回归问题的真实标签和多个算法的预测结果,编程实现MSE、MAE、RMSE三种评测指标,对模型进行对比分析。给定二分类问题真实标签和多个算法的预测结果,编程实现混淆矩阵评测,采用错误率、精度、查全率、查准率、F1指标对结果进行对比分析。
实验环境
python
numpy
实验代码
问题1代码
import numpy as np
# 读入回归数据
dataset01 = np.genfromtxt("experiment_01_dataset_01.csv", delimiter=',', skip_header=1, usecols=range(1, 5))
# 得到数据总条数
numberOfData01 = dataset01.shape[0]
print("----------回归问题评测指标----------")
# 模型一到模型三
for i in range(1, 4):
# 初始化
MSE = 0.0
MAE = 0.0
# 遍历所有真实结果和预测结果
for j in range(numberOfData01):
# 得到残差
temp1 = dataset01[j, 0] - dataset01[j, i]
# 平方
temp2 = temp1 * temp1
# 求和
MSE += temp2
MAE += np.abs(temp1)
# 计算指标
MSE /= numberOfData01
RMSE = np.sqrt(MSE)
MAE /= numberOfData01
# 打印结果(保留2位小数)
print(f"模型{i}指标-> MSE: {MSE: .2f} | RMSE: {RMSE: .2f} | MAE: {MAE: .2f}")
print("---------------------------------")
问题2代码
import numpy as np
# 读入分类数据
dataset02 = np.genfromtxt("experiment_01_dataset_02.csv", delimiter=',', skip_header=1, usecols=range(1, 5))
# 得到数据总条数
numberOfData02 = dataset02.shape[0]
print("----------二分类问题评测指标----------")
# 从模型一到模型三
for i in range(1, 4):
# 初始化
TP = 0
FN = 0
FP = 0
TN = 0
# 遍历所有数据
for j in range(numberOfData02):
# 真实标签
temp1 = dataset02[j, 0]
# 预测标签
temp2 = dataset02[j, i]
# 判断情况
if np.isclose(temp1, 1.0) and np.isclose(temp2, 1.0):
TP += 1
elif np.isclose(temp1, 1.0) and np.isclose(temp2, 0.0):
FN += 1
elif np.isclose(temp1, 0.0) and np.isclose(temp2, 1.0):
FP += 1
else:
TN += 1
# 计算结果
R = TP / (TP + FN)
P = TP / (TP + FP)
F1 = (2 * P * R) / (P + R)
E = (FN + FP) / numberOfData02
# 打印结果(保留2位小数)
print(f"模型{i}评测结果")
print("混淆矩阵")
print(f"{TP} {FN}")
print(f"{FP} {TN}")
print(f"E: {E: .2f} | R: {R: .2f} | P: {P: .2f} | F1: {F1: .2f}")
print("\n")
print("--------------------------------")
结果分析
问题1结果分析
模型\指标 |
MSE |
MAE |
RMSE |
模型1 |
10.76 |
2.72 |
3.28 |
模型2 |
7.65 |
2.33 |
2.77 |
模型3 |
46.24 |
6.68 |
6.80 |
问题2结果分析
模型1混淆矩阵:
真实情况 |
预测结果 |
|
正例 |
反例 |
|
正例 |
88 |
9 |
反例 |
89 |
1814 |
模型2混淆矩阵:
真实情况 |
预测结果 |
|
正例 |
反例 |
|
正例 |
87 |
10 |
反例 |
176 |
1727 |
模型3混淆矩阵:
真实情况 |
预测结果 |
|
正例 |
反例 |
|
正例 |
79 |
18 |
反例 |
266 |
1637 |
模型\指标 |
查准率(precision) |
查全率(recall) |
F1 |
模型1 |
0.50 |
0.91 |
0.64 |
模型2 |
0.33 |
0.90 |
0.48 |
模型3 |
0.23 |
0.81 |
0.36 |