java使用M2C Gen实现多输出随机森林回归器
我必须将一个多输出随机森林回归器转换为本机Java代码,这将在Android应用程序中使用
虽然不是非常复杂(500个估计器),但当使用M2C传输时,生成的代码只返回一个双精度数组,而不是长度为4的数组,如果给定estimators_
和n_outputs_
的值,这是可以预期的
例如,在Python中,以下代码返回预期值:
with open('RF_reg.pickle', 'rb') as f:
l = pickle.load(f)
# Dummy values, in this case, just for checking for matches
print(l.predict([[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]]))
输出值及其类型:
<class 'numpy.float64'>
5045.0
<class 'numpy.float64'>
500.0
<class 'numpy.float64'>
109955.0
<class 'numpy.float64'>
115500.0
同时,在生成的Java代码中,只返回第一个值
public static double score(double[] input) { // Scoring method
[...]
double[] test_vals = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
System.out.println(score(test_vals));
输出:5045.0
Java代码是使用2400的递归限制生成的,尽管递归限制很高,但不应导致此类问题。用于生成的参数的CLI示例:m2cgen RF_reg.pickle --language java --recursion-limit 2400 --class_name RFReg > rf_gen.java
是否有更好的方法将模型“转换”为本机Java代码,或将多输出随机林回归器“划分”为几个传输类,以使用M2C返回所需的值?目前,我只能访问pickle模型,我希望避免运行服务器来执行预测
共 (0) 个答案