梯度下降计算功能空间具有两个功能

时间:2018-03-02 18:33:27

标签: python machine-learning linear-regression gradient-descent

我尝试计算最佳权重W [0]和W [1]以进行形状的线性回归:

prize=W0*dummy+W1*size

其中:

dummy=[1,1,1,1,1,1,1,1,1,1]
size=[500,550,620,630,665,700,770,880,920,1000]

目标要素(rental_prize)的值为:

rental_price=[320,380,400,390,385,410,480,600,570,620]

使用以下代码,我尝试计算W0和W1,使线性回归最适合数据。

# descriptive features
size=[500,550,620,630,665,700,770,880,920,1000]
dummy=[1,1,1,1,1,1,1,1,1,1]

# Vector which contains the descriptive features
features=[dummy,size]

# target feature
rental_price=[320,380,400,390,385,410,480,600,570,620]

# Set the learning rate alpha
alpha=0.002 

# Feature weight vector --> model=[W0,W1]
# Set initial values for W0 and W1
model=[0,0]

for i in range(len(model)):
    for j in range(100):
        errordelta=np.sum([(rental_price[x]-(model[0]*dummy[x]+model[1]*size[x]))*features[i][x] for x in range(len(size))])
        model[i]=model[i]+alpha*errordelta

print(model[0])
print(model[1])
  

395.09179229

     

对于W0,模型实际上应返回约6.47,对于W1,实际应返回0.62。如果我更改alpha以及初始权重和迭代(j)的值,模型仍然不会接近所需的值......

显然代码中一定有失败......

anybode可以帮助我吗。

2 个答案:

答案 0 :(得分:1)

您的算法中有三个错误:

  • 我不知道为什么你把绝对误差乘以特征的值;这使得误差函数呈二次方,但你没有用任何sqrt补偿。
  • 同样,您在调整体重之前未能平均误差量;这有效地将变化放大了一个等于训练行数的因子。
  • 您的循环顺序已反转:您希望依次训练要素,每次迭代一次。您是通过首先训练截距dummy,然后尝试将该值作为绝对值并随后训练斜率size来完成的。你需要替换它们。

更新后(以及一些文字改进):

for j in range(100):
    for i in range(len(model)):
        errordelta  =  np.sum([(rental_price[x] -
                                 (model[0]*dummy[x] + model[1]*sqft[x])) 
                             for x in range(len(sqft))]) / len(sqft)
        print(model, errordelta)
        model[i]  =  model[i] + alpha*errordelta

print(" sqft coeff", model[0])
print("dummy coeff", model[1])

输出:

[0, 0] 455.5
[0.91100000000000003, 0] 454.589
[0.91100000000000003, 0.90917800000000015] -203.201283
[0.5045974339999999, 0.90917800000000015] -202.794880434
[0.5045974339999999, 0.50358823913200013] 90.649311554
[0.68589605710799573, 0.50358823913200013] 90.4680129309
...
[0.62996765105739105, 0.62870771575527662] -1.70530256582e-14
[0.62996765105739105, 0.62870771575527662] -1.70530256582e-14
 sqft coeff 0.629967651057
dummy coeff 0.628707715755

答案 1 :(得分:0)

docker-compose -f jhipster-registry.yml up jhipster-registry
  

100次迭代后的线性方程:

     

HOUSE PRIZE = -0.145 + 0.629 * SIZE

enter image description here