问题标签 [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.
machine-learning - scikit-learn RandomForestClassifier 产生“意外”结果
我正在尝试将 sk-learn 的 RandomForestClassifier 用于二进制分类任务(正面和负面示例)。我的训练数据包含 1.177.245 个示例,具有 40 个特征,采用 SVM-light 格式(稀疏向量),我使用 sklearn.dataset 的 load_svmlight_file 加载。它产生一个“特征值”(1.177.245 * 40)的稀疏矩阵和一个“目标类”数组(1和0,其中1.177.245)。我不知道这是否令人担忧,但训练数据有 3552 个正数,其余均为负数。
由于 sk-learn 的 RFC 不接受稀疏矩阵,因此我使用 .toarray() 将稀疏矩阵转换为密集数组(如果我说的没错?很多 0 表示缺少的特征)。我在转换为数组之前和之后打印矩阵,这似乎一切正常。
当我启动分类器并开始将其拟合到数据时,它需要很长时间:
(那个输出对吗?那963分钟大约需要2个半......)
然后我使用 joblib.dump 转储它。当我重新加载它时:
并在真实的训练数据上进行测试(由 750.709 个示例组成,与训练数据的格式完全相同)我得到“意外”的结果。准确地说;测试数据中只有一个示例被归类为真。当我对一半的初始训练数据进行训练并在另一半进行测试时,我根本没有得到任何正面结果。
现在我没有理由相信正在发生的事情有什么问题,只是我得到了奇怪的结果,而且我认为这一切都完成得非常快。进行比较可能是不可能的,但是使用 rt-rank(也有 1500 次迭代,但有一半的核心)在相同的数据上训练一个 RFClassifier 需要超过 12 个小时......
谁能告诉我我是否有理由相信某些事情没有按预期的方式工作?可能是训练数据中正负的比率吗?干杯。
nlp - 在 scikit-learn 中使用 nltk 搭配作为特征
我正在尝试使用 nltk 从语料库中提取搭配,然后将它们的出现用作 scikit-learn 分类器的特征。不幸的是,我对 nltk 不是很熟悉,而且我看不到一个简单的方法来做到这一点。我做到了这一点:
BigramCollocationFinder
使用from corpus提取搭配- 对于每个文档,提取所有二元组(使用
nltk.bigrams
)并检查它们是否是搭配之一 TfidfVectorizer
使用什么都不做的分析器创建一个- 以提取的二元组形式向其提供文档
这对我来说似乎过于复杂了。还有一个问题是,它BigramCollactionFinder
有一个window_size
跨越单词的二元组参数。标准nltk.bigrams
提取不能做到这一点。
克服这个问题的一种方法是为每个文档实例化一个新的 BigramCollocationFinder 并再次提取二元组并将它们与我之前找到的那些进行匹配......但同样,这似乎很复杂。当然,我忽略了一种更简单的方法。
感谢您的建议!
python - TypeError:只有一个元素的整数数组可以转换为索引
使用交叉验证执行递归特征选择时出现以下错误:
产生错误的代码如下:
我知道我还应该对 LogisticRegression 分类器的参数执行 GridSearch,但我认为这不是错误的根源(或者是吗?)。
我应该提一下,我正在测试大约 50 个功能,并且几乎所有功能都是分类的(这就是我使用 DictVectorizer 对它们进行适当转换的原因)。
您可以给我的任何帮助或指导都非常受欢迎。谢谢!
编辑
以下是一些训练数据示例:
scikit-learn - Sklearn:ValueError:X 和 Y 的形状不兼容
我是 sklearn 的新手,一般来说也是 python 的新手。你能帮我弄清楚这个脚本是否会导致一些解决方案吗?基本上我在图像集上使用色调提取器:加载 iset 进行训练、提取特征、定义分类器然后分类。
...加载 clf 后,我得到:
scikit-learn - 可以使用 sklearn 对大数据文件应用在线算法吗?
我想在大文本语料库上应用快速的在线降维技术,例如(在线/小批量)字典学习。我的输入数据自然不适合内存(这就是我想使用在线算法的原因)所以我正在寻找一种可以迭代文件而不是将所有内容加载到内存中的实现。可以用 sklearn 做到这一点吗?有替代品吗?
感谢注册
python - 首先要做什么:特征选择还是模型参数设置?
这更像是一个“理论”问题。我正在使用 scikit-learn 包来执行一些 NLP 任务。Sklearn 提供了许多方法来执行特征选择和模型参数的设置。我想知道我应该先做什么。
如果我使用单变量特征选择,很明显我应该先进行特征选择,然后使用所选特征调整估计器的参数。
但是如果我想使用递归特征消除呢?我应该先使用所有原始特征通过网格搜索设置参数,然后再执行特征选择吗?或者我应该先选择特征(使用估计器的默认参数),然后使用所选特征设置参数?
提前感谢您能给我的任何帮助。
编辑
我遇到了这里所说的几乎相同的问题。到那时,还没有解决办法。有谁知道它现在是否存在?
image - Scikit-学习。分类无序的 jpg
您将如何处理以下问题:我有 5 类图像(总共 500 张图像):汽车、房屋、树木、椅子和脸。然后我有一个包含 20 个无序图像的文件夹,这意味着我知道它们属于 5 个类别之一,但还不知道属于哪一个,我希望我的系统根据 5 个受控类别对它们进行分类。我正在使用几个提取器(色调、边缘)来完成这项任务,但我正在努力寻找合适的分类方法。特别是一些python库需要以与类文件夹相同的方式命名不受控制的图像文件夹(例如/dir/受控/汽车和/dir/uncontrolled/car),这对我的分析来说根本不可行。至于我正在寻找替代方法,您能否在 sklearn 中提供一些方法论建议/解决方法?
python - ValueError:尺寸不匹配
我使用SciPy和scikit-learn来训练和应用多项式朴素贝叶斯分类器进行二进制文本分类。准确地说,我使用该模块sklearn.feature_extraction.text.CountVectorizer
来创建包含文本中单词特征计数的稀疏矩阵,并使用该模块sklearn.naive_bayes.MultinomialNB
作为分类器实现,用于在训练数据上训练分类器并将其应用于测试数据。
的输入CountVectorizer
是表示为 unicode 字符串的文本文档列表。训练数据远大于测试数据。我的代码看起来像这样(简化):
问题:一旦MultinomialNB.predict_log_proba()
被调用,我就会得到ValueError: dimension mismatch
. 根据下面的 IPython 堆栈跟踪,错误发生在 SciPy 中:
我不知道为什么会发生此错误。有人可以向我解释一下并为这个问题提供解决方案吗?提前非常感谢!
python - joblib 与 pickle 的不同用例是什么?
背景:我刚刚开始使用 scikit-learn,并在页面底部阅读了有关joblib 与 pickle的内容。
使用joblib替换pickle(joblib.dump & joblib.load)可能更有趣,这在大数据上效率更高,但只能pickle到磁盘而不是字符串
我读了这个关于 Pickle 的问答, Python 中 pickle 的常见用例,想知道这里的社区是否可以分享 joblib 和 pickle 之间的区别?什么时候应该使用一个而不是另一个?
python - Scikit-learn 的带有线性内核 svm 的 GridSearchCV 耗时太长
我从 sklearn 网站获取了示例代码,即
X_train 是一个大约 70 行的 pandas DataFrame。
输出是
然后它永远不会结束。我用 Lion 在 Mac Book Pro 上运行它。我做错了什么?