对sklearn中的曲线拟合函数进行了简单整合,提供了方便曲线拟合并且预测曲线值或走势的简单的统一接口,能够在一定范围内拟合并预测可导函数的一个通用函数。
将多项式拟合和一些常见的函数进行了整合,提供了一个方便的统一接口
- 1.拟合单变量曲线
- 2.预测曲线
- 3.预测曲线和真实数据对比图
- 4.预测曲线分数
- 1.幂函数
- 2.周期函数(傅里叶级数)
- 3.指数函数
- 4.上述函数的组合
- 5.多项式函数
- 6.符合上述函数的数列
- 提供单变量拟合的曲线和具体的函数表达式和曲线图对比
- 根据skleran提供的函数拟合多变量函数
导入myfunctool
from tools import myfunctool
下面是一个拟合斐波那契数列的例子,提供了斐波那契数列前19个值,其中第18个值是缺失的,下面是补全第18个值并预测20-22个值的斐波那契值
#斐波那契数列前19个数,并在18个位置存在缺失值
x=[1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,None,6765]
#selectmode为1时表示使用多项式函数拟合,2表示利用整合的函数拟合,3表示自动判断二者拟合效果并给出拟合范围内最好的类别,默认为3
info=myfunctool.find_logical(x,selectmode=2)
print("用此公式求得原数列值:",myfunctool.func_general(info,list(range(1,len(info[-1])+1)))," 拟合得分:",info[-3])
#预测该斐波那契数列的之后的3个值 (真实值为:10946,17711,28657)
print("用此公式计算的后3个数列值:",myfunctool.func_general(info,[info[-1][-1]+1,info[-1][-1]+2,info[-1][-1]+3]))
#预测该斐波那契数列中的缺失值 (真实值为:4181)
print("用此公式预测缺失值:",myfunctool.func_general(info,[info[-1][-1]-1]))
print("预测函数公式为:",myfunctool.get_func(info))
#显示斐波那契数列拟合函数和真实值对比图
myfunctool.show_func(info,1,len(info[-1])+1)
下面是一个拟合任意曲线的例子,以y=4x^2+3x为例,给出当x=0,1,2,3,4时候以及对应的y值,根据给定的值拟合曲线
#随便想一个函数,例如下面的:y=4x^2+3x,并给出任意对应的x和y的值
x=[0,1,2,3,4]
y=[0,7,22,45,76]
info=myfunctool.auto_func(x,y)
print("原值为:",info[-2])
print("用此公式求得原值:",myfunctool.func_general(info,info[-1])," 拟合曲线函数得分:",info[-3])
print("x=5时,函数的预测值:",myfunctool.func_general(info,[5]))
print("预测拟合曲线函数为:",myfunctool.get_func(info))
print("r2分数:",myfunctool.get_model_r2score(info))
#显示x=0-6时的预测函数和真实值的对比图
myfunctool.show_func(info,0,6)
输入任意周期函数数列,并得出拟合曲线
print("---------周期数列预测-------")
info=myfunctool.find_logical([490, 477, 467, 458, 450, 442, 433, 426, 419, 413, 411, 428, 445, 441, 434, 436, 446, 442, 427, 414, 402,
391, 381, 372, 366, 363, 363, 364, 366, 372, 382, 397, 414, 430, 444, 460, 481, 502, 522, 539, 551, 561,
567, 569, 568, 566, 570, 576, 578, 574, 565, 553, 541, 529, 519, 507, 496, 486, 494, 528, 551, 563, 576,
596, 612, 624, 631, 636, 639, 640, 640, 638, 635, 633, 630, 625, 620, 615, 609, 603, 597, 590, 584, 578,
571, 559, 541, 529, 524, 511, 486, 454, 422, 394, 372, 348, 340, 335, 334, 332, 332, 332, 332, 332, 333,
336, 339, 341, 344, 349, 355, 360, 366, 372, 383, 396, 408, 419, 432, 448, 463, 473, 482, 493, 511, 530,
551, 568, 580, 595, 597, 597, 595, 593, 598, 606, 619, 632, 642, 653, 659, 658, 653, 645, 640, 641, 643,
650, 656, 659, 659, 655, 649, 640, 632, 626, 621, 614, 603, 590, 575, 564, 550, 530, 519, 507, 495, 484,
472, 462, 452, 445, 437, 430, 423, 417, 423, 442, 445, 435, 423, 422, 431, 436, 428, 413, 401, 390, 381,
373, 367, 363, 364, 365, 367, 371, 378, 396, 411, 428])
print("用此公式计算的后3个值:",myfunctool.func_general(info,[info[-1][-1]+1,info[-1][-1]+2,info[-1][-1]+3]))
myfunctool.show_func(info,1,len(info[-1])+1)
print(myfunctool.get_func(info))
print("r2分数:",myfunctool.get_model_r2score(info))
同sklearn的极端随机森林回归,随机森林回归,最小二乘法,梯度上升和梯度下降,详细用法见代码示例