Я построил этот код общего градиентного спуска для линейной регрессии, однако запутался, как обращаться со значением перехвата - PullRequest
0 голосов
/ 27 апреля 2020

1 как справиться с перехватом, например, у меня есть стад ie где-то во время обобщения этого для n + 1 объектов, где +1 для перехвата, использовать массив размером n + 1, но не может понять, как рассчитать это во время расчета наклона, хотя я пытался, но я чувствую, что где-то не так, пожалуйста, помогите

def cost(m,data):
    total_cost = 0
    tot=len(data)
    width=len(data.columns)
    for i in range(len(data)):
        l=[]
        for items in data.loc[i,:].iteritems():
            l.append(items[1])
        for j in range(len(l)):
            x=l[j]
            y=l[-1]
            total_cost += (1/tot)*((y - m[j]*x - m[-1])**2)
    return total_cost

def sg(data,lr,m):
    m1=np.zeros(len(data.columns))
    tot=len(data)
    width=len(data.columns)
    for i in range(len(data)):
        l=[]
        for items in data.loc[i,:].iteritems():
            l.append(items[1])
        for j in range(len(l)):
            x=l[j]
            y=l[-1]
            m1[j]+=(-2/tot)* (y - m[j] * x - m[-1])*x
    new_m=m-lr*m1
    return new_m

def gd(data,lr,itr):
    m=np.zeros(len(data.columns))
    m[-1]=1
    for i in range(itr):
        m=sg(data,lr,m)
        print(i, " Cost: ", cost(m,data))
    return m

def run():
    df=pd.read_csv("fish.csv")
    cols = list(df.columns)
    a, b = cols.index('Weight'), cols.index('Width')
    cols[b], cols[a] = cols[a], cols[b]
    df = df[cols]
    encode=LabelEncoder()
    df.iloc[:,0]=encode.fit_transform(df.iloc[:,0])
    lr=0.0001
    itr=50
    m=gd(df,lr,itr)
    print(m)
...