我尝试计算最佳权重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可以帮助我吗。
答案 0 :(得分:1)
您的算法中有三个错误:
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)