线性回归
线性回归通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。
线性回归公式算法
假设:h(x)=w0x0+w1x1+w2x2+w3x3=w^T*x
求:w0,w1,w2,w3,即权重向量w
代价函数:J(w)=∑(h(xi)-yi)²
优化目标:argmin∑J(w)=argmin∑(h(xi)-yi)²
线性回归实现代码(最小二乘法)
import numpy as np
import matplotlib.pyplot as plt
def pricedata (x,y):
n = len (x)
dinominator = 0
numerator = 0
**for i in range (0,n):
numerator += (x[i] - np.mean(x)) * (y[i] - np.mean(y))
dinominator += (x[i] - np.mean(x))**2
b1 = numerator / float(dinominator)
b0 = np.mean(y) / float(np.mean(x)) ##最小二乘法公式与使用
return b0,b1**
x = np.random.randint (2,6,5) #数据利用 numpy 库中的random.randit 随机生成
y = np.random.randint (100,200,5) #x与y的数据结果每次都不一样
def work (x,b0,b1):
return b0+x*b1
b0, b1 = pricedata(x,y)
print ("intercept:",b0,"slope:",b1)
plt.figure(figsize=(8,6))
plt.scatter(x,y,color="green",label="样本数据",linewidth=2)
y=b1*x+b0
plt.plot(x,y,color="red",label="拟合直线",linewidth=2)
plt.legend(loc='lower right')
plt.show()
![某次数据生成后利用数据所绘制](https://img-blog.csdnimg.cn/2019033020442280.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDc5MzAwMA==,size_16,color_FFFFFF,t_70)