我很难从哪里开始实现增量随机梯度下降算法及其在逻辑回归中的相应实现。我不太了解这个算法,并且很少有资源可以用清晰的解释和可能的演示代码来解释它。我对 ML 算法很陌生,我不知道哪种方法可以有效地解决这个问题。
特别是我正在研究的问题是实现hogWild!逻辑回归算法,它要求我按顺序对增量 SGD 算法进行编程。谁能给我一个大致的想法或可能的管道以在 python 中实现这一点?
逻辑损失函数和梯度
这是我的实现:
import numpy as np
import scipy as sp
import sklearn as sl
from scipy import special as ss
from sklearn import datasets
X_train, y_train=datasets.load_svmlight_file('/path/to/train_dataset')
X_test,y_test=datasets.load_svmlight_file('/path/to/train_dataset.txt',
n_features=X_train.shape[1])
class ISGD:
def lossFunc(X,y,w):
w.resize((w.shape[0],1))
y.resize((y.shape[0],1))
lossFnc=ss.log1p(1+np.nan_to_num(ss.expm1(-y* np.dot(X,w,))))
rslt=np.float(lossFnc)
return rslt
def gradFnc(X,y,w):
w.resize((w.shape[0],1))
y.resize((y.shape[0],1))
gradF1=-y*np.nan_to_num(ss.expm1(-y))
gradF2=gradF1/(1+np.nan_to_num(ss.expm1(-y*np.dot(X,w))))
gradF3=gradF2.resize(gradF2.shape[0],)
return gradF3
def _init_(self, learnRate=0.0001, num_iter=100, verbose=False):
self.w=None
self.learnRate=learnRate
self.verbose=verbose
self.num_iter=num_iter
def fitt(self, X,y):
n,d=X.shape
self.w=np.zeros(shape=(d,))
for i in range(self.num_iter):
print ("\n:", "Iteration:", i)
grd=gradFnc(self.w, X,y)
grd.resize((grd.shape[0],1))
self.w=self.w-grd
print "Loss:", lossFunc(self.w,X,y)
return self
似乎我的上述实现有一些问题。谁能帮我纠正一下?另外,我不知道如何按顺序实现增量 SGD。我怎样才能做到这一点?任何的想法?
