zoukankan      html  css  js  c++  java
  • 【线性回归算法】小案例之确诊病例数据预测(只用于理解预测算法理解)

    import pandas as pd   # 用来读取数据的一个包. 
    from sklearn.linear_model import LinearRegression  # 机器学习的包  用来做线性回归的-> 用咱们的数据帮我们求出一个函数
    from sklearn.preprocessing import  PolynomialFeatures  # 机器学习的包 ..... 高次幂
    import matplotlib.pyplot as plt  # 数据可视化-> 用来画图的
    import numpy as np        # 做矩阵. 
    
    
    data = pd.read_csv("data.csv", header=None)  # 读取数据
    data["time"] = pd.to_datetime(data[0])   # 排序处理
    print(data.head())
              0         1     2          time
    0  2020-1-31  2102  5019 2020-01-31
    1  2020-1-25   688  1309 2020-01-25
    2  2020-1-24   444  1118 2020-01-24
    3  2020-1-30  1982  4812 2020-01-30
    4  2020-1-26   769  3806 2020-01-26
    
    # 索引改成时间
    data.index = data["time"]
    data = data.sort_index()
    print(data.head())
                                      0    1     2       time
    time                                       
    2020-01-20  2020-1-20   77    27 2020-01-20
    2020-01-21  2020-1-21  149    26 2020-01-21
    2020-01-22  2020-1-22  571   393 2020-01-22
    2020-01-23  2020-1-23  259   680 2020-01-23
    2020-01-24  2020-1-24  444  1118 2020-01-24
    
    
    # 计算每天的确诊的总数量
    totle = data[1].cumsum()  # 获取到确诊病例. 然后进行累积计算 前1, 2,3,4,5,项累加
    print(totle)
    time
    2020-01-20       77
    2020-01-21      226
    2020-01-22      797
    2020-01-23     1056
    2020-01-24     1500
    2020-01-25     2188
    2020-01-26     2957
    2020-01-27     4728
    2020-01-28     6187
    2020-01-29     7924
           。              。
           。              。
           。              。
    
    
    # x轴是数字 使用时间不好使用机器学习的包
    totle = totle.reset_index()[1]   #  去掉时间, 把时间转化成数字. 方便计算, 2020-1-20
    totle.index = totle.index + 1
    print(totle)
    1        77
    2       226
    3       797
    4      1056
    5      1500
    6      2188
    7      2957
    
    
    plt.scatter(totle.index, totle)   # 画散点图. 展示一下目前确诊病例数量
    plt.show()
    
    1:线性回归线:

    # 一元一次线性回归
    liner_reg = LinearRegression() # 创建线性回归对象

    x_data = totle.index[:, np.newaxis]    # 增加维度, 拿到x

    y_data = totle[:, np.newaxis]              # 增加维度, 拿到y

    liner_reg.fit(x_data, y_data) # 数据训练

    plt.scatter(x_data, y_data) # 画点
    plt.plot(x_data, liner_reg.predict(x_data), "red") # 画回归线. 预测线, liner_reg.predict(x_data) 把x_data的值扔进去. 得到回归线上的y值

    plt.show() # 展示数据

    # 斜率 截距
    # k b
    # y = kx + b
    # liner_reg.coef_, liner_reg.intercept_

    2:线性回归的预测曲线:

    # 区别于 以下两步是为了求出高幂次方程的x的固定值,比如方差,平均值等, 求出后的x_data_poly 抛到预测fit里面训练,最后画图直接扔liner_reg.predict(x_data_poly)即可

     poly = PolynomialFeatures(3) # 计算N幂次的公式 # degree=4   ax2+bx+c   ax3+bx2+cx1+dx0  升幂 1元二次方程 # 1.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00  0次方  1次方  2次方 3次方

     x_data_poly = poly.fit_transform(x_data) # 1 0. 2 1.4 2. 8 3.

    liner_reg = LinearRegression() # 线性回归对象
    liner_reg.fit(x_data_poly, y_data) # 数据训练
    # x0, x1, x2, x3, y???
    # dx0+cx1+bx2+ax3 = y

     plt.plot(x_data, liner_reg.predict(x_data_poly), "r") # 画图

    # 预测值
    plt.scatter(np.arange(1,50), liner_reg.predict([[i**0, i**1, i**2, i**3] for i in np.arange(1,50)])) # 几次幂就填几个i**n

    plt.show()

    
    

     PS总结思路:创建训练数据与测试数据,使用sklearn的linear_model包进行对数据训练,会得到一个对应的算法公式,对于公式进行传入自变量x,就会得到一个因变量y,接着绘制图即可

    
    
    

  • 相关阅读:
    python模拟android屏幕高频点击工具
    android adb shell and monkey 学习记录
    appium+python环境搭建
    python监控接口请求
    JetBrains Pycharm 破解+汉化
    loadrunner调用jar包方法
    python抢小米6自动化脚本
    CDlinux制作U盘启动盘,打造自己的口袋系统
    无线渗透测试之wifi密码破解
    测试-test1
  • 原文地址:https://www.cnblogs.com/wanghong1994/p/13411968.html
Copyright © 2011-2022 走看看