如何创建一个 Estimator 在已经适应初始数据集后训练新样本?
How to create an Estimator that trains new samples after already fitted to initial dataset?
我正在尝试按照我在 Spark 源代码 DeveloperApiExample.scala.
中找到的示例创建自己的 Estimator
但在这个例子中,每次我在 Estimator
中调用 fit()
方法时,它都会 return 一个新的 Model
.
我想要再次拟合之类的东西来训练更多尚未训练的样本。
我想在 Model
class 中创建一个新方法来这样做。但我不确定这是否有意义。
知道我的模型不需要再次处理所有数据集来训练新样本并且我们不想更改模型结构可能是件好事。
您可以使用PipelineModels保存和加载并继续拟合模型:
MLlib 对机器学习算法进行了标准化 API,以便更轻松地将多个算法组合到单个管道或工作流中。本节介绍管道 API 引入的关键概念,其中管道概念主要受 scikit-learn 项目的启发。
查找示例代码 here。
spark ml Estimator 的基础 class 定义为 here。如您所见,class 方法 fit
是使用输入数据训练模型的普通调用。
您应该参考类似 LogisticRegression class 的内容,特别是 trainOnRows 函数,其中输入是 RDD 和 可选的初始系数矩阵(输出一个训练有素的模型)。这将允许您在不同的数据集上迭代训练模型。
对于您需要实现的目标,请记住您选择的算法必须能够支持迭代更新。例如,glm、神经网络、树集成等
如果您知道如何在不使用已使用的数据重新训练的情况下改进模型的训练,则无法在同一个 class 中进行,因为您想要 Model that is also a Estimator,但是遗憾的是,这不可能直接实现,因为两者都是抽象的 classes,并且不能在同一个 class.
中混合使用
正如您所说,您可以在模型中提供一种方法,该方法将 return 估计器 improve/increase 训练。
class MyEstimator extends Estimator[MyModel] {
...
}
class MyModel extends Model[MyModel] {
def retrain: MyEstimator = // Create a instance of my estimator that it carries all the previous knowledge
}
我正在尝试按照我在 Spark 源代码 DeveloperApiExample.scala.
中找到的示例创建自己的Estimator
但在这个例子中,每次我在 Estimator
中调用 fit()
方法时,它都会 return 一个新的 Model
.
我想要再次拟合之类的东西来训练更多尚未训练的样本。
我想在 Model
class 中创建一个新方法来这样做。但我不确定这是否有意义。
知道我的模型不需要再次处理所有数据集来训练新样本并且我们不想更改模型结构可能是件好事。
您可以使用PipelineModels保存和加载并继续拟合模型:
MLlib 对机器学习算法进行了标准化 API,以便更轻松地将多个算法组合到单个管道或工作流中。本节介绍管道 API 引入的关键概念,其中管道概念主要受 scikit-learn 项目的启发。
查找示例代码 here。
spark ml Estimator 的基础 class 定义为 here。如您所见,class 方法 fit
是使用输入数据训练模型的普通调用。
您应该参考类似 LogisticRegression class 的内容,特别是 trainOnRows 函数,其中输入是 RDD 和 可选的初始系数矩阵(输出一个训练有素的模型)。这将允许您在不同的数据集上迭代训练模型。
对于您需要实现的目标,请记住您选择的算法必须能够支持迭代更新。例如,glm、神经网络、树集成等
如果您知道如何在不使用已使用的数据重新训练的情况下改进模型的训练,则无法在同一个 class 中进行,因为您想要 Model that is also a Estimator,但是遗憾的是,这不可能直接实现,因为两者都是抽象的 classes,并且不能在同一个 class.
中混合使用正如您所说,您可以在模型中提供一种方法,该方法将 return 估计器 improve/increase 训练。
class MyEstimator extends Estimator[MyModel] {
...
}
class MyModel extends Model[MyModel] {
def retrain: MyEstimator = // Create a instance of my estimator that it carries all the previous knowledge
}