【问题标题】:Training data in two steps with same accuracy?分两步训练数据并具有相同的准确性?
【发布时间】:2018-05-13 23:27:22
【问题描述】:

我正在尝试实现主动学习机(一个项目的实验)算法,我想单独训练,请在下面查看我的代码。

clf = BernoulliNB()
clf.fit(X_train[0:40], y_train[0:40])
clf.fit(X_train[40:], y_train[40:])

上面一般是这样做的

clf = BernoulliNB()
clf.fit(X_train, y_train)

两者都有不同的准确度得分。我想将训练数据添加到现有模型本身,因为它的计算成本很高 - 我不希望我的模型再进行一次计算。

有什么办法吗?

【问题讨论】:

    标签: numpy machine-learning parallel-processing scikit-learn


    【解决方案1】:

    这称为用于大数据的在线培训或增量学习。请参阅此page for strategies

    基本上,在 scikit-learn 中,您需要预先知道 partial_fit()y 中的所有标签。

    partial_fit(X, y, classes=None, sample_weight=None)

    classes : array-like, shape = [n_classes] (default=None)
    

    可能出现在 y 向量中的所有类的列表。必须在第一次调用 partial_fit 时提供,在后续调用中可以省略。

    如果你只是这样做:

    clf.partial_fit(X_train[0:40], y_train[0:40])
    clf.partial_fit(X_train[40:], y_train[40:])
    

    那么,如果前 40 个样本中不存在任何类,并且出现在 partial_fit() 的下一次迭代中,那么它可能会抛出错误。

    所以理想情况下你应该这样做:

    # First call
    clf.partial_fit(X_train[0:40], y_train[0:40], classes = np.unique(y_train))
    
    # subsequent calls
    clf.partial_fit(X_train[40:80], y_train[40:80])
    clf.partial_fit(X_train[80:], y_train[80:])
    
    and so on..
    

    【讨论】:

    • 接受这个答案,因为它有更清晰的解释。
    【解决方案2】:

    您应该使用 partial_fit 批量训练您的模型。

    clf = BernoulliNB()
    clf.partial_fit(X_train[0:40], y_train[0:40])
    clf.partial_fit(X_train[40:], y_train[40:])
    

    请查看this了解更多功能。

    希望这会有所帮助:)

    【讨论】:

    • 以上工作完美。在接受这个答案之前等待一段时间(2天)。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 2021-11-12
    • 2017-10-13
    • 2018-12-14
    • 2020-03-11
    • 1970-01-01
    相关资源
    最近更新 更多