浏览 634

'NoneType' object has no attribute 'pyplot_show'应该如何解决(语言-python)

#读取文件
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',想用梯度下降算法来实现线性回归,现在运行之后报错,图只有点没有线

img


img

0

  • 编辑 收藏 删除 结题
  • 追加酬金 (90%的用户在追加酬金后获得了解决方案)

    当前问题酬金

    ¥ 0 (可追加 ¥500)

    支付方式

    扫码支付

    加载中...

    提供问题酬金的用户不参与问题酬金结算和分配

    支付即为同意 《付费问题酬金结算规则》

    1 条回答 默认 最新

    • 爱晚乏客游 2023-05-12 11:02
      关注

      你这报错在哪里都不知道,报错截图就截取完整,或者详细告知是哪一行那句代码报错,你贴出来的代码跟你报错好像也没啥相关联的
      报错的意思是你某个东西是空的,但是你想XXX.pyplot_show()就报错了,看你代码里面也没有哪里调用这个pyplot_show啊

      本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?
    评论
    按下Enter换行,Ctrl+Enter发表内容