微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在图形上打印拟合详细信息并绘制多项式拟合

如何解决在图形上打印拟合详细信息并绘制多项式拟合

2部分问题:通过一堆拼凑在一起的谷歌搜索,我设法将Python中的代码粘合在一起以获取列表的日志并将其与原始列表相对应,并应用最合适的线性线(以下代码,综合数据)。

我该如何在图形本身上打印此线性拟合的详细信息(例如渐变,y截距,卡方)?

我将如何修改代码以对多项式拟合(例如x ^ 2行)执行相同的操作?

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
from numpy import exp,loadtxt,pi,sqrt,random,linspace
from lmfit import Model
import glob,os

x=[2,3,5,7,11,13,17,19,23,29,31]
y=np.log10(x)
print(y)

plt.scatter(x,y,label="prime-logs",color="red",marker="1",s=50)


plt.xlabel('Primes')
plt.ylabel('Log10 Primes')

plt.title('Non-Log Plot of Log Prime v Prime')
plt.legend()

plt.plot(np.unique(x),np.poly1d(np.polyfit(x,1))(np.unique(x)))

plt.show()

解决方法

这是一个解决方案。此处仅显示卡方(作为平方和残差)。注意,np.polyfit不存在梯度下降问题,因为该问题是最小二乘问题,可以使用SVD伪逆矩阵计算直接解决。

使用一种算法,您可以提取反演的每个步骤(使用梯度下降或任何其他优化程序),从而可以在同一图形上显示拟合的每个步骤。

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
from numpy import exp,loadtxt,pi,sqrt,random,linspace

# from lmfit import Model
import glob,os

x = [2,3,5,7,11,13,17,19,23,29,31]
y = np.log10(x)
print(y)

plt.plot(x,y,"1",ms=8,label="prime-logs")


y1,r,*_ = np.polyfit(x,1,full=True)
f1 = np.poly1d(y1)
plt.plot(x,f1(x),label=f"linear ($\chi^2$ = {r[0]:0.2f})")

y2,2,full=True)
f2 = np.poly1d(y2)
plt.plot(x,f2(x),label=f"quadratic ($\chi^2$ = {r[0]:0.2f})")

plt.xlabel("Primes")
plt.ylabel("Log10 Primes")
plt.title("Non-Log Plot of Log Prime v Prime")
plt.legend()

ployfit of log primes

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。