【发布时间】:2015-10-28 10:31:03
【问题描述】:
我一直在使用(优秀的)NLTK-Trainer 来训练 NaiveBayes 分类器来对文本的 sn-ps 进行分类。我看到 NLTK-Trainer 也支持 scikit-learn 算法,我希望使用这些算法来减少内存使用/提高准确性。
但是,当我在运行 train_classifier.py 时尝试指定其中一个 scikit-learn 分类器时,会引发错误:
train_classifier.py: error: argument --classifier/--algorithm: invalid choice: 'sklearn.BernoulliNB' (choose from 'NaiveBayes', 'DecisionTree', 'Maxent', 'GIS', 'IIS', 'MEGAM', 'TADM')
我在 Windows 7 上运行 Python 3.4.3 的 32 位 Anaconda 发行版 (2.20)。“pip freeze”给了我以下信息:NLTK 3.0.4,scikit-learn 0.16.1。我相信我正在使用最新版本的 NLTK-Trainer(我在一个月前下载了它)。
在做了一些研究之后,我对出了什么问题有两种理论: 1. 存在某种 arg 解析错误,它没有正确地将 --classifier sklearn.BernoulliNB 传递给 train_classifer.py。在我对错误进行回溯后,它给了我这个
nltk_data\nltk-trainer-master\nltk-trainer-master\train_classifier.py in <module>()
131 nltk_trainer.classification.args.add_sklearn_args(parser)
132
--> 133 args = parser.parse_args()
134
AppData\Local\Continuum\Anaconda3\lib\argparse.py in parse_args(self, args, namespace)
1726 # =====================================
1727 def parse_args(self, args=None, namespace=None):
-> 1728 args, argv = self.parse_known_args(args, namespace)
1729 if argv:
1730 msg = _('unrecognized arguments: %s')
1765 except ArgumentError:
1766 err = _sys.exc_info()[1]
-> 1767 self.error(str(err))
1768
1769 def _parse_known_args(self, arg_strings, namespace):
- 我的另一个假设是 Anaconda 附带的 scikit-learn 文件位于 NLTK-Trainer 找不到它们的地方。根据 Jacob Perkins 的建议 (comment),我可以运行“from nltk.classify import scikitlearn”命令而不会出错。但是,当我进一步查看此处的 nltk-trainer/args.py 代码 (code) 时,我无法运行“导入命令”之后的代码。所有这些行都会引发错误。
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.pipeline import Pipeline
from sklearn import ensemble, feature_selection, linear_model, naive_bayes, neighbors, svm, tree
这真的很令人沮丧,我无法完全弄清楚为什么它不起作用。任何帮助将不胜感激!
【问题讨论】:
-
如果您无法执行
from sklearn.feature_extraction.text import TfidfTransformer或任何其他 sklearn 导入命令,则意味着 scikit-learn 库不可导入。这可能是 Anaconda 的问题,但也许你可以这样做pip install -U scikit-learn。