Множественная линейная регрессия для прогнозирования набора данных недвижимости

#python #machine-learning #linear-regression

Вопрос:

Я изучил линейную регрессию, поэтому решил проверить ее на этом наборе данных по недвижимости https://archive.ics.uci.edu/ml/datasets/Real недвижимость оценка данные набор

Я использую градиентный спуск для вычисления своих весов, но они не сходятся к оптимальному. Если я установлю скорость обучения на 0,01 и итерации, равные 100, я получу значения nan и inf, а если я установлю скорость обучения примерно на 0,0001, она не будет сходиться, или я получу значения nan и inf.

 import openpyxl
from pathlib import Path
import numpy as np

file = Path(r'C:UsersCataDesktop', 'lini.xlsx')
file = openpyxl.load_workbook(file)

fila = file.active

def Loss(x, w, y):
    pred = np.dot(x, w)
    m = len(y)
    return 1/(2*m) * np.sum(np.square(pred - y))

def dLoss(x, w, y):
    pred = np.dot(x, w)
    m = len(y)
    return  1/m * np.dot(np.transpose(x), (pred - y))

def Gradient(x, y ,learning = 0.000001, iterations = 1000):
    w = np.random.rand(7)
    m = len(y)

    for i in range(iterations):
        w = w - learning*dLoss(x,w,y)

    return w

x = []
y = []

for row in fila.iter_rows(min_row=2,max_row=400):
    acm = []
    acm.append(1)
    for i in range(1, 7):
        acm.append(float(row[i].value))
        #print(row[i].value, end=" ")
    x.append(acm)
    y.append(float(row[7].value))

y = np.array(y)

sa = Gradient(x,y)
print(sa)
test = [1, 2013.500, 6.5,   90.45606,   9,  24.97433,   121.5431]
print(test)
print(np.dot(test, sa))
 

Также я получаю эту ошибку

 RuntimeWarning: invalid value encountered in subtract
  w = w - learning*dLoss(x,w,y)
 

Ответ №1:

вот что вы можете сделать , прежде всего, ваша формула для обновления веса неверна. попробуйте

 w = w   learning*dLoss(x,w,y)
 

и примите скорость обучения за 0,01 или 0,001(не делайте скорость обучения слишком маленькой), теперь она должна сходиться.