#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(не делайте скорость обучения слишком маленькой), теперь она должна сходиться.