Предупреждение во время выполнения: разделите на ноль, обнаруженное в журнале при выполнении Logisti c Regression - PullRequest
1 голос
/ 21 июня 2020

Я пытаюсь создать алгоритм регрессии 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()

Вот итоговое изображение

введите описание изображения здесь

Любая помощь будет принята с благодарностью и заранее благодарим.

...