小编Ale*_*ure的帖子

Scikit-Learn Logistic回归内存错误

我正在尝试使用sklearn 0.11的LogisticRegression对象来拟合200,000个观测值的模型,其中包含大约80,000个特征.目标是将短文本描述分为800个类中的1个.

当我尝试使用分类器时pythonw.exe给了我:

应用程序错误"指令位于0x00000000处的引用内存".内存无法写入".

这些功能非常稀疏,每次观察大约10次,并且是二进制(1或0),所以通过我的信封计算后面我的4 GB RAM应该能够处理内存要求,但这似乎不是这样的.仅当我使用较少的观察值和/或较少的特征时,模型才适合.

如果有的话,我想使用更多的观察和功能.我天真的理解是,在幕后运行的liblinear库能够支持它.关于我如何能够进行更多观察的任何想法?

我的代码看起来像这样:

y_vectorizer = LabelVectorizer(y) # my custom vectorizer for labels
y = y_vectorizer.fit_transform(y)

x_vectorizer = CountVectorizer(binary = True, analyzer = features)
x = x_vectorizer.fit_transform(x)

clf = LogisticRegression()
clf.fit(x, y)
Run Code Online (Sandbox Code Playgroud)

我传递给分析器的features()函数只返回一个字符串列表,指示每个观察中检测到的特征.

我使用的是Python 2.7,sklearn 0.11,Windows XP和4 GB的RAM.

scikit-learn

7
推荐指数
1
解决办法
5014
查看次数

训练sklearn LogisticRegression分类器,没有所有可能的标签

我正在尝试使用scikit-learn 0.12.1来:

  1. 训练LogisticRegression分类器
  2. 在持有的验证数据上评估分类
  3. 将新数据提供给此分类器并检索每个观察的5个最可能的标签

除了一个特点之外,Sklearn使所有这一切变得非常容易.无法保证每个可能的标签都会出现在用于适合我的分类器的数据中.有数百种可能的标签,其中一些标签没有出现在可用的培训数据中.

这导致2个问题:

  1. 当标签矢量化器出现在验证数据中时,它不会识别以前看不见的标签.通过将贴标机安装到一组可能的标签上可以很容易地解决这个问题,但这会加剧问题2.
  2. LogisticRegression分类器的predict_proba方法的输出是[n_samples,n_classes]数组,其中n_classes 包含训练数据中看到的类.这意味着在predict_proba数组上运行argsort不再提供直接映射到标签矢量化器词汇表的值.

我的问题是,强制分类器识别全部可能类的最佳方法是什么,即使其中一些类没有出现在训练数据中?显然,它无法了解它从未见过数据的标签,但0在我的情况下是完全可用的.

python machine-learning scikit-learn

4
推荐指数
1
解决办法
1424
查看次数

标签 统计

scikit-learn ×2

machine-learning ×1

python ×1