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

