博主研究机器学习有一段时间了,西瓜书也买了,感觉对这些专业术语还了解的不是很深入,所以趁着十月一假期,大家都在放松的时候,顺便赶超他们一下。今天就敲敲代码,实战一下。
首先我们先敲一个一元线性回归
一元线性回归涉及到最小二乘法和一元线性回归的优化问题。
代码如下:
import numpy as np
import matplotlib pyplot as plt
data = np.genfromtxt("data.csv",delimiter=",")
x_data = data[;,0]
y_data = data[;,1]
plt.scatter(x_data,y_data)
plt.show()
#学习率
lr=0.0001
#截距
b=0
#斜率
k=0
#最大迭代次数
epochs=50
#最小二乘法
def compute_error(b,k,x_data,y_data):
totalError = 0
for i in range(0,len(x_data)):
totalError+=(y_data[i]-(k*x_data[i]+b))**2
return totalError/float(len(x_data))
def gradient_descent_runner(x_data,y_data,b,k,lr,epochs):
#计算总数据量
m=float(len(x_data))
for i in range(epochs)
b_grad = 0
k_grad = 0
#计算梯度总和再求平均
for j in range(0,len(x_data))
b_grad+=-(1/m)*(y_data[j]-(k*x_data[j])+b)
k_grad+=(1/m)*x_data[j]*(((k*x_data[j])+b)-y_data[j])
#更新b、k
b=b-(lr*b_grad)
k=k-(lr*k_grad)
return b,k
print("starting b={0},k={1},error={2}".format(b,k,compute_error(b,k,x_data,y_data)))
print("running....")
print("after {0} iteration b={1},k={2},error={3}".format(epochs,b,k,compute_error(b,k,x_data,y_data)))
plt.plot(x_data,y_data,"b")
plt.plot(x_data,k*x_data+b,'r')
plt.show()
转载:https://blog.csdn.net/qq_36444039/article/details/102078788
查看评论