#读取文件
from numpy import *
file = open("D:\pycharm\pythontd\data.txt")
lines = file.readlines()#逐行读取数据,加入到列表中
m = len(lines)#获得数据数量
#处理数据集
X_data = []
Y_data = []
for i in range(m):
str = lines[i]
str1 = str.split(',', 1)
ap_x = float(str1[0])
ap_y = float(str1[1])
X_data.append(ap_x)
Y_data.append(ap_y)
# x的坐标以及对应的矩阵
X_data = array(X_data).reshape(m, 1)
X_1 = ones((m, 1))
#reshape作用,改成一个矩阵
X = hstack((X_1, X_data)) #得到一个X轴矩阵
# Y坐标
Y = array(Y_data).reshape(m, 1)
# 学习率
alpha = 0.01
# 代价函数对应的梯度函数,
def gradient_function(theta, X, Y):
diff = dot(X, theta) - Y
return (1/m) * dot(X.transpose(), diff)
# 梯度下降迭代
def gradient_descent(X, Y, alpha):
theta = array([1, 1]).reshape(2, 1)#自定义theta值,
gradient = gradient_function(theta, X, Y)#梯度下降值
while (i<=1500):#迭代次数
i=i+1
theta = theta - alpha * gradient
gradient = gradient_function(theta, X, Y)
return theta
#打印theta值
Theta = gradient_descent(X, Y, alpha)
print('Theta0:', Theta[0],'Theta0:',Theta[1])
# 根据数据画出对应的图像
def plot(X, Y, theta):
import matplotlib.pyplot as plt
ax = plt.subplot(1,1,1)
ax.scatter(X, Y, s=30, c="pink", marker="s")
plt.xlabel("X")
plt.ylabel("Y")
x = arange(5.0, 23) # x的范围
y = theta[0] + theta[1]*x #假设函数
ax.plot(x, y)
plt.show()
plot(X_data, Y, Theta)
最后运行报错,'NoneType' object has no attribute 'pyplot_show',想用梯度下降算法来实现线性回归,现在运行之后报错,图只有点没有线
0 提建议
微信扫一扫 点击复制链接
分享 邀请回答