使用随机森林模型根据传感器数据进行预测

机器算法验证 r 插入符号
2022-04-11 19:41:19

假设我有一个测量温度、压力 ++ 的传感器,并希望使用这些数据来预测某个数量“A”。如果我使用多元回归,我可以简单地实现 A=a0+a1x1+a2x2+... 形式的模型,并且每当我有新的测量值时,我都可以使用该模型进行预测。

另一方面,如果我使用随机森林制作预测模型,我不确定如何使用它。我使用 caret 包将我的数据拆分为训练集和测试集,并使用随机森林和交叉验证进行自动特征选择。我对测试集有很好的预测,但不知道如何实现这些树以用于数字信号处理器。在 RI 中只需使用 predict() 函数,但这显然在 R 之外不可用。

这可能是一个愚蠢的任务,但这是我能做的最好的。

欢迎任何建议。

3个回答

线性回归很棒,因为您可以在任何可以乘法和加法的程序中非常简单地实现预测。

另一方面,随机森林要复杂得多。它们分别由决策树组成,基本上可以用一组规则来表示。然而,一个随机森林可能有成百上千个单独的树,在另一个系统中手动实现这将是非常乏味的。

您最好的选择可能是为您希望将模型导出到的系统找到一个随机森林实现,然后使用PMML导出模型。RPMML将允许您将随机森林转换为 XML 文件,您应该能够将其导入任何支持 PMML 的系统。

您当然必须为此投入一些工作,但是导出模型并不是那么糟糕randomForestgetTree函数以非常紧凑和漂亮的格式转储单个树,如下所示(记录在 中?getTree):

> getTree(iris_rf,3)
   left daughter right daughter split var split point status prediction
1              2              3         4        0.80      1          0
2              0              0         0        0.00     -1          1
3              4              5         4        1.75      1          0
4              6              7         1        5.00      1          0
5              8              9         4        1.85      1          0
6             10             11         2        2.45      1          0
7             12             13         2        2.25      1          0
8             14             15         1        5.95      1          0
9              0              0         0        0.00     -1          3
10             0              0         0        0.00     -1          2
11             0              0         0        0.00     -1          3
12            16             17         1        6.10      1          0
13             0              0         0        0.00     -1          2
14             0              0         0        0.00     -1          2
15             0              0         0        0.00     -1          3
16            18             19         3        4.50      1          0
17             0              0         0        0.00     -1          2
18             0              0         0        0.00     -1          2
19             0              0         0        0.00     -1          3

并且结合整个集成​​的预测只是总结投票(用于分类)或计算平均值(用于回归)的问题。我曾经写过一个转换器,它吃掉这些输出并生成 C 代码(有很多gotos),它工作得很好。

我最近开发了一个 Python 包,它从用 Scikit learn 训练的随机森林分类器导出 C 代码: https ://github.com/jonnor/emtrees

它可以用作如何将 R 模型转换为 C 代码的示例,结合 mbq 答案显示的 getTree。