【发布时间】:2016-04-14 19:33:47
【问题描述】:
我正在尝试实现这个算法来找到单个变量的截距和斜率:
这是我更新截距和斜率的 Python 代码。但它没有收敛。 RSS随着迭代而增加而不是减少,并且在一些迭代之后它变得无限。我没有发现实现算法的任何错误。我该如何解决这个问题?我也附上了csv文件。 这是代码。
import pandas as pd
import numpy as np
#Defining gradient_decend
#This Function takes X value, Y value and vector of w0(intercept),w1(slope)
#INPUT FEATURES=X(sq.feet of house size)
#TARGET VALUE=Y (Price of House)
#W=np.array([w0,w1]).reshape(2,1)
#W=[w0,
# w1]
def gradient_decend(X,Y,W):
intercept=W[0][0]
slope=W[1][0]
#Here i will get a list
#list is like this
#gd=[sum(predicted_value-(intercept+slope*x)),
# sum(predicted_value-(intercept+slope*x)*x)]
gd=[sum(y-(intercept+slope*x) for x,y in zip(X,Y)),
sum(((y-(intercept+slope*x))*x) for x,y in zip(X,Y))]
return np.array(gd).reshape(2,1)
#Defining Resudual sum of squares
def RSS(X,Y,W):
return sum((y-(W[0][0]+W[1][0]*x))**2 for x,y in zip(X,Y))
#Reading Training Data
training_data=pd.read_csv("kc_house_train_data.csv")
#Defining fixed parameters
#Learning Rate
n=0.0001
iteration=1500
#Intercept
w0=0
#Slope
w1=0
#Creating 2,1 vector of w0,w1 parameters
W=np.array([w0,w1]).reshape(2,1)
#Running gradient Decend
for i in range(iteration):
W=W+((2*n)* (gradient_decend(training_data["sqft_living"],training_data["price"],W)))
print RSS(training_data["sqft_living"],training_data["price"],W)
Here 是 CSV 文件。
【问题讨论】:
-
;P 是华盛顿大学机器学习班的,我也上过,很好玩,很有启发性。我建议你使用coursera上的论坛,你可以从导师、志愿者和同学那里得到很好的答案。 coursera.org/learn/ml-regression/discussions
标签: python numpy machine-learning linear-regression gradient-descent