我尝试以数学方式在 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()