множественная линейная регрессия собственная модель в python - PullRequest
0 голосов
/ 07 апреля 2020

Меня попросили построить модель вида 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()

Это мой вывод:

Вот мой вывод графика

Может кто-нибудь объяснить, где я идет не так?

...