Что не так в моей python реализации Stochasti c градиентного спуска в базе данных ценообразования Boston House? - PullRequest
0 голосов
/ 22 февраля 2020

Я новичок в машинном обучении. Я пытаюсь реализовать пакетный алгоритм 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» - скорость обучения. Все значения функций нормализованы. Евклидово расстояние между весовыми векторами уменьшается, но отдельные значения очень высоки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...