【发布时间】:2018-09-13 09:56:45
【问题描述】:
为我最后一年的项目编写这个算法。使用梯度下降来找到最小值,但代价却是无穷大。
我已经检查了 gradientDescent 功能。我相信这是正确的。
我正在导入的 csv 及其格式导致了一些错误。 CSV 中的数据格式如下。
'|' 之前的每个四边形是一行。
前 3 列是自变量 x。 第 4 列依赖于 y。
600 20 0.5 0.63 | 600 20 1 1.5 | 800 20 0.5 0.9
import numpy as np
import random
import pandas as pd
def gradientDescent(x, y, theta, alpha, m, numIterations):
xTrans = x.transpose()
for i in range(0, numIterations):
hypothesis = np.dot(x, theta)
loss = hypothesis - y
# avg cost per example (the 2 in 2*m doesn't really matter here.
# But to be consistent with the gradient, I include it)
cost = np.sum(loss ** 2) / (2 * m)
print("Iteration %d | Cost: %f" % (i, cost))
# avg gradient per example
gradient = np.dot(xTrans, loss) / m
# update
theta = theta - alpha * gradient
return theta
df = pd.read_csv(r'C:\Users\WELCOME\Desktop\FinalYearPaper\ConferencePaper\NewTrain.csv', 'rU', delimiter=",",header=None)
x = df.loc[:,'0':'2'].as_matrix()
y = df[3].as_matrix()
print(x)
print(y)
m, n = np.shape(x)
numIterations= 100
alpha = 0.001
theta = np.ones(n)
theta = gradientDescent(x, y, theta, alpha, m, numIterations)
print(theta)
【问题讨论】:
-
为什么将分隔符设置为
,而不是|? -
它可能是分隔符,数据被空格分隔。
-
@Brayden 我相信这就是导入 csv 的方式。让我知道你的想法?
-
@forayer 我已经提到了 { delimiter=",",header=None }。你觉得别处吗?
-
@forayer 猜这些 cmets 被愚蠢的指南禁用了
标签: python pandas numpy machine-learning gradient-descent