1

我正在用 python 训练一个玩具模型,将模型二进制文件保存到磁盘,然后将其加载到 java (kotlin) 中并进行评估。我的预测在 python 和 kotlin 之间不一致。有人知道我在做什么错吗?

import catboost as cb
import pandas as pd
x = pd.DataFrame(data={'a': [1, 3, 4, 99, 12],
                   'b': [0.5, 0, 1.3, 3, 44],
                   'c': [0.5, 0, 1.3, 0.91, 0],
                   'd': ['a', 'b', 'c', 'd', 'e']
                   })
y = pd.DataFrame(data={'y': [1.23, 3.2, 1.0, 1.5, 0.2]})
model = cb.CatBoostRegressor()
model.fit(x, y, cat_features=[3], verbose=False, plot=False)
proba = model.predict([1, 0.5, 0.5, 'c'])
print(proba) # 1.2274747745772228
model.save_model('./very_basic_model.cbm')
val model = CatBoostModel.loadModel('~/path/very_basic_model.cbm')
val floatFeatures = floatArrayOf(
                1.0f,
                0.5f,
                0.5f
        )
val categoricalFeatures:Array<String> = arrayOf("c")
val pred = model.predict(floatFeatures, categoricalFeatures).get(0,0)
System.out.println(pred) # -0.198525224469103
4

1 回答 1

0

答案是 catboost java api 直到一个相当新的版本才被正确实现。当我更新到版本“0.24”时,我可以确认 python 和 java 之间的奇偶校验。

于 2020-12-01T22:26:08.720 回答