невозможно преобразовать тип 'ndarray' в числитель / знаменатель - PullRequest
0 голосов
/ 04 ноября 2019

Вот класс, который я создал для реализации linear_regression

from statistics import mean

import numpy as np 

xs = np.array([1,2,3],dtype = float)

ys = np.array([2,5,6],dtype = float)

class Linear_Regression():        # Our own linear regression Model

  def __init__(self):
     print("The model is ready for use")


  def best_fit_slope_intercept(self,xs,ys):                    # for finding best fit slope(m) and intercept(c)
     self.m = ( ( mean(xs) * mean(ys) -mean(xs*ys)  ) / ( pow(mean(xs),2) - mean(pow(xs,2)) ) )   # For slope (m)
     self.c = mean(ys) - self.m * mean(xs)                                                             # For y-intercept(c)                        

  def fit(self,xs,ys):

     self.best_fit_slope_intercept(xs,ys) 
     self.regression_line = [((self.m)*x)+ (self.c) for x in xs]
     print("Model fitting completed")
     return self.regression_line                             # Returns the fitted values (ys_line) for each input (xs) 

  def squared_error(self,ys_orig, ys_line):                   # Calculates the mean squared error between y_orig and y_line
     return sum((ys_line-ys_orig)**2)                        # N.B.  ys_orig = ys , ys_line = self.regression_line


  def score(self,ys_orig,ys_line):
     y_mean_line = [mean(ys_orig) for y in ys_orig]
     sqr_err_reg = self.squared_error(ys_orig, ys_line)
     sqr_err_y_mean = self.squared_error(ys_orig, y_mean_line)
     return 1- (sqr_err_reg / sqr_err_y_mean )

  def predict(self,x_testing):
     s = self.m *(x_testing) + self.c
     return s 

regr = Linear_Regression()

regr.best_fit_slope_intercept(xs,ys)

После выполнения этого кода я получил эту ошибку:

TypeError: can't convert type 'ndarray' to numerator/denominator

Хотя если я сделаю эти функции вне класса,код работает хорошо. Я не могу понять проблему !!!

1 Ответ

0 голосов
/ 04 ноября 2019

Я обнаружил некоторые ошибки в вашем коде, правильный тип - float:

xs = np.array([1,2,3],dtype = float)    

ys = np.array([2,5,6],dtype = float)     

Вы забыли поставить себя здесь:

self.c = mean(ys) - self.m * mean(xs)       
...