python - MLKNN - __int__() 采用 1 个位置参数,但 2 个是使用 fit 方法给出的

标签 python scikit-learn knn skmultilearn

我有两个 Pandas 数据框。一个带有 word2vec 嵌入的 df(或 X),形状为 (50000,200)。和另一个填充了 0 和 1 的数据框(或稀疏矩阵)。这个 df 是 sklearn.preprocessing.MultiLabelBinarizer 的输出, 因此在每一列中仅填充 1 和 0,此 df 的形状为 (50000, 102)。

我试过安装 skmultilearn.adapt.mlknn在这个数据上,如下图:

from skmultilearn.adapt import MLkNN
classifier = MLkNN(k=3)
# train
classifier.fit(X=x_train_w2v.to_numpy(), y=y_train.to_numpy())

我得到的错误是:

TypeError Traceback (most recent call last)
<ipython-input-36-5ae90a2db4ec> in <module>
5 # # train
6
----> 7 clf_mlknn.fit(X=x_train_w2v.to_numpy(),y=y_train.to_numpy())
8 # predict
9 # predict_mlknn_wv = classifier_new.predict(x_test_mlknn)


~\Anaconda3\lib\site-packages\skmultilearn\adapt\mlknn.py in fit(self, X, y)
216 self._prior_prob_true, self._prior_prob_false = self._compute_prior(self._label_cache)
217 # Computing the posterior probabilities
--> 218 self._cond_prob_true, self._cond_prob_false = self._compute_cond(X, self._label_cache)
219 return self
220


~\Anaconda3\lib\site-packages\skmultilearn\adapt\mlknn.py in _compute_cond(self, X, y)
163 """
164
--> 165 self.knn_ = NearestNeighbors(self.k).fit(X)
166 c = sparse.lil_matrix((self._num_labels, self.k + 1), dtype='i8')
167 cn = sparse.lil_matrix((self._num_labels, self.k + 1), dtype='i8')


TypeError: __init__() takes 1 positional argument but 2 were given

从源代码中,我可以看到 NearestNeighbors 只适用于 X,这也可以在上面以 --> 165。我认为这就是产生错误的原因。

如何修复此错误并正确适配 MLkNN?

最佳答案

该错误与 scikit-learn 已经指出的弃用警告有关 最近邻:

FutureWarning: Pass n_neighbors=3 as keyword args. From version 1.0 (renaming of 0.25) passing these as positional arguments will result in an error "will result in an error", FutureWarning)

此问题已在此处进行了调整,并将包含在下一个版本中:

https://github.com/scikit-multilearn/scikit-multilearn/issues/230

与此同时,可以使用@Naveen-Reddy-Marthala 的解决方案 MLKNN - __int__() takes 1 positional argument but 2 were given with fit method :

!pip uninstall scikit-learn -y
!pip install scikit-learn==0.24.1

关于python - MLKNN - __int__() 采用 1 个位置参数,但 2 个是使用 fit 方法给出的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69734051/

相关文章:

python - 如何在使用/一次热编码运行 Scikit 模型后检索原始变量

python - 在 Spark 中广播 Annoy 对象(对于最近的邻居)?

Python - 如何让 tqdm 在 shell 中打印一行进度条?

python - python中的grep变量

python - 在 python 中精确复制 R 文本预处理

python - XGBoost 产生非二进制预测

python - 使用 python 和 Scikit Learn 实现 K-NN 机器学习算法的 ROC 曲线

python-3.x - 使用 StratifiedShuffleSplit 时计算召回率指标

python - celery 不记录返回值或重新启动前获取新任务

python - Pandas : Get the least number of records so all columns have at least one non null value