scala - 通过修改其私有方法来自定义 Spark ML 估计器(例如 GaussianMixture)的正确方法?
问题描述
我的代码使用了 apache.ml.clustering.GaussianMixture,但是它的 init 方法private def initRandom(...)
效果不好,所以我想自定义一个新init
方法。
起初我想“扩展” class GuassianMixture
,但initRandom
它是一种私有方法。
然后我尝试了另一种方法,即设置初始 GMM,但遗憾的是源代码显示TODO: SPARK-15785 Support users 提供了初始 GMM。
我也尝试class GuassianMixture
为我的自定义类复制代码,但是附加的东西太多了。GaussianMixture.scala带有一些类和特征,其中一些只能在 ML 包中访问。
解决方案
我自己解决了。这是我的解决方案。
我创建了从官方包CustomGaussianMixture
扩展的类。GaussianMixture
org.apache.spark.ml.clustering
在我的项目中,我创建了一个新包,也命名为org.apache.spark.ml.clustering
(以防止处理复杂类/特征/对象的范围org.apache.spark.ml.clustering
)。并将我的自定义类放入其中。
接下来是重写 method( fit
) 调用initRandom
,一个非私有方法,所以我可以重写它。具体来说,只要在class里写我新的init方法,把官方源码里面的CustomGaussianMixture
方法复制到class里面,记得修改里面的代码调用我自定义的init方法。fit
GaussianMixture.scala
CustomGaussianMixture
CustomGaussianMixture.fit()
最后,只需在需要时使用CustomGaussianMixture
而不是GaussianMixture
。
推荐阅读
- haskell - 如何将 IO Actions 变成“纯”函数
- python-3.x - 如何在 Python 中运行命令行脚本
- android - Android 如何创建一个可以运行超过 8 小时的计数计时器应用程序
- swagger - 如何更改 JSONObject 类的招摇响应
- javascript - Laravel 5如何通过下拉选择显示,隐藏div
- react-native - Flex View 在 React Native 中重叠
- python - python如何循环函数
- php - 为什么在出现弃用警告时使用 at (@) 符号作为 trigger_error 前缀?
- mysql - 在 SQL 查询中处理不同的表
- linux - 如何将目录添加到 PKG_CONFIG_PATH 环境变量?