问题标签 [scikit-learn]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1412 浏览

python - Scikit-learn Naive Bayes 使用稀疏字符串分类的莫名其妙的结果

我正在尝试使用 scikit learn 模块进行文本分类。它是一个包含许多独特单词的数据集。从以下示例中可以看出其性质,

输出看起来像这样。

这是一个多项式示例,但我得到与伯努利示例相同的结果。我尝试使用 0 到 1000000 的 alpha 值。谁能向我解释为什么会这样?

编辑:我应该说清楚,存在以下课程使命召唤:现代战争,使命召唤:现代战争2 ......大多数其他游戏,所有游戏站游戏的列表均来自维基百科。

此外,完整版本,例如使命召唤:现代战争 2 作为测试字符串会产生相同的结果

我最初使用的是 NLTK 分类器,但由于某种原因,它没有放置太多有价值的词,例如“Kakutou”,而这些词在任何其他示例中都不存在。(显然 Scikit 有)它没有像 scikit 分类器那样的数字问题。

这里的任何指导或信息都将非常有价值。

谢谢

编辑:数据集来自这里http://en.wikipedia.org/wiki/List_of_PlayStation_3_games它的第一列,每个示例都有一个标签和相同的内容

0 投票
2 回答
7591 浏览

python - scikit-learn 中分类算法的文本特征输入格式

我开始使用 scikit-learn 来做一些 NLP。我已经使用了一些来自 NLTK 的分类器,现在我想尝试在 scikit-learn 中实现的分类器。

我的数据基本上是句子,我从这些句子的一些单词中提取特征来做一些分类任务。我的大部分特征都是名义上的:词的词性(POS),词到左,词性词到左,词到右,词性词到-对,从一个词到另一个词的句法关系路径,等等。

当我使用 NLTK 分类器(决策树,朴素贝叶斯)进行一些实验时,特征集只是一个字典,其中包含特征的相应值:名义值。如:[ {"postag":"noun", "wleft":"house", "path":"VPNPNP",...},.... ]。我只需要将它传递给分类器,他们就完成了他们的工作。

这是使用的代码的一部分:

这是提取的特征集之一的示例:

正如我之前提到的,大多数功能都是名义上的(字符串值)。

现在,我想试试 scikit-learn 包中的分类器。据我了解,这种类型的特征集对于 sklearn 中实现的算法是不可接受的,因为所有特征值都必须是数字,并且它们必须在数组或矩阵中。因此,我使用 DictVectorizer 类转换了“原始”功能集。但是,当我传递这个转换后的向量时,会出现以下错误:

当我只使用 DictVectorizer() 时出现这些错误。但是,如果我使用 DictVectorizer(sparse=False),甚至在代码进入训练部分之前我就会收到错误:

由于这个错误,很明显必须使用稀疏表示。

所以问题是:如何转换我的标称特征以便使用 scikit-learn 提供的分类算法?

提前感谢您能给我的所有帮助。

更新

正如下面的答案所建议的,我尝试将 NLTK 包装器用于 scikit-learn。我刚刚更改了创建分类器的代码行:

然后,当我调用“train”方法时,我得到以下信息:

因此,显然,包装器无法创建稀疏矩阵,因为这些特征是名义上的。然后,我回到原来的问题。

0 投票
2 回答
631 浏览

java - 使用概率估计进行分类的 ML 技术

我想实现一个 OCR 系统。我需要我的程序在它选择识别的字母上不犯任何错误。如果它不能识别其中很多也没关系(即即使召回率低也可以实现高精度)。

有人可以帮我为此选择合适的 ML 算法吗?我一直在环顾四周,发现一些令人困惑的事情。例如,我发现关于 SVM 的说法自相矛盾。在scikits learn docs中,提到我们无法获得 SVM 的概率估计。然而,我发现另一个帖子说可以在 WEKA 中执行此操作。

无论如何,我正在寻找一种最适合此目的的机器学习算法。如果您也可以为该算法推荐一个库,那就太好了。我更喜欢基于 Python 的解决方案,但我也可以使用 Java。

0 投票
1 回答
591 浏览

python - 交叉验证的附加拟合参数

使用scikit-learn时,有没有办法将附加参数传递fit给分类器的方法cross_val_score?例如,您将如何为分类器指定sample_weightor :class_priorMultinomialNB

scikit-learn的页面关于MultinomialNB

0 投票
1 回答
4675 浏览

python - 在 scikit-learn 中使用具有多项式内核的支持向量分类器

我正在尝试使用 scikit-learn 包中实现的不同分类器来完成一些 NLP 任务。我用来执行分类的代码如下

从代码中可以看出,我正在测试支持向量机分类器的两种实现:LinearSVC 和带有多项式内核的 SVC。现在,对于我的“问题”。使用 LinearSVC 时,我得到了一个没有问题的分类:测试实例被标记了一些标签。但是,如果我使用多项式 SVC,则所有测试实例都带有相同的标签。我知道一种可能的解释是,简单地说,多项式 SVC 不是用于我的任务的合适分类器,这很好。我只是想确保我正确使用了多项式 SVC。

感谢您给我的所有帮助/建议。

更新 按照答案中给出的建议,我更改了训练分类器执行以下操作的代码:

现在我收到以下消息:

这与我的训练数据中类的实例分布不均匀有关,对吧?还是我错误地调用了该程序?

0 投票
1 回答
5200 浏览

python - scikit-learn GMM 产生正对数概率

我正在使用 python scikit-learn 包中的高斯混合模型来训练我的数据集,但是,当我编码时,我发现

-- G=mixture.GMM(...)

-- G.fit(...)

-- G.score(求和特征)

得到的对数概率是正实数……这是为什么呢?对数概率不能保证为负吗?

我得到它。高斯混合模型返回给我们的是对数概率“密度”而不是概率“质量”,因此正值是完全合理的。

如果协方差矩阵接近奇异,则 GMM 将不会表现良好,通常意味着数据不适用于此类生成任务

0 投票
1 回答
2182 浏览

python - 为什么 Scikit GradientBoostingClassifier 不允许我使用最小二乘回归?

为什么会这样

失败:

它与loss='deviance'?

我在 Ubuntu 64 位中使用 scikit-learn-0.11 和 scipy-0.11.0rc1 这发生在对具有二进制类“YES”“NO”的数据集进行分类。

0 投票
1 回答
5601 浏览

python - Enthought Canopy 发行版中包含 scikit-learn 的升级版本

我安装了 EPD 7.3.1(现在称为 Enthought Canopy),它随 scikit-learn v 0.11 一起提供。我正在运行 Ubuntu 12.04。我需要安装 scikit-learn 的 v 0.12。

scikit-learn文档说克隆存储库,将 scikit-learn 目录添加到您的 PYTHONPATH,并就地构建扩展:python setup.py build_ext --inplace

问题是 EPD 是它自己的封闭世界(有多个 scikit 目录):
./lib/python2.7/site-packages/scikits/
./lib/python2.7/site-packages/sklearn

然后是:
./EGG-INFO/scikit_learn/

我真的不想尝试,因为它需要很长时间才能调整到这一点。在这种情况下,我应该遵循 scikit-learn 的指示吗?

0 投票
1 回答
5591 浏览

python - 在朴素贝叶斯(Python、scikit)中使用稀疏矩阵/在线学习

我正在尝试对具有超过 6,000,000 个条目且每个条目具有 150k 个特征的数据集进行朴素贝叶斯。我尝试从以下链接实现代码: 在 NLTK 中实现词袋朴素贝叶斯分类器

问题是(据我了解),当我尝试使用 dok_matrix 作为参数运行训练方法时,它找不到 iterkeys(我已将行与 OrderedDict 作为标签配对):

我的问题是,有没有办法通过逐项(在线)教授分类器条目来避免使用稀疏矩阵,或者在这种情况下我可以有效地使用稀疏矩阵格式而不是 dok_matrix?还是我错过了一些明显的东西?

感谢任何人的时间。:)

编辑,9 月 6 日:

找到了iterkeys,所以至少代码运行。它仍然太慢,因为它花了几个小时处理一个 32k 大小的数据集,但仍未完成。这是我目前得到的:

问题可能是所采用的每一行都没有利用向量的稀疏性,而是遍历了 150k 条目中的每一个。作为该问题的延续,有谁知道如何将这个朴素贝叶斯与稀疏矩阵一起使用,或者有没有其他方法可以优化上述代码?

0 投票
1 回答
2018 浏览

python - Pandas & Scikit:切片 DataFrame 时的内存使用情况

我有一个DataFrame从 csv 文件(大约 300MB)加载的大文件。

从中,我提取了几十个要在 a 中使用RandomForestClassifier的特征:一些特征只是从数据中的列派生而来,例如:

DataFrame其他的则使用原始数据帧上的索引从 numpy 数组中创建为 new :

然后将所有这些功能合并为一个DataFrame

我训练了一个随机森林分类器:

使用这些RandomForestClassifier功能可以正常工作,构建一棵树需要 O(数百兆字节的内存)。但是:如果在加载我的数据后,我会取其中的一部分:

然后为我的随机森林构建一棵树突然需要很多 GB的内存——即使特征的大小DataFrame现在是原始大小的 O(10%)。

我可以相信这可能是因为对数据的切片视图不允许有效地完成进一步的切片(尽管我不知道如何将其传播到特征数组中),所以我尝试了:

但这无济于事。

  • 为什么获取数据子集会大量增加内存使用?
  • 是否有其他方法可以压缩/重新排列 aDataFrame可能会使事情再次变得更有效率?