西南交通大学【机器学习实验1】

发布于:2025-07-03 ⋅ 阅读:(18) ⋅ 点赞:(0)

实验目的

理解和掌握回归问题和分类问题模型评估方法,学会使用均方误差、最大绝对误差、均方根误差指标评估回归模型,学会使用错误率、精度、查全率、查准率、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


网站公告

今日签到

点亮在社区的每一天
去签到