Проблема в реализации логистической регрессии
Я попробовал реализовать алгоритм предсказания на основе логистической регрессии, но начиная с 4 эпохи, выводится nan. В консоли пишет:
RuntimeWarning: invalid value encountered in log PX = np.log(X.dot(p))
Подскажите пожалуйста в чем проблема моей реализации?
Ссылка на методичку откуда на основе которой я писал код.
Сам код:
import numpy as np
from numpy.core.fromnumeric import reshape
from numpy.ma.core import power
import pandas as pd
df = pd.read_excel("БД Титаник.xlsx")
data = df.to_numpy()[2:]
for x in data:
x[x.size - 1] = float(x[x.size - 1])
X = data.copy().astype(float)
X[:,0] = 1
Y = (data[:, :1].T)[0].astype(float)
p = np.zeros(7)
p[0] = np.average(Y)
nt = 0.01
def power_sigmoid(PX, Y):
return np.power(1/(1 + np.exp(PX)), Y)
epoch = 1000
current_epoch = 1
while(current_epoch < epoch):
PX = np.log(X.dot(p))
print(X.dot(p)[0])
lp = np.sum(np.log(power_sigmoid(-PX, Y) * power_sigmoid(PX, 1 - Y)))
deltal0 = np.sum((Y - power_sigmoid(-PX, 1)).reshape(-1, 1) * X)
#print(current_epoch, deltal0)
p = p + nt * deltal0
current_epoch += 1
#Для теста прогоняю первые 10 строк и вывожу предикт
for i in range(10):
x = X[i]
px = x.dot(p)
y = 1 / (1 + np.exp(-px))
print(y)