【问题标题】:Do I have to use fit() again after training in sklearn?在 sklearn 培训后,我是否必须再次使用 fit()?
【发布时间】:2018-09-03 03:37:02
【问题描述】:

我正在使用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 的准确度,预测值也没有接近或偏移。有没有办法让预测更准确?

【问题讨论】:

  • 了解未来...
  • 是的,但即使在我用 X_train 和 y_train 训练了分类器之后,我还需要 fit(X,y) 吗?
  • 要思考的问题:如果您不想测试或计算准确性,为什么要使用 train_test_split?为什么要使用占数据 80% 的 test_size 而只训练 20% 的数据?为什么你认为你需要安装两次(重新安装)?
  • 好吧,只是因为我不知道我要问的确切答案:) 也许你能告诉我为什么?我坚持的是,假设我正在使用非常古老的货币数据。 10年前的运动与过去3年不同。所以这就是为什么我更喜欢训练大量数据。如果你是我,你会怎么做?
  • 这个问题措辞不好,一般所有算法的拟合方法都会像 SD 一样计算数学,transform 方法将使用计算值转换数据,而 "fit_transform" 两者兼而有之

标签: python machine-learning scikit-learn


【解决方案1】:

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

lm.fit(X, y)

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

这会导致已经看到数据的准确度得分非常高,但通常它对未看到的数据表现不佳。

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

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

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

【讨论】:

    【解决方案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)
    

    【讨论】:

    • 好的,但如果我再次适应 fit(X,y) 我会得到不同的结果。你也知道如何提高结果 Yasin 吗?我的意思是预测精度约为 0.997,但预测结果要高一些。有没有办法使用intercept或coef或mse等来改善结果?
    • @Khun 得到不同结果的原因是,当您拟合另一个 X 和 y 时,您更改了算法学习的数据。除此之外,您的准确性实际上似乎非常高。我不确定如何改进结果。
    猜你喜欢
    • 2019-07-10
    • 2017-12-24
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    相关资源
    最近更新 更多