在Android中使用经过训练的Scikit-learn svm分类器

Car*_*ter 2 android scikit-learn

我正在开发一个Android应用,该应用使用手机中的传感器数据对活动进行分类。我也非常喜欢scikit-learn,而不是任何Java机器学习库。因此,我使用Django创建了一个非常小的REST API,并且scikit学习了使用支持向量机训练传感器数据并返回模型信息。

我的问题是:如何使用手机上的scikit-learn产生的模型进行预测?到目前为止,我已经考虑过扩展api,以便每当电话要进行预测时,它将数据发送到api以获得一个。但我更希望能够编写一些Java代码或使用Java库进行预测。将训练数据发送到api并不是问题,因为这不是实时完成的-只有在收集完数据后才能完成。但是,为实时预测发送数据似乎并不可行。

使用逻辑回归进行此操作要容易得多,因为预测公式和模型参数非常简单。我可以放弃svm,而改用它,但我也想使用svm。

有人知道有人这样做吗?有没有一个人可以在相对短的时间内用数字计算或机器学习的方法做到这一点?不需要详细的步骤,只需概述如何使用scikit-learn生成的svm的组件即可。

Ibr*_*iev 5

带有SVM的大多数软件包(也包括scikit-learn)都依赖libsvm实现。但是您不需要来自libsvm的99%的代码,也不必是博士学位,因为在scikit-learn中学习后,您已经具有所有参数。您所需要的一切-Java中任何简单的线性代数库(仅用于vector * vector运算)都可以实现决策功能。

如果您在SVC中使用线性核-这相对容易,因为scikit-learn会自动将所有那些复杂的对偶系数和支持向量转换为简单的超平面系数,因此决策函数就等同于逻辑回归,这就是您所需要的-点积-在这里将SVM分类器从sklearn导出到Java代码库

如果是非线性核,则再次需要决策函数,但是现在您必须了解什么是支持向量,什么是对数系数,什么是核,并且必须在Java中实现非线性核。我认为,在不了解SVC优化过程如何工作的情况下,为非线性SVC实现决策功能并非易事,我将为您提供一些链接:

  1. SVC属性的布局
  2. 决策功能
  3. 所有这些对偶系数和支持向量都来自哪里

或者,您可以只找到Java的任何SVM库,并使用在SVC中选择的相同参数(C,eps等)学习模型。我认为这是非线性内核的最简单解决方案。SVM是一种众所周知的方法,我认为使用相同的参数和数据集进行学习可以在任何良好的实现上获得相同的结果(但正如我所说,大多数实现和绑定都依赖于libsvm,在这种情况下,保证平等)。