KNeighborsClassifier' 对象没有属性 'append'

Posted

技术标签:

【中文标题】KNeighborsClassifier\' 对象没有属性 \'append\'【英文标题】:KNeighborsClassifier' object has no attribute 'append'KNeighborsClassifier' 对象没有属性 'append' 【发布时间】:2021-05-26 11:31:11 【问题描述】:

我正在尝试向保存的 pickle 文件(KNNClassifier 对象)添加新的编码和名称 - 但无法追加。

 # Save the trained KNN classifier
    if os.path.getsize(model_save_path) > 0:  
        if model_save_path is not None:
            with open(model_save_path, 'rb') as f:
                unpickler = pickle.Unpickler(f)
                clf = unpickler.load()


        newEncodings = X, y
        clf.append(newEncodings)

        with open(model_save_path,'wb') as f:
            pickle.dump(clf, f)
    
    else:
        if model_save_path is not None:
            with open(model_save_path, 'wb') as f:
                 pickle.dump(knn_clf, f)

得到错误:

'KNeighborsClassifier' object has no attribute 'append'

有什么办法可以做到吗?

【问题讨论】:

您是否尝试从新数据中再次训练它?如果是这种情况,请执行 clf.fit(X, y)。或者你想更多地训练它?我认为您必须获取原始数据并添加新数据,才能在整个数据集上使用 fit 方法。 我正在尝试用现有的训练数据追加新数据 【参考方案1】:

根据您想要对新数据执行的操作,您可以:

再次训练:

clf.fit(X, y)

或者只是做一些预测:

clf.predict(X)

如果您需要使用新旧数据对其进行训练,请执行以下操作:

clf.fit(Xold+X, yold+y)

一些分类器有以下方法可以帮助您对新添加的数据进行增量拟合:

estimator.set_params(n_estimators=110, warm_start=True)

estimator.partial_fit(...)

KNeighborsClassifier 似乎支持 warm_start=True 参数 所以你应该尝试:

clf.set_params(warm_start=True)
clf.fit(newX, newy)

【讨论】:

谢谢,@Malo。如何从分类器对象中获取旧数据,因为它已经被训练并保存为 pickle 文件?我的意思是如何从泡菜文件中提取 X 和 y - 我尝试使用 items() dict,但没有用。 一些分类器有以下方法可以帮助您对新添加的数据进行增量拟合:estimator.set_params(n_estimators=110, warm_start=True) 或 estimator.partial_fit(...) KNeighborsClassifier 似乎支持 warm_start=True 参数,所以你应该尝试: clf.set_params(warm_start=True) clf.fit(newX, newy) 我正在检查。当我使用 warm_start 时,以前训练的数据会发生什么,将能够对旧数据执行推理,还是会覆盖? warm_start 允许使用多批数据拟合模型,保留旧数据。所以这应该适合你。

以上是关于KNeighborsClassifier' 对象没有属性 'append'的主要内容,如果未能解决你的问题,请参考以下文章

sklearn - KNeighborsClassifier - ValueError:未知标签类型:'连续'

KNeighborsClassifier .predict() 函数不起作用

使用 KNeighborsClassifier 的 SKlearn 管道

KNeighborsClassifier()

使用 sklearn 使用 KNeighborsClassifier 时出错

当我将 IterativeImputer 与 KNeighborsClassifier 一起使用时出现错误“未知标签类型:'连续'”