关于#python#的问题:python多项式回归

最后运行的时候,报错说缺少一个必要参数“y”,这个报错问题该怎么解决

img

img

fit函数需要传入的是二维矩阵数据,X_train,Y_train数据类型不对吧

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7781184
  • 这篇博客你也可以参考下:【Python机器学习及实践】进阶篇:模型实用技巧(模型检验与超参数搜索)
  • 除此之外, 这篇博客: Python数据分析第十课:绘制双Y轴和改变坐标轴默认显示方式中的 一、绘制双Y轴坐标系 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在进行数据分析时,有时候我们需要在同一个坐标图中比较两种数据在时间序列上的关系。

    由于两种数据的单位和数据并不统一,也是不同的类型的数据,因此我们不能用一个Y轴来共同衡量两类不同的数据,这时候我们就需要绘制双Y轴图。

    %matplotlib inline
    import matplotlib.pyplot as plt
    import pandas as pd
    
    # 设置全局字体
    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
    datas = pd.read_excel(r'C:\Users\lin-a\Desktop\data\600001SH.xlsx')
    # 将日期转换为时间戳,并设置为行索引
    datas.index=pd.to_datetime(datas['日期'])
    # 获取二月份的数据
    feb_datas = datas['2015-02']
    
    # 绘制图形
    fig = plt.figure(figsize=(20,8),dpi=80)
    ax = fig.add_subplot(111)
    x = feb_datas.index.tolist()
    # 将时间转换为字符串
    x2 = [time.strftime('%Y-%m-%d') for time in x]
    lin1 = ax.plot(x2,feb_datas['收盘价(元)'].values.tolist(),label='收盘价',color='red')
    ax.legend(loc='upper left')
    ax.set_ylabel("收盘价(元)")
    ax.set_xlabel("日期")
    plt.show()
    

    在这里插入图片描述

    以上的代码中:有add_subplot(),这个与plot()有什么异同呢?

    • plot是绘图,subplot是子图,整体不偏离这个框架。

    • fig.add_subplot(111)
      此处,fig= plt.figure()是一个对象。

      其中参数111,指的是将图像分成1行1列,此子图占据从左到右从上到下的1位置。

    • plt.subplot(234)
      将画布分成2行3列,取从左到右,从上到下第4个位置。

    两者本质是一样的,不同在于add_subplot是面向对象,subplot是面向函数

    我们的目的是研究二月份某公司的每日收盘价以及对应的成交量,所以为方便分析,需要在一个双Y轴坐标图中同时绘制出收盘价和成交量的时间序列图。

    双y轴绘制的关键函数是twinx(),twinx()函数表示共享X轴,共享表示的是X轴使用同一刻度线。

    每日收盘价的折线图,我们已经绘制出来了,现在要使用twinx()绘制另外一条成交量折线图:

    %matplotlib inline
    from matplotlib import pyplot as plt
    import pandas as pd
    
    # 设置全局字体
    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
    
    # 导入数据
    data = pd.read_excel(r'C:\Users\lin-a\Desktop\data\600001SH.xlsx')
    # 查看数据的基本特征
    print(data.shape)
    
    # 将日期设置为数据的索引,便于使用日期选择数据
    data.index = data['日期']
    # 获取2月的数据
    feb_data = data['2015-02']
    
    # 获取x,y轴的数据
    y = feb_data['收盘价(元)'].values.tolist()
    y2 = feb_data['成交量(股)'].values.tolist()
    x = feb_data.index.strftime('%Y-%m-%d').tolist()
    
    # 设置画布大小
    fig = plt.figure(figsize=(20,8),dpi=80)
    # 设置ax对象
    ax = fig.add_subplot(111)
    ax2 = ax.twinx()
    # 设置标题
    plt.title('收盘价与成交量双曲线图')
    
    # 设置第一条——收盘价曲线
    line1 = ax.plot(x,y,label='收盘价',color='red') 
    ax.set_xlabel('日期')
    ax.set_ylabel('收盘价(元)')
    #设置图例
    ax.legend(loc='upper left')
    
    # 设置第二条——成交量曲线
    line2 = ax2.plot(x,y2,label='成交量')
    ax2.set_ylabel('成交量(股)')
    # 设置图例
    ax2.legend(loc='upper left')
    
    # 绘制网格
    ax.grid(linestyle='--',alpha=0.5)
    plt.show()
    
    (105, 13)
    

    在这里插入图片描述

    因为是共享X轴,所以只用ax.set_xlabel()就可以设置X轴的标题。

    由于Y轴不共享,所以每一个坐标系的Y轴标题都要使用set_xlabel()方法设置一次。

    代码中,我们设置了两次图例的显示,所以出现了两个图例重叠的现象,所以我们需要合并图例。合并图例的方法就是仅使用一个轴的legend()函数。

    %matplotlib inline
    from matplotlib import pyplot as plt
    import pandas as pd
    
    # 设置全局字体
    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
    
    # 导入数据
    data = pd.read_excel(r'C:\Users\lin-a\Desktop\data\600001SH.xlsx')
    # 查看数据的基本特征
    print(data.shape)
    
    # 将日期设置为数据的索引,便于使用日期选择数据
    data.index = data['日期']
    # 获取2月的数据
    feb_data = data['2015-02']
    
    # 获取x,y轴的数据
    y = feb_data['收盘价(元)'].values.tolist()
    y2 = feb_data['成交量(股)'].values.tolist()
    x = feb_data.index.strftime('%Y-%m-%d').tolist()
    
    # 设置画布大小
    fig = plt.figure(figsize=(20,8),dpi=80)
    # 设置ax对象
    ax = fig.add_subplot(111)
    ax2 = ax.twinx()
    # 设置标题
    plt.title('收盘价与成交量双曲线图')
    
    # 设置第一条——收盘价曲线
    line1 = ax.plot(x,y,label='收盘价',color='red') 
    ax.set_xlabel('日期')
    ax.set_ylabel('收盘价(元)')
    #设置图例
    # ax.legend()
    
    # 设置第二条——成交量曲线
    line2 = ax2.plot(x,y2,label='成交量')
    ax2.set_ylabel('成交量(股)')
    # 设置图例
    # ax2.legend()
    
    # 合并图例
    lns = line1+line2
    labs = [l.get_label() for l in lns]
    ax.legend(lns,labs,loc='upper left')
    
    # 绘制网格
    ax.grid(linestyle='--',alpha=0.5)
    plt.show()
    
    (105, 13)
    

    在这里插入图片描述

    以上新增的代码为:

    # 合并图例
    lns = line1+line2
    labs = [l.get_label() for l in lns]
    ax.legend(lns,labs,loc='upper left')
    
    • line1和line2分别是两个绘图方法plot()的返回值,即折线对象。需要注意的是,lin1和lin2的类型是list。

    • legend()方法可以指定图例中有哪些值,第一个参数lns表示将图中的多个线以列表的形势传进去,第二个参数labs表示将图例的名字以列表的形势传进去。

  • 您还可以看一下 CSDN就业班老师的Python爬虫技术和浏览器模拟,验证码识别视频教程课程中的 网络爬虫实战小节, 巩固相关知识点