线性回归

线性回归知识(参考链接)

 

 

 

 正规方程推导过程

代码实现

  matlab

x(1:10,1) = [-0.5,-0.45,-0.35,-0.35,-0.1,0,0.2,0.25,0.3,0.5];
x(1:10,2) = 1;
y = [-0.2,0.1,-1.25,-1.2,0,0.5,-0.1,0.2,0.5,1.2];
y = transpose(y);
figure;
hold on
scatter(x(:,1),y,'r','filled');
axis([-1.0,1.0,-3.0,3.0])
%求权重
x_T = transpose(x);
w = inv(x_T*x)*x_T*y;
hat_y = x*w;
disp('权重'); disp(w);
x1 = linspace(-1,1,50);
hat_y = x1*w(1)+w(2);
plot(x1,hat_y,'g');
axis([-1.0,1.0,-3,3]);
title('线性回归')
xlabel('x')
ylabel('y')

 

 

 

 Python

 1 import numpy as np
 2 import math
 3 import matplotlib.pyplot as plt
 4  X = np.hstack((np.array([[-0.5,-0.45,-0.35,-0.35,-0.1,0,0.2,0.25,0.3,0.5]]).reshape(-1, 1), np.ones((10,1))*1))
 5 y = np.array([-0.2,0.1,-1.25,-1.2,0,0.5,-0.1,0.2,0.5,1.2]).reshape(-1,1)
 6 # 用公式求权重
 7 w = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
 8 hat_y = X.dot(w)
 9 print("Weight:{}".format{list(w)})
10 x = np.linspace(-1, 1, 50)
11 hat_y = x * w[0] + w[1]
12 plt.figure(figsize=(4,4))
13 plt.xlim(-1.0, 1.0)
14 plt.xticks(np.linspace(-1.0, 1.0, 5))
15 plt.ylim(-3, 3)
16 plt.plot(x, hat_y, color='red')
17 plt.scatter(X[:,0], y[:,0], color='black')
18 plt.xlabel('$x_1$')
19 plt.ylabel('$y$')
20 plt.title('$Linear Regression$')
21 plt.show()

 

 

posted @ 2020-06-06 22:59  蛮好不太坏  阅读(169)  评论(0编辑  收藏  举报