2013-02-23 14 views
7

私はScikit-Learn(sklearn)を使って1対全ロジスティック回帰分類子で遊んでいます。私は大規模なデータセットを持っています。トレーニングが進むにつれて学習曲線を勉強したいと思っています。scikitでバッチ勾配降下learn(sklearn)

バッチ勾配降下を使用して、分類器を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 

すなわち、トレーニングサンプルを正しく識別します(はい、新しいデータで評価する方が良いことがわかりました - これは簡単な煙検査です)。

R.e.バッチ勾配降下:私は学習曲線を作成するまでは得られませんでしたが、後で訓練データのサブセットでfitを繰り返し実行することはできますか?あるいはバッチで訓練する他の機能がありますか?ドキュメントとGoogleは、この件に関してかなり静かである。ありがとう!

+0

おそらく、このライブラリのソースコードを調べることができます。 – Arcturus

答えて

20

バッチ勾配降下ではなく、確率的勾配降下です。バッチ・ラーニングとは、トレーニング・セット全体を一度に学習することを意味しますが、あなたが記述する内容は、ミニバッチ・ラーニングとも呼ばれます。これはsklearn.linear_model.SGDClassifierに実装されています。これは、ロジスティック回帰モデルに合うもので、オプションloss="log"を指定すると適合します。両方のボックスのうち1-VS-すべてのトレーニングを行う - SGDClassifier

は、LogisticRegressionと同じように、OneVsRestClassifierで推定をラップする必要はありません。

# 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に訓練するために、代わりに fitpartial_fitメソッドを使用します。最初の頃は、あなたがいないすべてのクラスは、各minibatch中に存在することができるので、それをクラスのリストを供給する必要があります。

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

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

(ここでは、私は必要ありません各minibatch、についてclassesを渡しているが、コードを短くします)。

+0

詳細な回答をありがとう、私はできるだけ早く試みます。定義に関して、私はAndrew NgのCourseraクラスからの用語に従っていました。彼の命名法では、確率的な勾配降下はすべての訓練サンプルで勾配を変えることを伴い、バッチ勾配降下と呼ばれるミニバッチと呼んでいます。名前にもかかわらず、私はこれが私が求めていたことを見ることができます - ありがとう! – JohnJ

+1

@ JohnJ:実際にSGDはバッチ、ミニバッチ、またはオンライン(一度に1つのサンプル)モードで使用できます。ここで私が使った用語は教授の用語です。 HintonのCoursera NN/MLクラス。これまでにほとんどの文献と一致することがわかった。 –

+0

素敵な、ありがとう。あなたの答えは今まで私にとってうまくいった。あなたはそのクラスをお勧めしますか?再度、感謝します。 – JohnJ

関連する問題