You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scikit-learn中训练与测试阶段错误率估算方法咨询

在Scikit-learn中估算训练与测试阶段错误率的方法

当然有啦!其实错误率和准确率本身就是互补的关系——准确率是正确预测的比例,错误率就是1减去准确率,所以你完全可以基于已有的准确率估算逻辑来得到错误率。不过Scikit-learn也提供了直接计算错误率的工具,下面给你详细说几种常用的实现方式:

方法一:通过准确率反向推导

这是最直接的方式,因为Scikit-learn的模型自带score()方法,返回的就是对应数据集上的准确率,我们只需要用1减去这个值就能得到错误率。示例代码如下:

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# 加载数据并拆分训练/测试集
data = load_iris()
X_train, X_test, y_train, y_test = train_test_split(
    data.data, data.target, test_size=0.2, random_state=42
)

# 训练分类模型
model = RandomForestClassifier(random_state=42)
model.fit(X_train, y_train)

# 计算训练错误率
train_accuracy = model.score(X_train, y_train)
train_error_rate = 1 - train_accuracy
print(f"训练错误率: {train_error_rate:.4f}")

# 计算测试错误率
test_accuracy = model.score(X_test, y_test)
test_error_rate = 1 - test_accuracy
print(f"测试错误率: {test_error_rate:.4f}")

方法二:直接使用错误率专用指标函数

Scikit-learn的sklearn.metrics模块里提供了zero_one_loss函数,专门用于计算分类任务中的0-1错误率(也就是我们常说的分类错误率)。这个函数可以直接对比真实标签和预测标签,返回错误样本的比例(或数量):

from sklearn.metrics import zero_one_loss

# 生成模型预测结果
y_train_pred = model.predict(X_train)
y_test_pred = model.predict(X_test)

# 计算训练错误率(normalize=True返回比例,False返回错误样本总数)
train_error_rate = zero_one_loss(y_train, y_train_pred, normalize=True)
print(f"训练错误率: {train_error_rate:.4f}")

# 计算测试错误率
test_error_rate = zero_one_loss(y_test, y_test_pred, normalize=True)
print(f"测试错误率: {test_error_rate:.4f}")

方法三:用交叉验证估算泛化错误率

如果想要更可靠地估算模型的泛化错误率(避免单次拆分测试集的偶然性),可以使用交叉验证。这里需要注意,cross_val_score默认是“分数越高越好”,所以我们要指定scoring='neg_zero_one_loss',最后取绝对值得到错误率:

from sklearn.model_selection import cross_val_score

# 5折交叉验证估算错误率
cv_neg_error_scores = cross_val_score(
    model, X_train, y_train, cv=5, scoring='neg_zero_one_loss', random_state=42
)
# 转换为正的错误率
cv_error_rates = -cv_neg_error_scores
print(f"交叉验证错误率均值: {cv_error_rates.mean():.4f}")
print(f"交叉验证错误率标准差: {cv_error_rates.std():.4f}")

补充一下:如果是回归任务,错误率的定义会不同(比如用均方误差、平均绝对误差等),但Scikit-learn也提供了对应的metrics函数,核心逻辑和分类任务类似——要么通过反向推导,要么直接调用专用指标函数。

内容的提问来源于stack exchange,提问作者Steve Jade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:35:17