Scikit学习:忘记以前的火车数据

时间:2018-07-31 12:04:38

标签: python scikit-learn

在scikit中学习我有一个模型(在我的情况下是线性模型)

clf = linear_model.LinearRegression()

我可以用一些数据训练这个模型

clf.fit(x1,y1)

但是,如果我再次致电fit,它将继续训练模型。

clf.fit(x2,y2)

现在clf是一个同时训练(x1,y1)和(x2,y2)的模型

如果我想从0开始训练,我可以通过重新定义clf

重新创建模型
clf = linear_model.LinearRegression()
clf.fit(x1,y1)
# save the model
# ...
clf = linear_model.LinearRegression()
clf.fit(x2,y2)

但是我不想再次定义clf:

基本上,之前选择了回归器的类型,例如:

if params.linear_algorithm == 'least_squares':
    clf = linear_model.LinearRegression()
elif params.linear_algorithm == 'ridge':
    clf = linear_model.Ridge()
elif params.linear_algorithm == 'lasso':
    clf = linear_model.Lasso()

所以我不希望在我的训练函数中使用所有条件块重新定义clf,而只想取clf,从以前的训练中清除掉,并重用它来训练另一组数据。

clf是否有一种方法可以清除到目前为止所学的知识,所以当我调用clf.fit(x2,y2)时,仅对这些数据进行训练?

编辑:你们是对的,每次培训都被覆盖。

我的问题是我将模型保存在字典中,并且只引用了clf,因此每次重新训练clf时,所有以前的保存都会更改。

每次重新定义clf都会创建一个新对象,因此每个保存点现在都具有不同的模型

示例

for i in range(3):
   # get the x and y
   # ...
   clf.fit(x,y)
   model[i] = clf

有什么主意如何每次都保存不同的模型,而不是将所有模型[i]指向相同的clf?

2 个答案:

答案 0 :(得分:3)

您的假设是错误的。根据{{​​3}}:

  

多次调用fit()会覆盖以前的fit()所学到的知识。

因此,您可以安全地使用代码,它将满足您的需求。

答案 1 :(得分:1)

我很确定它会覆盖以前的所有现有信息。 Scikit Learn文档对此进行了指定。除非您使用warm_start = True,否则fit()调用将覆盖现有数据。