「已注销」 2021-06-28 10:33 采纳率: 85.7%
浏览 61
已采纳

python编程 线性回归

把以下数据制作成csv数据文件,并命名为LR_data_exam.csv。 
对该文件内的数据进行线性回归
画出数据的散点图
建立线性回归模型并拟合
打印拟合结果(参数) 
画出数据和拟合直线的图
用model.predict预测x为10,20,30时的结果
用拟合参数预测x为40,50,60时的结果
   battery,KM
   2,12
   5,31
   8,45
   8,52
   13,79
   15,85
   17,115
   19,119
   21,135
   24,145

  • 写回答

1条回答 默认 最新

  • CSDN专家-kaily 2021-06-28 14:24
    关注
    import numpy as np
    import csv
    import pandas as pd
    import matplotlib.pyplot as plt
    from sklearn.linear_model import LinearRegression
    import matplotlib
    matplotlib.rcParams['font.sans-serif'] = ['SimHei']
    matplotlib.rcParams['font.family']=['sans-serif']
    
    data = '''battery,KM
       2,12
       5,31
       8,45
       8,52
       13,79
       15,85
       17,115
       19,119
       21,135
       24,145'''.split('\n')
    for i,j in enumerate(data):
        data[i] = j.replace(' ', '').split(',')
    
    with  open('LR_data_exam.csv','w') as csvFile: #一行一行地写入到csv文件中
        writer = csv.writer(csvFile)
        #先写columns_name
        writer.writerow(data[0])
        #写入多行用writerows
        writer.writerows(data[1:])

     LR_data_exam.csv:

    dataframe = pd.read_csv("LR_data_exam.csv", sep=",")
    x = dataframe['battery'].tolist()
    y = dataframe['KM'].tolist()
    
    # 画出数据的散点图
    fig = plt.figure()
    fig.set_size_inches(10, 4)   # 整个绘图区域的宽度10和高度4
    ax = fig.add_subplot(1, 2, 1)  # 整个绘图区分成一行两列,当前图是第一个。
    # 画出原始数据的散点图。
    ax.set_title("散点图")
    ax.set_xlabel("battery")
    ax.set_ylabel("KM")
    ax.scatter(x, y)
    plt.show()

    regressor = LinearRegression()
    regressor = regressor.fit(np.reshape(x,(-1, 1)),np.reshape(y,(-1, 1)))
    print(regressor.coef_, regressor.intercept_)  # 打印拟合结果(参数)
    [[6.28763667]] [-1.19680404]
    # 画出数据和拟合直线的图
    plt.scatter(x, y)
    plt.plot(np.reshape(x,(-1,1)), regressor.predict(np.reshape(x,(-1,1))))
    plt.xlabel("battery") 
    plt.ylabel("KM") 
    plt.title("拟合结果")
    plt.show()

    print(regressor.predict([[10], [20], [30]]))  # model.predict预测x为10,20,30时的结果
    for i in [40,50,60]:
        print(regressor.coef_*i + regressor.intercept_)   #用拟合参数预测x为40,50,60时的结果
    [[ 61.67956266]
     [124.55592935]
     [187.43229605]]
    [[250.30866274]]
    [[313.18502944]]
    [[376.06139613]]
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题