我使用sklearn管道构建了一个分类模型。现在我想运行CalibredClassifiedRCV来校准概率预测。
model = pickle.load(open('model.pkl', 'rb'))
train = pd.read_csv('new_train.csv')
features = ['BVW_2C', 'PHIT_2C', 'SW_2C', 'VCARB_2C', 'VCLAY_2C', 'VKER_2C', 'VPYR_2C', 'VSAND_2C', 'GOLD_DTC', 'GOLD_DTS', 'GOLD_GR', 'GOLD_NPHI', 'GOLD_PEF', 'GOLD_RDEEI', 'GOLD_RHOB', 'HETI_NORM_GR']
clf_iso = CalibratedClassifierCV(model, cv=3, method='isotonic')
clf_iso.fit(train[features], train[['trouble']])
预训练模型是从一个文件加载的,它基本上由一个定标器和一个梯度boost分类器组成。如果我打印出模型,它看起来是这样的:
Pipeline(steps=[('preproc',
ColumnTransformer(transformers=[('num',
Pipeline(steps=[('scaler',
StandardScaler())]),
['BVW_2C', 'PHIT_2C', 'SW_2C',
'VCARB_2C', 'VCLAY_2C',
'VKER_2C', 'VPYR_2C',
'VSAND_2C', 'GOLD_DTC',
'GOLD_DTS', 'GOLD_GR',
'GOLD_NPHI', 'GOLD_PEF',
'GOLD_RDEEI', 'GOLD_RHOB',
'HETI_NORM_GR'])])),
('clf',
LGBMClassifier(max_depth=30, n_estimators=300,
num_leaves=200))])
由于某些原因,我在执行时出现了以下错误
clf_iso.fit(train[features], train[['trouble']])
.
AttributeError Traceback (most recent call last)
/p/ressim02/analytics/AICOE/jiaod/geonet-ml/geo-env/lib/python3.7/site-packages/sklearn/utils/__init__.py in _get_column_indices(X, key)
424 try:
--> 425 all_columns = X.columns
426 except AttributeError:
AttributeError: 'numpy.ndarray' object has no attribute 'columns'
During handling of the above exception, another exception occurred:
ValueError Traceback (most recent call last)
<ipython-input-49-cfae22cb4b89> in <module>
1 clf_iso = CalibratedClassifierCV(model, cv=3, method='isotonic')
----> 2 clf_iso.fit(train[features], train[['trouble']])
train[features]
显然是熊猫数据帧(由
type(train[features])
).为什么它仍然将其视为numpy阵列。如果我用加载的模型重新训练相同的数据
model.fit(train[features], train[['trouble']])
,它的工作没有任何问题。为什么它不适用于校准的分类RCV?
编辑
看起来是个已知的问题
link
(
github issue #8710
)