使用基于 Spark 数据集的 ML API 时初始化逻辑回归系数?
Initializing logistic regression coefficients when using the Spark dataset-based ML APIs?
默认情况下,逻辑回归训练将系数初始化为全零。但是,我想自己初始化系数。这将很有用,例如,如果之前的训练 运行 在几次迭代后崩溃了——我可以简单地用最后一组已知的系数重新开始训练。
是否可以使用 dataset/dataframe-based API 中的任何一个,最好是 Scala?
查看Spark源代码,似乎是一个方法setInitialModel
来初始化模型及其系数,but it's unfortunately marked as private。
基于 RDD 的 API 似乎允许初始化系数:LogisticRegressionWithSGD.run(...)
的重载之一接受 initialWeights
向量。但是,我想使用基于数据集的 API 而不是基于 RDD 的 API 因为(1)前者支持弹性网正则化(我不知道如何做弹性网基于 RDD 的逻辑回归)和 (2) 因为 the RDD-based API is in maintenance mode.
我总是可以尝试使用反射来调用私有 setInitialModel
方法,但我想尽可能避免这种情况(也许那根本行不通......我也不知道是否setInitialModel
被标记为私有是有充分理由的)。
随意重写该方法。是的,您需要将 class 复制到您自己的工作区中。没关系:不要害怕。
当您构建项目时 - 通过 maven
或 sbt
- 您的 class 的本地副本将 "win" 并遮蔽 [=12= 中的那个].幸运的是,同一个包中的其他 classes 不会 被遮蔽。
我已经多次使用这种方法来覆盖 Spark classes:实际上你的构建时间也应该很短。
默认情况下,逻辑回归训练将系数初始化为全零。但是,我想自己初始化系数。这将很有用,例如,如果之前的训练 运行 在几次迭代后崩溃了——我可以简单地用最后一组已知的系数重新开始训练。
是否可以使用 dataset/dataframe-based API 中的任何一个,最好是 Scala?
查看Spark源代码,似乎是一个方法setInitialModel
来初始化模型及其系数,but it's unfortunately marked as private。
基于 RDD 的 API 似乎允许初始化系数:LogisticRegressionWithSGD.run(...)
的重载之一接受 initialWeights
向量。但是,我想使用基于数据集的 API 而不是基于 RDD 的 API 因为(1)前者支持弹性网正则化(我不知道如何做弹性网基于 RDD 的逻辑回归)和 (2) 因为 the RDD-based API is in maintenance mode.
我总是可以尝试使用反射来调用私有 setInitialModel
方法,但我想尽可能避免这种情况(也许那根本行不通......我也不知道是否setInitialModel
被标记为私有是有充分理由的)。
随意重写该方法。是的,您需要将 class 复制到您自己的工作区中。没关系:不要害怕。
当您构建项目时 - 通过 maven
或 sbt
- 您的 class 的本地副本将 "win" 并遮蔽 [=12= 中的那个].幸运的是,同一个包中的其他 classes 不会 被遮蔽。
我已经多次使用这种方法来覆盖 Spark classes:实际上你的构建时间也应该很短。