我想實現使用python梯度下降算法和下面是我的代碼,需要長時間來完成梯度下降算法 - 效率 - Python的
def grad_des(xvalues, yvalues, R=0.01, epsilon = 0.0001, MaxIterations=1000):
xvalues= np.array(xvalues)
yvalues = np.array(yvalues)
length = len(xvalues)
alpha = 1
beta = 1
converged = False
i=0
cost = sum([(alpha + beta*xvalues[i] - yvalues[i])**2 for i in range(length)])/(2 * length)
start_time = time.time()
while not converged:
alpha_deriv = sum([(alpha + beta*xvalues[i] - yvalues[i]) for i in range(length)])/(length)
beta_deriv = sum([(alpha + beta*xvalues[i] - yvalues[i])*xvalues[i] for i in range(length)])/(length)
alpha = alpha - R * alpha_deriv
beta = beta - R * beta_deriv
new_cost = sum([ (alpha + beta*xvalues[i] - yvalues[i])**2 for i in range(length)])/(2*length)
if abs(cost - new_cost) <= epsilon:
print 'Converged'
print 'Number of Iterations:', i
converged = True
cost = new_cost
i = i + 1
if i == MaxIterations:
print 'Maximum Iterations Exceeded'
converged = True
print "Time taken: " + str(round(time.time() - start_time,2)) + " seconds"
return alpha, beta
此代碼工作正常。但問題是,約600次迭代需要超過25秒。我覺得這樣做效率不夠高,我在做計算之前嘗試將它轉換爲數組。這確實將時間從300秒縮短到了25秒。我仍然覺得它可以減少。任何人都可以幫助我改進這個算法嗎?
感謝
這裏有各種各樣的錯誤,但我無法用緩慢來重現具體問題。你的輸入的性質(xvalues和yvalues)是什麼? –
@JasonS我可以知道有什麼錯誤嗎?它實際上是一個有506個值的數據框。現在我正在使用inbuild波士頓數據集 – haimen
評論一些潛在的項目。另外,輸入的範圍是什麼?當我放入大於20的東西時,會發生溢出錯誤。 –