美文网首页读书分享记
Python 中的函数拟合

Python 中的函数拟合

作者: 自由调优师_大废废 | 来源:发表于2020-04-09 11:52 被阅读0次

很多业务场景中,我们希望通过一个特定的函数来拟合业务数据,以此来预测未来数据的变化趋势。(比如用户的留存变化、付费变化等)
本文主要介绍在 Python 中常用的两种曲线拟合方法:多项式拟合 和 自定义函数拟合。

多项式拟合 np.polyfit

通过多项式拟合,我们只需要指定想要拟合的多项式的最高项次是多少即可。

import numpy as np
import matplotlib.pyplot as plt
x = [10,20,30,40,50,60,70,80]
x = np.array(x)
print('x is :\n',x)
num = [174,236,305,334,349,351,342,323]
y = np.array(num)
print('y is :\n',y)
# f1 为各项的系数,3 表示想要拟合的最高次项是多少。
f1 = np.polyfit(x, y, 3)
# p1 为拟合的多项式表达式
p1 = np.poly1d(f1)
print('p1 is :\n',p1)

plt.plot(x, y, 's',label='original values')
yvals = p1(x) #拟合y值
plt.plot(x, yvals, 'r',label='polyfit values')

运行结果:


image.png

自定义函数拟合 curve_fit

对于自定义函数拟合,不仅可以用于直线、二次曲线、三次曲线的拟合,它可以适用于任意形式的曲线的拟合,只要定义好合适的曲线方程即可。

from scipy.optimize import curve_fit
x = [20,30,40,50,60,70]
x = np.array(x)
num = [453,482,503,508,498,479]
y = np.array(num)

# 这里的函数可以自定义任意形式。
def func(x, a, b,c):
    return a*np.sqrt(x)*(b*np.square(x)+c)

# popt返回的是给定模型的最优参数。我们可以使用pcov的值检测拟合的质量,其对角线元素值代表着每个参数的方差。
popt, pcov = curve_fit(func, x, y)
a = popt[0] 
b = popt[1]
c = popt[2]
yvals = func(x,a,b,c) #拟合y值
plot1 = plt.plot(x, y, 's',label='original values')
plot2 = plt.plot(x, yvals, 'r',label='polyfit values')

运行结果:


image.png

相关文章

网友评论

    本文标题:Python 中的函数拟合

    本文链接:https://www.haomeiwen.com/subject/zzmqmhtx.html