在 Android 中使用经过训练的 Scikit-learn svm 分类器
Using trained Scikit-learn svm classifiers in Android
我正在开发一个 Android 应用程序,它使用来自 phone 的传感器数据对活动进行分类。与任何 Java 机器学习库相比,我也非常喜欢 scikit-learn。因此,我使用 Django 创建了一个非常小的 REST api,scikit 学习使用支持向量机和 return 模型信息来训练传感器数据。
我的问题是:如何使用模型 scikit-learn 在我的 phone 上生成进行预测?到目前为止,我已经考虑过扩展 api,以便每当 phone 想要进行预测时,它会将数据发送到 api 以获得预测。但我更愿意能够编写一些 Java 代码或使用 Java 库来进行预测。将训练数据发送到 api 不是问题,因为这不是实时完成的——只有在数据已经收集后才会完成。然而,发送实时预测数据似乎并不可行。
用逻辑回归做这个要容易得多,因为预测公式和模型参数都非常简单;我可以放弃 svms 而改用它,但我也希望 svms 可用。
有人知道以前有人这样做过吗?是否有一种在相对较短的时间内由没有博士学位的人在数值计算或机器学习方面可行的方法来做到这一点?不需要详细的步骤,只是概述如何使用 scikit-learn 生成的支持向量机的组件。
大多数带有 SVM 的包(也包括 scikit-learn)都依赖于 libsvm 实现。但是你不需要 libsvm 的 99% 的代码,你也不必是博士,因为你在 scikit-learn 里面学习后已经有了所有的参数。所有你需要的 - java 中任何简单的线性代数库(仅用于向量*向量运算)来实现决策函数。
如果你在 SVC 中使用线性核 - 它相对容易,因为 scikit-learn 自动将所有那些复杂的对偶系数和支持向量转换为简单的超平面系数,因此决策函数等同于逻辑回归,所有你需要的这里 - 点积 - 看这里 Exporting SVM classifiers from sklearn to Java codebase
如果使用非线性内核 - 同样只需要决策函数,但现在您必须了解什么是支持向量,什么是对偶系数,什么是内核,并且您必须实现非线性内核在 java。我认为在不了解 SVC 优化过程如何工作的情况下实现非线性 SVC 的决策函数并非易事,我会给你一些链接:
- Layout of SVC attributes
- Decision Function
- Where all these dual coefficients and support vectors come from
或者您可以找到 java 的任何 SVM 库,并使用您在 SVC 中选择的相同参数(C、eps 等)学习模型。我认为这是非线性内核最简单的解决方案。 SVM 是众所周知的方法,我认为使用相同的参数和数据集进行学习将在任何良好的实现上产生相同的结果(除了大多数实现和绑定,正如我所说,依赖于 libsvm,在这种情况下保证平等)。
我正在开发一个 Android 应用程序,它使用来自 phone 的传感器数据对活动进行分类。与任何 Java 机器学习库相比,我也非常喜欢 scikit-learn。因此,我使用 Django 创建了一个非常小的 REST api,scikit 学习使用支持向量机和 return 模型信息来训练传感器数据。
我的问题是:如何使用模型 scikit-learn 在我的 phone 上生成进行预测?到目前为止,我已经考虑过扩展 api,以便每当 phone 想要进行预测时,它会将数据发送到 api 以获得预测。但我更愿意能够编写一些 Java 代码或使用 Java 库来进行预测。将训练数据发送到 api 不是问题,因为这不是实时完成的——只有在数据已经收集后才会完成。然而,发送实时预测数据似乎并不可行。
用逻辑回归做这个要容易得多,因为预测公式和模型参数都非常简单;我可以放弃 svms 而改用它,但我也希望 svms 可用。
有人知道以前有人这样做过吗?是否有一种在相对较短的时间内由没有博士学位的人在数值计算或机器学习方面可行的方法来做到这一点?不需要详细的步骤,只是概述如何使用 scikit-learn 生成的支持向量机的组件。
大多数带有 SVM 的包(也包括 scikit-learn)都依赖于 libsvm 实现。但是你不需要 libsvm 的 99% 的代码,你也不必是博士,因为你在 scikit-learn 里面学习后已经有了所有的参数。所有你需要的 - java 中任何简单的线性代数库(仅用于向量*向量运算)来实现决策函数。
如果你在 SVC 中使用线性核 - 它相对容易,因为 scikit-learn 自动将所有那些复杂的对偶系数和支持向量转换为简单的超平面系数,因此决策函数等同于逻辑回归,所有你需要的这里 - 点积 - 看这里 Exporting SVM classifiers from sklearn to Java codebase
如果使用非线性内核 - 同样只需要决策函数,但现在您必须了解什么是支持向量,什么是对偶系数,什么是内核,并且您必须实现非线性内核在 java。我认为在不了解 SVC 优化过程如何工作的情况下实现非线性 SVC 的决策函数并非易事,我会给你一些链接:
- Layout of SVC attributes
- Decision Function
- Where all these dual coefficients and support vectors come from
或者您可以找到 java 的任何 SVM 库,并使用您在 SVC 中选择的相同参数(C、eps 等)学习模型。我认为这是非线性内核最简单的解决方案。 SVM 是众所周知的方法,我认为使用相同的参数和数据集进行学习将在任何良好的实现上产生相同的结果(除了大多数实现和绑定,正如我所说,依赖于 libsvm,在这种情况下保证平等)。