Меня попросили построить модель вида y = a1f1 (x) + a2f2 (x) + a3f3 (x), где функции - квадрат root, log и куб root. Я должен сгенерировать свои собственные данные для x и y, а затем отправить их в мою функцию подбора, чтобы вычислить коэффициенты. Когда я пытаюсь построить вывод, я получаю странный график. Может кто-нибудь объяснить, где я go ошибся? (Ниже мой код):
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import metrics
import numpy as np
import math
import random
n=10
class myMultipleLinearRegression:
def processData(self,x):
#the functions are x^0.5 , log , x^0.33
temp=[]
val=0
processedx=[]
for i in range(len(x)):
temp.append(1)
for j in range(3):
if(j==0):
val=math.pow(x[i],0.5)
elif j==1:
val=math.log(x[i])
else:
val=math.pow(x[i],0.33)
temp.append(val)
processedx.append(temp)
temp=[]
return processedx
def __init_(self):
self.coef_=[]
self.intercept_=0
def fit(self,x,y):
self.intercept_=np.linalg.inv(x.T.dot(x)).dot(x.T).dot(y)[0]
self.coef_=(np.linalg.inv(x.T.dot(x)).dot(x.T).dot(y))[1:]
coef_=[]
for i in range(len(self.coef_)):
coef_.append(self.coef_[i])
self.coef_=coef_
return self
def predict(self,x):
sum=0
predictedy=[]
for i in range(len(x)):
for j in range(len(x[0])-1):
sum+=self.coef_[j]*x[i][j]
predictedy.append(sum+self.intercept_)
sum=0
return predictedy
def getXandY(self,x,y):
x=self.processData(x)
newy=[]
for i in range(len(y)):
newy.append([y[i]])
return np.array(x),np.array(newy)
x=[]
y=[]
for i in range(20):
x.append(random.randint(1,10))
y.append(random.randint(1,10))
gx,gy=myMultipleLinearRegression().getXandY(x,y)
ny=(myMultipleLinearRegression().fit(gx,gy).predict(gx))
plt.scatter(x,y,color='r')
plt.plot(sorted(x),ny)
plt.show()
Это мой вывод:
Вот мой вывод графика
Может кто-нибудь объяснить, где я идет не так?