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
相关产品推荐
相关产品推荐

