Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python scitkit SGDClassizer partial_fit不会增量学习。返回“;类别应包括所有有效标签“;_Python_Machine Learning_Scikit Learn - Fatal编程技术网

Python scitkit SGDClassizer partial_fit不会增量学习。返回“;类别应包括所有有效标签“;

Python scitkit SGDClassizer partial_fit不会增量学习。返回“;类别应包括所有有效标签“;,python,machine-learning,scikit-learn,Python,Machine Learning,Scikit Learn,我将两个数据流传递给sgd_clf分类器,如下代码所示。第一部分拟合取第一个数据流x1,y1。第二个部分拟合是获取第二个数据流x2,y2 下面的代码给出了第二个部分拟合步骤中的错误,该步骤将类标记为在前面包含。当我将来自x2 y2的所有数据包括在x1,y1中时,此错误消失。(在现在调用第二个partial_fit之前包含我的类标签) 但是,我不能事先给出这个x2 y2数据。如果我在第一次partial_fit()之前提供了所有数据,为什么我需要使用第二次partial_fit()?事实上,如果我

我将两个数据流传递给sgd_clf分类器,如下代码所示。第一部分拟合取第一个数据流x1,y1。第二个部分拟合是获取第二个数据流x2,y2

下面的代码给出了第二个部分拟合步骤中的错误,该步骤将类标记为在前面包含。当我将来自x2 y2的所有数据包括在x1,y1中时,此错误消失。(在现在调用第二个partial_fit之前包含我的类标签)

但是,我不能事先给出这个x2 y2数据。如果我在第一次partial_fit()之前提供了所有数据,为什么我需要使用第二次partial_fit()?事实上,如果我以前知道所有数据,我不需要使用partial_fit(),我只需要使用fit()

问题1:我对sklearn分类器的partial_fit()的理解是否错误,即它会按照此处的规定动态获取数据:

问题2:我想用新数据重新训练模型/更新模型。我不想从头开始训练。你能帮我吗

问题3:我不只是针对SGDClassizer。我可以使用任何支持在线/批量学习的算法。我的主要目的是第三季度。我有一个受过训练的模型,有1000张图片。我不想从头开始重新训练这个模型,因为我有一个/两个新的图像样本。他们都不想为每个新条目创建一个新模型,然后混合所有条目。这降低了我搜索所有训练模型的预测性能。我只想在部分拟合的帮助下,将这个新的数据实例添加到经过训练的模型中。这是否可行

问题4:如果我无法使用scikit分类器实现第二季度,请指导我如何实现这一目标


非常感谢您的任何建议、想法或参考。

您需要事先知道需要多少课程。在第一次调用partial fit之后,该算法假定您以后不会添加任何新类

在您的示例中,您被添加到一个新类(y2=8)中,该类以前从未见过,并且在您对partial fit的初始调用中未被指示为存在(该类仅包含标签“5”和“6”)。您需要在第一次调用时将其添加到classes对象


为了保持一致性,我还建议您从0开始对类进行编号

为什么只有分类器才是这样?与SGDRegressor相同的代码不会出现此错误。我觉得我走到了死胡同。我以前不知道数据,回归法也不适合我预测标签。我不能使用任何不支持部分拟合的算法。我只想尝试一下随机森林,开始和结束我的搜索。我最后的希望是尝试kerasclassifier。你们知道kerasclassifier是否也像scikit分类器一样需要类标签吗?@krishnadamarla当然知道kerasclassifier需要。请对分类做一些非常基础的研究。术语分类也将此任务与回归区分开来(SGDRegressor没有得到此错误)。@krishnadamarla剪刀学习模型可以进行增量学习。您的问题(包含新数据的新类)称为少镜头学习。这些术语在ML社区中具有普遍接受的含义,了解/使用正确的术语将帮助您找到所需的内容。诚然,少镜头学习是一个更难的问题,而且没有现成的代码。少镜头学习与在线学习不同,但它们是相关的。很少有机会参与在线学习。在线学习通常不涉及新课程,只涉及新数据。很少有节目涉及新课程和新数据。请查看其他类似问题的答案:
from sklearn import neighbors, linear_model
import numpy as np

def train_new_data():

    sgd_clf = linear_model.SGDClassifier()

    x1 = [[8, 9], [20, 22]]
    y1 = [5, 6]

    classes = np.unique(y1)

    #print(classes)

    sgd_clf.partial_fit(x1,y1,classes=classes)

    x2 = [10, 12]
    y2 = 8


    sgd_clf.partial_fit([x2], [y2],classes=classes)#Error here!!

    return sgd_clf

if __name__ == "__main__":

    print(train_new_data().predict([[20,22]]))