CatBoost加载磁盘中量化后的Pool文件时触发RFC4180格式违反错误
CatBoost加载磁盘中量化后的Pool文件时触发RFC4180格式违反错误
我之前碰到过完全一样的问题!核心原因是:你通过pool.save('cbpool')保存的是CatBoost专属的二进制格式Pool文件,但直接用cb.Pool('cbpool')初始化时,CatBoost会默认把文件当成CSV文本格式解析,二进制内容自然不符合CSV的RFC4180规范,所以抛出了这个解析错误。
解决方案
加载二进制格式的CatBoost Pool文件,你需要使用CatBoost提供的Pool.load()静态方法,而不是直接把文件名传给Pool构造函数。把代码最后一行替换为:
pool2 = cb.Pool.load('cbpool')
修正后的完整可运行代码
import catboost as cb import pandas as pd import numpy as np # 补充原始代码遗漏的numpy导入 data = { 'label': np.random.randint(0, 5, 100), # 0-4的随机整数标签 'feature1': np.random.randn(100), # 正态分布随机特征 'feature2': np.random.randn(100), 'feature3': np.random.randn(100), 'feature4': np.random.randn(100), 'feature5': np.random.randn(100), 'feature6': np.random.randn(100), 'feature7': np.random.randn(100), 'feature8': np.random.randn(100), 'feature9': np.random.randn(100) } train = pd.DataFrame(data) factors = train.columns.values.tolist()[1:] pool = cb.Pool(data = train[factors], label = train['label']) pool.quantize() pool.save('cbpool') # 正确加载二进制Pool文件的方式 pool2 = cb.Pool.load('cbpool')
额外说明
- 保存后的
cbpool是二进制文件,用文本编辑器打开会显示乱码,这是正常的——它是给CatBoost程序读取的专属格式,不是人类可读的文本。 - 如果确实需要保存为可读的文本格式,可以在保存时指定
format='csv',但这样会丢失量化二进制文件的性能优势,一般不推荐:pool.save('cbpool.csv', format='csv') # 此时可以用cb.Pool('cbpool.csv')正常加载
备注:内容来源于stack exchange,提问作者helloimgeorgia
相关产品推荐
相关产品推荐

