有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案