在几天前对函数的拟合函数进行改良之后,还没用实际的函数来看看具体的效果如何。以房价预测作为一个实战的模拟,来测试函数模拟寻找拟合函数之后对原本数据的预测效果究竟如何。
实战一:
这是网上找到的一个房价的数据,链接: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)) #匹配曲线公式
效果如下:
但是可以看到函数拟合的效果在左右两端并不是太理想....存在一定的误差