私はpythonで勾配降下を実装しようとしています。私の損失/コストはすべての反復で増加し続けます。Pythonの勾配降下 - コストが増加し続ける
私は少数の人々がこれについて投稿見られ、ここで答えを見てきました:私は私の実装が似ていると信じてgradient descent using python and numpy
を、私は爆発コスト値を取得するために間違ってやっているかを見るカント:
Iteration: 1 | Cost: 697361.660000
Iteration: 2 | Cost: 42325117406694536.000000
Iteration: 3 | Cost: 2582619233752172973298548736.000000
Iteration: 4 | Cost: 157587870187822131053636619678439702528.000000
Iteration: 5 | Cost: 9615794890267613993157742129590663647488278265856.000000
私は私がオンラインで見つけるデータセット(LAハートデータ)上でこれをテストしてい
:http://www.umass.edu/statdata/statdata/stat-corr.html
インポートコード:
dataset = np.genfromtxt('heart.csv', delimiter=",")
x = dataset[:]
x = np.insert(x,0,1,axis=1) # Add 1's for bias
y = dataset[:,6]
y = np.reshape(y, (y.shape[0],1))
勾配降下:
def gradientDescent(weights, X, Y, iterations = 1000, alpha = 0.01):
theta = weights
m = Y.shape[0]
cost_history = []
for i in xrange(iterations):
residuals, cost = calculateCost(theta, X, Y)
gradient = (float(1)/m) * np.dot(residuals.T, X).T
theta = theta - (alpha * gradient)
# Store the cost for this iteration
cost_history.append(cost)
print "Iteration: %d | Cost: %f" % (i+1, cost)
計算コスト:
def calculateCost(weights, X, Y):
m = Y.shape[0]
residuals = h(weights, X) - Y
squared_error = np.dot(residuals.T, residuals)
return residuals, float(1)/(2*m) * squared_error
計算仮説:
def h(weights, X):
return np.dot(X, weights)
実際にそれを実行するには:
gradientDescent(np.ones((x.shape[1],1)), x, y, 5)
間違った方向に向いているように思えるので、私のベスト・ベットは簡単な署名の問題です。 –