线性回归(python实现)

数据集:

\[D=\lbrace (x_1,y_1),(x_2,y_2),...,(x_m,y_m)\rbrace \]

其中:

\[x_i = (x_{i1};x_{i2};...;x_{id}) \]

单属性,二分类

分类面:

\[f(x)= \omega x + b \]

最小均方差求\(\omega \, b\)

\[min \sum_{i=1}^m (f(x_i)-y_i)^2 \]

解得:

\[\omega = \frac{\sum_{i=1}^m y_i(x_i- \hat x)}{\sum_{i=1}^m x^2 - \frac 1m \sum_{i=1}^m(x_i)^2} \]

\[b= \frac 1m \sum_{i=1}^m(y_i - \omega x_i) \]

python程序

import numpy as np 
import matplotlib.pyplot as plt 
N = 50
X = np.random.rand(N)
Y = np.random.rand(N)
#print(X)
plt.scatter(X, Y, alpha=0.6)#散点图绘制

#求omiga
xg = 0.0 #x均值
xf = 0.0 #x平方
for i in X:
    xg += i
    xf += i**2
xg /= N
omiga_m = 0.0
for i in range(N):
    omiga_m += Y[i]*(X[i] - xg)
omiga_d = xf - (N*xg)**2/N
omiga = omiga_m/omiga_d

#求偏移b
b_temp = 0.0
for i in range(N):
    b_temp += Y[i] - omiga*X[i]
b = b_temp/N

x_linear = np.linspace(0, 1, num=50)
y_linear = [omiga*i + b for i in x_linear]
plt.plot(x_linear, y_linear, color = 'red')

plt.show()

效果

猜你喜欢

转载自www.cnblogs.com/liudianfengmang/p/12785094.html