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

Sklearn中cross_val_score返回精度仅三位小数,如何获取完整值?

解决cross_val_score返回精度显示位数不足的问题

首先澄清:cross_val_score返回的准确率数值本身是高精度的,你看到的0.XXX格式只是numpy默认打印时的显示限制,并非实际精度丢失。

原因分析

numpy数组默认的打印精度为4位有效数字(对于0.XXX这类数值,就会显示三位小数),但数组内部存储的是完整的浮点数值,精度并未丢失。

解决方法

1. 修改numpy全局打印精度

在代码开头添加以下设置,让numpy打印时显示更多小数位:

import numpy as np
np.set_printoptions(precision=9)  # 可根据需求设置具体小数位数,比如9位

之后再打印scores,就能看到完整的高精度数值。

2. 手动格式化输出单个分数

如果不想修改全局设置,可以逐个格式化打印每个分数:

for score in scores:
    print("{0:.9f}".format(score))

3. 查看数值的原始存储形式

用repr()函数可以直接查看数值的完整存储状态,验证精度是否保留:

print(repr(scores[0]))

针对你的代码示例修改

调整后的完整代码如下:

import numpy as np
from sklearn.model_selection import RepeatedKFold
from sklearn.ensemble import RandomForestClassifier

cv = RepeatedKFold(n_splits=10, n_repeats=50, random_state=42)

forest = RandomForestClassifier(criterion='log_loss', max_depth=7, max_features='log2', min_samples_leaf=1, min_samples_split=2, n_estimators=10, n_jobs=-1, random_state=42)

scores = cross_val_score(forest, X_phishing, y_phishing, cv=cv, n_jobs=-1)

# 设置打印精度
np.set_printoptions(precision=9)
print(scores)

该问题与数据集无关,只是numpy的默认显示规则导致视觉上的精度“丢失”,实际计算和存储的数值都是完整的高精度值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 11:02:39