西南交通大学机器学习实验实验一:模型评估

西南交通大学机器学习实验

实验一:模型评估

实验目的
理解和掌握回归问题和分类问题模型评估方法,学会使用均方误差、最大绝对误差、均方根误差指标评估回归模型,学会使用错误率、精度、查全率、查准率、F1指标评价分类模型。
实验内容
(1) 给定回归问题的真实标签和多个算法的预测结果,编程实现MSE、MAE、RMSE三种评测指标,对模型进行对比分析。
(2) 给定二分类问题真实标签和多个算法的预测结果,编程实现混淆矩阵评测,采用错误率、精度、查全率、查准率、F1指标对结果进行对比分析。
实验环境
Python python 3.9
Numpy numpy 1.23.5
Intel® Core™ i7-9750H CPU @ 2.60GHz 16.0 GB
Windows专业版

回归问题评价指标

设有

西瓜书上关于MSE、MAE、RMSE的讲解很少,需要自己查找相关资料,站内相关的资料很多,大家讲的都比我好。

均方误差 MSE

均方误差(Mean Square Error,MSE),反映估计量与被估计量之间差异程度的一种度量。设t是根据子样确定的总体参数θ的一个估计量,(θ-t)2的数学期望,称为估计量t的均方误差。它等于σ2+b2,其中σ2与b分别是t的方差与偏倚。
MSE计算公式:
MSE

平均绝对误差 MAE

平均绝对误差(Mean Absolute Error,MAE),绝对偏差平均值即平均偏差,指各次测量值的绝对偏差绝对值的平均值。平均绝对误差可以避免误差相互抵消的问题,因而可以准确反映实际预测误差的大小。
MAE计算公式:
MAE

均方根误差 RMSE

均方根误差(Root Mean Square Error,RMSE),从名称来看,我们都能猜得到是什么意思。多了一个根,这个“根”的意思顾名思义,就只是加了个根号。均方根误差是预测值与真实值偏差的平方与观测次数n比值的平方根,在实际测量中,观测次数n总是有限的,真值只能用最可信赖(最佳)值来代替。
RMSE计算公式:
RMSE

使用numpy库计算

# MSE--相当于target-pre的二范数的平方/n
def mse(tar, pre):
    return np.linalg.norm(tar - pre, ord=2) ** 2 / len(tar)

# RMSE--相当于target-pre的二范数/根号n
def rmse(tar, pre):
    return np.linalg.norm(tar - pre, ord=2) / np.sqrt(len(tar))

# MAE--相当于target-pre的一范数/n
def mae(tar, pre):
    return np.linalg.norm(tar - pre, ord=1) / len(tar)

使用sklearn.metrics库计算

MSE = me.mean_squared_error(tar, pre)
RMSE = me.mean_squared_error(tar, pre) ** 0.5
MAE = me.mean_absolute_error(tar, pre)

实验结果

数据集内容共有1000条

# x, y,prediction 1,prediction 2, prediction 3
0.55,-1.00,3.30,-1.49,7.80
0.79,-5.71,0.87,-6.78,2.50
0.59,-1.40,3.16,-2.27,7.05
0.50,0.48,2.70,-0.68,8.57
0.17,2.95,4.40,2.13,10.72
······

参考实验结果

模型\指标MSEMAERMSE
模型129.6694.3285.447
模型20.5390.6690.734
模型369.5308.3278.338

二分类问题评价指标

混淆矩阵

我介绍的不好,可以看看这篇文章【混淆矩阵】
站内还有其他很好的介绍,二分类看看西瓜书就暂时够用了

真实\预测正例反例
正例TPFN
反例FPTN
def perf_measure(tar, pre):
    TP, FP, TN, FN = 0, 0, 0, 0

    for i in range(len(tar)):
        if tar[i] == 1 and pre[i] == 1:
           TP += 1
        if tar[i] == 0 and pre[i] == 1:
           FP += 1
        if tar[i] == 0 and pre[i] == 0:
           TN += 1
        if tar[i] == 1 and pre[i] == 0:
           FN += 1

    return TP, FP, TN, FN

使用numpy巧妙计算混淆矩阵
这是我在做后面的实验的时候想到是否可以用更简单方式计算混淆矩阵时想到的,已经有人写出来相关教程了,讲的也比我好,我就不再重复了
原理看这篇文章

def genConfusionMatrix(pre, label, n):
    return np.bincount(n * label + pre, minlength=n ** 2).reshape(n, n)

错误率、精度

精度(accuracy),指的是分类正确的样本数站样本总数的比例。以西瓜问题为例,算法挑出的西瓜分类正确的个数占总西瓜个数比例。
错误率指的是分类错误的样本数站样本总数的比例。以西瓜问题为例,算法挑出的西瓜分类错误的个数占总西瓜个数比例。且有错误率 = 1 - 精度
Accuracy

查准率

查准率(precision),指的是预测值为1且真实值也为1的样本在预测值为1的所有样本中所占的比例。以西瓜问题为例,算法挑出来的西瓜中有多少比例是好西瓜。
Precision

召回率

召回率(recall),也叫查全率,指的是预测值为1且真实值也为1的样本在真实值为1的所有样本中所占的比例。所有的好西瓜中有多少比例被算法挑了出来。
Recall

F1指标

F1分数(F1-Score),又称为平衡F分数(BalancedScore),它被定义为精确率和召回率的调和平均数。
F1指标

实验结果

数据集内容共有1000条

# x, y,prediction 1,prediction 2, prediction 3
0.77,1.00,1.00,1.00,1.00
0.57,0.00,0.00,0.00,0.00
0.03,1.00,1.00,1.00,1.00
0.43,0.00,0.00,0.00,0.00
0.26,1.00,1.00,1.00,0.00
······

参考实验结果

模型1混淆矩阵--
-39385
-94428
模型2混淆矩阵--
-45622
-27495
模型3混淆矩阵--
-42652
-46476
模型\指标查准率(precision)查全率(recall)F1指标
模型10.8340.8200.827
模型20.9570.9480.953
模型30.9010.9120.907

完整代码及数据集之后会放在下载文件中

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Saitouhao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值