Я новичок в машинном обучении. Я пытаюсь реализовать пакетный алгоритм Stochasti c Gradient Descent в данных о ценах на жилье в Бостоне в Python. Я думаю, что я правильно следую алгоритму для линейной регрессии, но я получаю очень большие значения для векторов веса и перехвата. Может ли кто-нибудь помочь мне?
import numpy as np
r=1
diso=0.0
intercep=0
x=np.random.normal(0.0,1.0,13)
for c in range(50):
sums2=0
batch=traindat.sample(n = 100)
batch1=batch.drop('PRICE', axis = 1)
batch2=batch['PRICE']
predtargs=(batch1.iloc[:,0:13].dot(x)+intercep)
listofsums_weights=[]
for j in batch1.reset_index(drop=True):
sums=0
for i in range(len(predtargs)):
sums=sums+(-2*(batch2.reset_index(drop=True).get(i)-((predtargs.reset_index(drop=True).get(i))))*batch1.reset_index(drop=True)[j][i])
listofsums_weights.append(sums)
for i in range(len(predtargs)):
sums2=sums2+(-2*(batch2.reset_index(drop=True).get(i)-((predtargs.reset_index(drop=True).get(i)))))
newx=[]
intercep=intercep-r*sums2
for m in range(len(x)):
newx.append(x[m]-(r*listofsums_weights[m]))
r=r/2
disn=np.linalg.norm(np.array(x)-np.array(newx))
x=newx
if int((diso))==int((disn)):
break
diso=disn
print('Final weight vector')
print(x)
print('Final intercept')
print(intercep)
Здесь «r» - скорость обучения. Все значения функций нормализованы. Евклидово расстояние между весовыми векторами уменьшается, но отдельные значения очень высоки.