线性回归数学方式

问题描述 投票:0回答:0

我尝试以数学方式在 python 中实现线性回归,以找出员工几年后的薪水,但我不知道我做错了什么。我有以下信息: 线性回归意味着拟合一条最接近点的线:ℎ(𝑋)=𝑋𝑤𝑇 其中 T 是转置。 这里真正的未知数是参数𝑤。线性回归问题的最简单解由以下正规方程给出:𝑤𝑇=(𝑋𝑇𝑋)^−1𝑋𝑇𝑌 其中 (𝑋𝑇𝑋)^−1𝑋𝑇 是 Moore-Penrose 伪逆。 代价函数由RMS误差给出:𝐽(𝑤)=12𝑛∑𝑛𝑖=1(ℎ(𝑥(𝑖))−𝑦(𝑖))2 偏差 𝑏 也需要包括在内。可以做的一个技巧是将一列 1 附加到数据集 X: 现在一切就绪。让我们找到线性回归问题的解决方案并打印成本函数:

这是我的代码,我不知道我做错了什么。

import numpy as np
from numpy import genfromtxt
import matplotlib.pyplot as plt

dataset=np.genfromtxt('salary.csv',delimiter=",")
X = dataset[1:len(dataset), 0].reshape(-1,1)
Y = dataset[1:len(dataset), 1]
print(X)
print(Y)
plt.plot(X,Y,'o')
plt.xlabel("Ani de experienta")
plt.ylabel("Salariu")
plt.title("Grafic salariu")
plt.show()
def weights(x,y):
    pseudo=np.linalg.pinv(x)
    wT=np.matmul(pseudo,y)
    return wT
def h(x,y):
    return np.matmul(x,weights(x,y))
def cost(x,y):
    s=0
    for i in range(1,len(dataset)-1):
        s=s+((h(x,y)[i]-y[i])**2)
    
    cost=s*(1/(2*len(dataset)-1))
    return cost

bias=np.ones((X.shape[0],1))
x_norm_bias=np.hstack((bias,X))
print(x_norm_bias)
print(cost(x_norm_bias,Y))
print(h(x_norm_bias,Y))
print(weights(x_norm_bias,Y))
plt.plot(X,Y)
plt.xlabel("Ani de experienta")
plt.ylabel("Salariu")
plt.title("Grafic salariu")
plt.plot(h(x_norm_bias,Y))
plt.show()
python numpy linear-regression
© www.soinside.com 2019 - 2024. All rights reserved.