skmultilearn库MLkNN训练报错:TypeError参数传递异常
解决skmultilearn中MLkNN的TypeError问题
问题场景
尝试使用skmultilearn包的多标签kNN(MLkNN)进行实验,代码如下:
from sklearn.datasets import make_multilabel_classification from sklearn.model_selection import train_test_split X, y = make_multilabel_classification(n_samples=700, n_features = 80, n_classes=5, n_labels=2, allow_unlabeled=False, random_state=1) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) from skmultilearn.adapt import MLkNN classifier = MLkNN(k=3) classifier.fit(X_train, y_train)
运行后出现如下错误:
Traceback (most recent call last): File "/home/hiki/Documents/Uni/Practical_Work/test_scene.py", line 55, in <module> classifier.fit(X_train, y_train) File "/home/hiki/.local/lib/python3.10/site-packages/mllearn/alg_adapt/mlknn.py", line 14, in fit self.knn = NearestNeighbors(self.k) TypeError: NearestNeighbors.__init__() takes 1 positional argument but 2 were given
错误原因
从报错路径能看到,代码实际调用的是mllearn包下的mlknn.py,而非预期的skmultilearn包。mllearn是一个已停止维护的老旧库,它的MLkNN实现中调用sklearn的NearestNeighbors时参数传递方式错误——sklearn的NearestNeighbors初始化需要指定n_neighbors关键字参数,而非直接传位置参数,这就导致了类型错误。
解决步骤
- 卸载冲突的mllearn库:
pip uninstall mllearn -y
- 确保skmultilearn是最新可用版本:
pip install --upgrade scikit-multilearn
- 重新运行代码前,可先验证导入的MLkNN模块是否正确:
from skmultilearn.adapt import MLkNN print(MLkNN.__module__)
输出应为skmultilearn.adapt.mlknn,说明导入的是正确的库。
内容的提问来源于stack exchange,提问作者Gunners
相关产品推荐
相关产品推荐

