与scikit批梯度下降学会(sklearn)(Batch gradient descent wit

2019-08-17 03:04发布

我玩用Scikit - 学习(sklearn)一VS-所有Logistic回归分类。 我有一个大的数据集是一气呵成运行所有太慢; 我也想学习学习曲线作为训练所得。

我想用批处理梯度下降训练我的分类中,比方说,500个样品批次。 是否有使用sklearn做到这一点的一些方法,或者我应该放弃sklearn和“滚我自己”?

这是我到目前为止有:

from sklearn.linear_model import LogisticRegression
from sklearn.multiclass import OneVsRestClassifier

# xs are subsets of my training data, ys are ground truth for same; I have more 
# data available for further training and cross-validation:
xs.shape, ys.shape
# => ((500, 784), (500))
lr = OneVsRestClassifier(LogisticRegression())
lr.fit(xs, ys)
lr.predict(xs[0,:])
# => [ 1.]
ys[0]
# => 1.0

也就是说,它正确地识别训练样本(是的,我知道这将是更好地与新的数据来评价它 - 这仅仅是一个快速烟雾测试)。

再批梯度下降:我没有尽可能创造学习曲线得到,但可以在一个简单的运行fit反复训练数据的后续子集? 或者是有一些其他的功能,分批培训? 文档和谷歌都对此事相当沉默。 谢谢!

Answer 1:

你想要的是不批梯度下降,但随机梯度下降; 一批学习意味着学习上一气呵成整个训练集,而你所描述正确称为minibatch学习。 这是在实施sklearn.linear_model.SGDClassifier ,它适合如果你给它的选择逻辑回归模型loss="log"

随着SGDClassifier ,喜欢用LogisticRegression ,没有必要来包装估计在OneVsRestClassifier -既做一个-VS-所有培训开箱。

# you'll have to set a few other options to get good estimates,
# in particular n_iterations, but this should get you going
lr = SGDClassifier(loss="log")

然后,对minibatches培养,使用partial_fit方法,而不是fit 。 第一次,你必须给它的类的列表,因为并非所有的类可能存在于每个minibatch:

import numpy as np
classes = np.unique(["ham", "spam", "eggs"])

for xs, ys in minibatches:
    lr.partial_fit(xs, ys, classes=classes)

(在这里,我路过classes每个minibatch,这是没有必要的,但也没有破坏,使代码更短。)



文章来源: Batch gradient descent with scikit learn (sklearn)