Я пытаюсь создать алгоритм регрессии logisti c, но сигмоидальная кривая не соответствует набору данных должным образом, и код также выдает мне эти две строки ошибок после нескольких итераций.
RuntimeWarning: разделить на ноль, обнаруженное в журнале cost [i] = -y [i] * np.log (pridicted_y) - (1-y [i]) * np.log (1-pridicted_y)
RuntimeWarning: обнаружено недопустимое значение в double_scalars cost [i] = -y [i] * np.log (pridicted_y) - (1-y [i]) * np.log (1-pridicted_y)
Вот мой общий код
import pandas as pd;
import matplotlib.pyplot as plt
import numpy as np
import random
def line(m,b):
x = np.arange(-10,10)
y = np.zeros(len(x))
for i in range(len(x)):
y[i] = 1/(1+np.exp(-(m*x[i]+b)))
plt.plot(x,y,alpha=0.3)
def LogCost(m,b,xpoints,ypoints,flag):
cost = np.zeros(len(xpoints))
Totalcost = 0
pridicted_y = 0
for i in range(len(xpoints)):
if flag==0:
pridicted_y = 1/(1+np.exp(-(m*x[i]+b)))
cost[i] = -y[i]*np.log(pridicted_y) - (1-y[i])*np.log(1-pridicted_y)
else:
pridicted_y = 1/(1+np.exp(-(m*x[i]+b)*x[i]))
cost[i] = -y[i]*np.log(pridicted_y) - (1-y[i])*np.log(1-pridicted_y)
Totalcost = Totalcost + cost[i]
# plt.plot([xpoints[i],xpoints[i]],[pridicted_y,ypoints[i]],alpha=0.2)
return Totalcost
def gradientDescent(m,b,xpoints,ypoints,alpha):
M=m
B=b
n = len(xpoints)
for i in range(2000):
M = m - alpha*(1/n)*LogCost(m,b,xpoints,ypoints,0)
B = m - alpha*(1/n)*LogCost(m,b,xpoints,ypoints,1)
m = M
b = B
line(m,b)
return(m,b)
x = np.arange(-10,10)
y = np.zeros(len(x))
m = 0
b = 0
alpha = 0.01
y = [0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1]
plt.plot(x,y,"ro")
m,b = gradientDescent(m,b,x,y,alpha)
line(m,b)
plt.show()
Вот итоговое изображение
введите описание изображения здесь
Любая помощь будет принята с благодарностью и заранее благодарим.