在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?
答案 0 :(得分:3)
您的假设是错误的。根据{{3}}:
多次调用fit()会覆盖以前的fit()所学到的知识。
因此,您可以安全地使用代码,它将满足您的需求。
答案 1 :(得分:1)
我很确定它会覆盖以前的所有现有信息。 Scikit Learn文档对此进行了指定。除非您使用warm_start = True
,否则fit()
调用将覆盖现有数据。