常用的评估方法

机器学习评估方法

在机器学习中,为了确保模型具有良好的泛化能力,我们需要对模型进行评估。本文将介绍常用的评估方法,包括留出法,k折交叉验证,自助法等,并指出不同的评估方法的特点和适用情况。我们还将使用sklearn库来展示k折交叉验证调参的过程。

常用的评估方法

1. 留出法(Holdout Method)

留出法是一种简单的评估方法,将数据集分为训练集和测试集两部分。通常情况下,训练集用于模型训练,测试集用于评估模型的性能。留出法的优点是实现简单,但缺点是评估结果可能会因数据集的划分而受到影响。

2. k折交叉验证(k-fold Cross-Validation)

k折交叉验证是一种更可靠的评估方法。它将数据集分为k个子集,每次将其中一个子集作为测试集,其余子集作为训练集。这个过程会重复k次,每次选择不同的子集作为测试集。最后,模型的性能将通过k次实验的平均结果来评估。k折交叉验证的优点是评估结果更稳定,缺点是计算成本较高。

3. 自助法(Bootstrap)

自助法是一种基于自助抽样的评估方法。它从数据集中有放回地随机抽取样本组成训练集,未被抽取到的样本则作为测试集。自助法适用于数据量较小的情况,但可能导致过拟合。

k折交叉验证调参示例

接下来我们将使用sklearn库展示k折交叉验证调参的过程。我们选择岭回归(Ridge Regression)作为模型,并使用一个常见的回归数据集。

ps:波士顿房价数据集现在已经无法通过sklearn导入,这里为了方便依然虚空导入。

import numpy as np
from sklearn.model_selection import KFold
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error
from sklearn.datasets import load_boston

# 加载波士顿房价数据集
data = load_boston()
X = data.data
y = data.target

# 定义k折交叉验证参数
k = 5
kf = KFold(n_splits=k, shuffle=True, random_state=42)

# 存储每次迭代的均方误差(MSE)
mse_list = []

# KFold.split()的输入输出过程(IPO):
# 输入:X(特征矩阵)
# 处理:将数据集分为k个子集
# 输出:train_index(训练集索引),test_index(测试集索引)

for train_index, test_index in kf.split(X):
    # 划分训练集和测试集
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]

    # 训练岭回归模型
    model = Ridge(alpha=1.0)
    model.fit(X_train, y_train)

    # 预测并计算均方误差
    y_pred = model.predict(X_test)
    mse = mean_squared_error(y_test, y_pred)
    mse_list.append(mse)

# 计算k折交叉验证的平均均方误差
mse_avg = np.mean(mse_list)
print("Average MSE for k-Fold Cross-Validation: {:.2f}".format(mse_avg))

以上代码展示了使用sklearn库进行k折交叉验证的过程。首先,我们加载了波士顿房价数据集,并定义了k折交叉验证的参数。然后,我们使用KFold.split()函数将数据集分为k个子集。接下来,我们在每次迭代中训练岭回归模型,并计算均方误差。最后,我们计算并输出k折交叉验证的平均均方误差。

猜你喜欢

转载自blog.csdn.net/qq_62862258/article/details/130190407