【问题标题】:Using trained Scikit-learn svm classifiers in Android [closed]在 Android 中使用训练有素的 Scikit-learn svm 分类器 [关闭]
【发布时间】:2016-02-05 17:30:33
【问题描述】:

我正在开发一个 Android 应用,该应用使用来自手机的传感器数据对活动进行分类。相对于任何 Java 机器学习库,我也更喜欢 scikit-learn。所以我使用 Django 创建了一个非常小的 REST api,scikit 学习使用支持向量机训练传感器数据并返回模型信息。

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

用逻辑回归做这件事要容易得多,因为预测公式和模型参数非常简单;我可以放弃 svm 并改用它,但我也希望有 svm 可用。

有人知道以前有人这样做吗?是否有一种在没有数值计算或机器学习博士学位的情况下可以在相对较短的时间内由某人完成的方法来做到这一点?不需要详细的步骤,只是概述如何使用 scikit-learn 生成的 svm 的组件。

【问题讨论】:

标签: android scikit-learn


【解决方案1】:

大多数带有 SVM 的软件包(scikit-learn 也是)依赖于 libsvm 实现。但是你不需要来自 libsvm 的 99% 的代码,你也不必是博士,因为在 scikit-learn 中学习之后你已经拥有了所有的参数。所有你需要的——任何简单的线性代数库(仅用于向量*向量运算)在 java 中实现决策函数。

如果您在 SVC 中使用线性核 - 这相对容易,因为 scikit-learn 会自动将所有那些复杂的对偶系数和支持向量转换为简单的超平面系数,因此决策函数变得等同于逻辑回归,您所需要的一切都在这里 -点积 - 看这里Exporting SVM classifiers from sklearn to Java codebase

如果使用非线性内核 - 再次只需要决策函数,但现在您必须了解什么是支持向量、什么是双系数、什么是内核,并且您必须在 java 中实现您的非线性内核.我认为在不了解 SVC 优化过程的工作原理的情况下,实现非线性 SVC 的决策函数并非易事,我给你一些链接:

  1. Layout of SVC attributes
  2. Decision Function
  3. Where all these dual coefficients and support vectors come from

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-04
    • 2013-10-31
    • 2022-01-05
    • 2017-06-21
    • 2017-04-16
    • 2013-07-04
    • 2014-12-03
    • 2021-04-19
    相关资源
    最近更新 更多