zoukankan      html  css  js  c++  java
  • 第二十二天学习进度--规律寻找算法之实战(5)

    在几天前对函数的拟合函数进行改良之后,还没用实际的函数来看看具体的效果如何。以房价预测作为一个实战的模拟,来测试函数模拟寻找拟合函数之后对原本数据的预测效果究竟如何。

    实战一:

    这是网上找到的一个房价的数据,链接:https://pan.baidu.com/s/1wvMd6U18IsZ3P-EjbR0sUg 提取码:577w

    数据来源:https://blog.csdn.net/zhuangjinhua/article/details/103820326

    然后我们提取其中的总价、面积、房间、客厅、年份  这几项数据,代入前几天的规律寻找算法中,规律寻找算法有两种,

    一种是根据因变量X来预测Y,另一种是直接根据Y的走势,来预测Y的值

    上述的两种方式在之前的编写过程中均已经实现,所以将数据提取出来之后代入,来看看之前编写之后的成果。

    import pandas as pd
    # 文件的名字
    FILENAME = "./data.xlsx"
    # 禁用科学计数法
    pd.set_option('float_format', lambda x: '%.3f' % x)
    np.set_printoptions(suppress=True, threshold=10000000000)
    # 得到的DataFrame分别为总价、面积、房间、客厅、年份
    data = pd.read_excel(FILENAME, header=0, usecols="A,D,H,I,J")
    # DataFrame转化为array
    DataArray = data.values
    Y = DataArray[:, 0]
    X = DataArray[:, 1:5]
    X = np.array(X)#转化为array,自变量
    Y = np.array(Y)#转化为array,因变量房价
    
    #根据因变量X来预测Y的值
    model=auto_func_biglist(X,Y)
    from matplotlib import pyplot as plt
    print(func_biglist_predict(model,X))
    plt.plot(np.arange(len(X)), func_biglist_predict(model,X),"bs")
    plt.plot(np.arange(len(X)), Y,"r^")
    plt.show()
    
    #Y规律寻找
    info=find_logical(Y)
    print(func_general(info,[info[-1][-1]+1,info[-1][-1]+2,info[-1][-1]+3]))
    show_func(info,1,len(info[-1])+1)
    print(get_func(info))

    看看预测效果如何。

    根据应变量X来预测Y的值的效果如下:

     红色的是实际的值,蓝色的则是预测的值,可以看到,拟合的效果极佳。将对应的数据转换成函数效果进行对比,再次看看效果。

     可以看到曲线拟合程度非常高

    接着看看数列规律寻找算法直接寻找Y的规律,并将Y的走势模拟成为函数的效果。

     绿色的是实际的值,红色的表示的是预测Y的数列走势,可以看到拟合效果同样极佳

    接着,看看数列Y的函数是什么。

     预测的下一个值为:

     参数如图所示。

    实战二:

    数据来源:https://blog.51cto.com/8878683/1612572

    预测以下数列的走势

    [54167,55196,56300,57482,58796,60266,61465,62828,64653,65994,67207,66207,65859,67295,69172,70499,72538,74542,76368,78534,80671,82992,85229,87177,89211, 90859, 92420, 93717, 94974, 96259, 97542, 98705,100072,101654,103008,104357,105851,107507,109300,111026,112704,114333,115823,117171,118517,119850,121121,122389,123626,124761,125786,126743,127627,128453,129227,129988,130756,131448,132129,132802,134480,135030,135770,136460,137510]

    预测数列的下一个值并展示图像

    # 图像展示 610
    info = find_logical([54167,55196,56300,57482,58796,60266,61465,62828,64653,65994,67207,66207,65859,67295,69172,70499,72538,74542,76368,78534,80671,82992,85229,87177,89211, 90859, 92420, 93717, 94974, 96259, 97542, 98705,100072,101654,103008,104357,105851,107507,109300,111026,112704,114333,115823,117171,118517,119850,121121,122389,123626,124761,125786,126743,127627,128453,129227,129988,130756,131448,132129,132802,134480,135030,135770,136460,137510])
    print(func_general(info,[info[-1][-1]+1])) #补全None 和预测下一个值
    show_func(info, 1, len(info[-1])+1)    #展示函数图像
    print(get_func(info)) #匹配曲线公式

     拟合程度极高,走势基本能完全预测

    实战三:

    周期函数预测

    数据来源:https://blog.csdn.net/desilting/article/details/38981673

    已知以下的值具有周期性(7天)

    [10930,10318,10595,10972,7706,6756,9092,10551,9722,10913,11151,8186,6422,6337,11649,11652,10310,12043,7937,6476,9662,9570,9981,9331,9449,6773,6304,9355,10477,10148,10395,11261,8713,7299,10424,10795,11069,11602,11427,9095,7707,10767,12136,12812,12006,12528,10329,7818,11719,11683,12603,11495,13670,11337,10232,13261,13230,15535,16837,19598,14823,11622,19391,18177,19994,14723,15694,13248,9543,12872,13101,15053,12619,13749,10228,9725,14729,12518,14564,15085,14722,11999,9390,13481,14795,15845,15271,14686,11054,10395,14775,14618,16029,15231,14246,12095,10473,15323,15381,14947]
    # 图像展示 610
    info = find_logical([10930,10318,10595,10972,7706,6756,9092,10551,9722,10913,11151,8186,6422,6337,11649,11652,10310,12043,7937,6476,9662,9570,9981,9331,9449,6773,6304,9355,10477,10148,10395,11261,8713,7299,10424,10795,11069,11602,11427,9095,7707,10767,12136,12812,12006,12528,10329,7818,11719,11683,12603,11495,13670,11337,10232,13261,13230,15535,16837,19598,14823,11622,19391,18177,19994,14723,15694,13248,9543,12872,13101,15053,12619,13749,10228,9725,14729,12518,14564,15085,14722,11999,9390,13481,14795,15845,15271,14686,11054,10395,14775,14618,16029,15231,14246,12095,10473,15323,15381,14947])
    print(func_general(info,[info[-1][-1]+1])) #补全None 和预测下一个值
    show_func(info, 1, len(info[-1])+1)    #展示函数图像
    print(get_func(info)) #匹配曲线公式

    效果如下:

    但是可以看到函数拟合的效果在左右两端并不是太理想....存在一定的误差

  • 相关阅读:
    Centos 7 zabbix 实战应用
    Centos7 Zabbix添加主机、图形、触发器
    Centos7 Zabbix监控部署
    Centos7 Ntp 时间服务器
    Linux 150命令之查看文件及内容处理命令 cat tac less head tail cut
    Kickstart 安装centos7
    Centos7与Centos6的区别
    Linux 150命令之 文件和目录操作命令 chattr lsattr find
    Linux 发展史与vm安装linux centos 6.9
    Linux介绍
  • 原文地址:https://www.cnblogs.com/halone/p/13508477.html
Copyright © 2011-2022 走看看