我有两个 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/