# 使用非线性最小二乘法拟合
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import numpy as np
# 用指数形式来拟合
y = np.array([0.45, 0.49, 0.40, 0.52, 0.57, 0.62, 0.64, 0.66, 0.52, 0.50, 0.43, 0.20, 0.14, 0.13,0.11 ])
x = np.array([i / 10 for i in range(70, 100, 2)])
print(x.shape)
print(y.shape)
z1 = np.polyfit(x, y, 6)#用 N 次多项式拟合
p1 = np.poly1d(z1)
print(p1) #在屏幕上打印拟合多项式
yvals=p1(x)#也可以使用 yvals=np.polyval(z1,x)
plot1=plt.plot(x, y, '*',label='F1 score')
plot2=plt.plot(x, yvals, 'r',label='trend F1 score')
plt.xlabel('m')
plt.ylabel('F1 score')
plt.legend(loc=1)#指定 legend 的位置,读者可以自己 help 它的用法
plt.title('m - F1 score')
plt.show()
# def func(x, a, b):
# return a * np.exp(b / x)
#
# def f_gauss(x, A, B, C=1, sigma=1):
# return A*np.exp(-(x-B)**2/(2*sigma**2)) + C
#
# popt, pcov = curve_fit(f_gauss, x, y)
# a = popt[0] # popt里面是拟合系数,读者可以自己help其用法
# b = popt[1]
# yvals = func(x, a, b)
# plot1 = plt.plot(x, y, label='original values')
# plot2 = plt.plot(x, yvals, label='curve_fit values')
# plt.xlabel('x axis')
# plt.ylabel('y axis')
# plt.legend() #loc=4 指定legend的位置,读者可以自己help它的用法
# plt.title('curve_fit')
# plt.show()
# #plt.savefig('p2.png')
曲线拟合
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 背景 7月份的时候导师布置了个作业,他给了一条用程序生成的曲线,然后让我们用代码实现一个梯度下降算法来拟合曲线。具...
- 引言 这一段时间研究生生涯已经走进了尾声,也一直忙于论文没有关注前端方面的工作。偶然的机会,在知乎上看到了一篇文章...