在sklearn训练后我是否必须再次使用fit()?

时间:2018-03-24 16:11:42

标签: python machine-learning scikit-learn

我正在使用LinearRegression()。您可以在下面看到我为预测新功能所做的工作:

    lm = LinearRegression()
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.8, random_state=say)
    lm.fit(X_train, y_train)
    lm.predict(X_test)
    scr = lm.score(X_test, y_test)
    lm.fit(X, y)
    pred = lm.predict(X_real)

我真的需要行lm.fit(X, y)还是我可以不使用它?另外,如果我不需要计算准确度,您认为以下方法更好,而不是使用培训和测试吗? (如果我不想测试):

    lm.fit(X, y)
    pred = lm.predict(X_real)

即使我获得0.997的准确度,预测值也不会接近或移位。有没有办法让预测更准确?

2 个答案:

答案 0 :(得分:2)

由于您的算法已经了解了您的列车集,因此您不需要多次拟合来预测给定要素的值。检查以下代码。

# Split your data into train and test sets    
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.8, random_state=say)

# Teach your data to your algorithm with train set
lm = LinearRegression()
lm.fit(X_train, y_train)

# Now it can predict
pred = lm.predict(X_real)

# Use test set to see how accurate it predicts
scr = lm.score(X_test, y_test)

答案 1 :(得分:1)

您获得几乎100%准确度得分的原因是a data leakage,由以下代码行引起:

lm.fit(X, y)

在上面一行中,您为模型提供了所有数据,然后使用模型已经看到的数据子集测试预测。

这会导致已经看过的数据的准确度得分非常高,但通常会对看不见的数据造成严重影响。

  

您希望/需要何时适合您的模型多次次?

如果您要获取新的培训数据,并希望通过针对新部分数据进行培训来改进模型,那么您可能需要选择one of regression algorithm, supporting incremental-learning

在这种情况下,您将使用model.partial_fit()方法而不是model.fit() ...