• 第二十二天学习进度--规律寻找算法之实战(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)) #匹配曲线公式

    效果如下:

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

  • 相关阅读:
    kakfa 安全机制
    配置管理
    消费者基本操作
    生产者基本操作
    笔记:类加载器
    主题管理
    记一次学习SpringCloud将zk作为注册中心的bug
    JVM新生代进入老年代、何时触发Full GC?
    JVM调优
    线程池
  • 原文地址:https://www.cnblogs.com/halone/p/13508477.html
Copyright © 2020-2023  润新知