我有一个比较容易理解的问题。
我有一组数据,我想估计这些数据对标准正态分布的拟合程度。为此,我从我的代码开始:
[f_p,m_p] = hist(data,128);
f_p = f_p/trapz(m_p,f_p);
x_th = min(data):.001:max(data);
y_th = normpdf(x_th,0,1);
figure(1)
bar(m_p,f_p)
hold on
plot(x_th,y_th,'r','LineWidth',2.5)
grid on
hold off
Run Code Online (Sandbox Code Playgroud)
图 1 将如下所示:

很容易看出,合身性很差,虽然可以发现钟形。因此,主要问题在于我的数据的差异。
为了找出我的数据箱应该拥有的正确出现次数,我这样做:
f_p_th = interp1(x_th,y_th,m_p,'spline','extrap');
figure(2)
bar(m_p,f_p_th)
hold on
plot(x_th,y_th,'r','LineWidth',2.5)
grid on
hold off
Run Code Online (Sandbox Code Playgroud)
这将导致下图。:

因此,问题是:如何缩放我的数据块以匹配图 2中的高斯分布?
警告
我想强调的一点聚焦:我不想要找到的最好的分布拟合的数据; 该问题被逆转:从我的数据开始,我想操纵它以这样的方式,在年底,其分布合理符合高斯之一。
不幸的是,目前,我对如何执行这些数据“过滤”、“转换”或“操作”没有真正的想法。
欢迎任何支持。
我正在尝试将多元正态分布拟合到我收集的数据中,以便从中取样。我知道如何使用fitdist函数(带有'Normal'选项)拟合(单变量)正态分布。
我怎样才能对多元正态分布做类似的事情?
是否fitdist在每个维度上单独使用假设变量不相关?
matlab distribution normal-distribution probability data-fitting
我想知道我的数据点的分布,所以首先我绘制了我的数据的直方图.我的直方图如下所示:

其次,为了使它们适合分布,这里是我写的代码:
size = 20000
x = scipy.arange(size)
# fit
param = scipy.stats.gamma.fit(y)
pdf_fitted = scipy.stats.gamma.pdf(x, *param[:-2], loc = param[-2], scale = param[-1]) * size
plt.plot(pdf_fitted, color = 'r')
# plot the histogram
plt.hist(y)
plt.xlim(0, 0.3)
plt.show()
Run Code Online (Sandbox Code Playgroud)
结果是:

我究竟做错了什么?
我有一个2D点(x,y),并且我想使用此帖子拟合椭圆
但是我的结果是axes = [ 0.93209407 nan]因为函数中ellipse_axis_length的down2是负数,所以res2无效,该怎么办?如果要根据数据集绘制椭圆,并计算数据点和椭圆之间的误差,该怎么办?
和代码是这样的:
import numpy as np
import numpy.linalg as linalg
import matplotlib.pyplot as plt
def fitEllipse(x,y):
x = x[:,np.newaxis]
y = y[:,np.newaxis]
D = np.hstack((x*x, x*y, y*y, x, y, np.ones_like(x)))
S = np.dot(D.T,D)
C = np.zeros([6,6])
C[0,2] = C[2,0] = 2; C[1,1] = -1
E, V = linalg.eig(np.dot(linalg.inv(S), C))
n = np.argmax(np.abs(E))
a = V[:,n]
return a
def ellipse_center(a):
b,c,d,f,g,a = a[1]/2, a[2], a[3]/2, a[4]/2, a[5], a[0] …Run Code Online (Sandbox Code Playgroud) 有没有办法将我的数据集的不确定性纳入 Savitzky Golay 拟合的结果中?由于我没有将此信息传递到函数中,因此我认为它只是通过未加权的最小二乘过程来计算“最佳拟合”。我目前正在处理具有非均匀不确定性的数据,因此可以通过包含主数据集的错误来改进数据的拟合度。
Savitzky-Golay 滤波器的维基百科页面建议我如何改变计算拟合系数的过程,我正在盯着 的代码scipy.signal.savgol_filter,但我无法理解我需要调整的内容,以便这会做我想做的事。
是否有现成的加权 SG 滤波器漂浮?我很难相信没有人曾经需要过这个 Python 工具,但也许我错过了一些东西。
我有一组数据点,它们看起来有点像一条在开头附近带有曲线的线。请参阅下图,其中显示了具有最佳拟合线(适合整个数据集)的点。
相反,它们可以用两个线性函数来描述(一条穿过最左边的一组点的线和一条穿过其余数据点的单独的线)。这些点实际上对应的是中子衰变,其中包含两种不同的同位素。
我不知道哪些点对应于哪种同位素,所以我需要以某种方式做出最好的猜测。一种同位素的曲线将是一条直线,而另一种同位素的曲线将是不同的直线。如何将两条不同的最佳拟合线(线性)拟合到数据点集,以便优化两者的拟合?
我的一个想法是选择一个“截止点”,例如在t=100(x 轴)处,并将左侧的点拟合为一条线,将右侧的点拟合为另一条线。然后我可以计算两条线的 chi^2 以获得拟合的“优点”。然后,我可以继续用略有不同的截止点多次做同样的事情,直到我找到提供最佳整体拟合的那对线。
另一个似乎更复杂的想法是将这些数据点描述为两条线的组合y= m1*t + m2*t + b1 + b2,其中ms 是斜率,bs 是 y 截距。然后,取总曲线的导数,我会有dy/dt = m1+m2. 然后也许我可以循环通过不同的“截止点”,并拟合线,直到我得到一个组合,其中导数最接近m1+m2. 但我不确定如何做到这一点,因为我最初没有使用一条曲线,只是一堆离散数据点。
在 Python 中优化两个拟合的最佳方法是什么?
我有几个数据集,它们分别非常适合 vonMises 分布。我正在寻找一种适合所有共享mu但不同的方式kappas,而不关心垃圾箱的选择。
当人们只想拟合一种模型时,这是非常简单的:scipy 这里与原始数据进行拟合。symfit但我一直在使用orlmfit或 在一些帖子(此处和此处)中寻找全局拟合,并且在所有情况下我们都必须指定 x 坐标和 y 坐标,这意味着之前必须为分布选择一些 bin 大小。
这是仅针对两个数据集的一些人工数据,尽管可以使用scipy. (请注意,我不需要关心垃圾箱的选举)。
import numpy as np
import scipy.stats as st
import matplotlib.pyplot as plt
# creating the data
mu1, mu2 = .05, -.05
sigma1, sigma2 = 3.1, 2.9
n1, n2 = 8000, 9000
y1 = np.random.vonmises(mu1, sigma1, n1)
y2 = np.random.vonmises(mu2, sigma2, n2)
# fitting
dist = st.vonmises
*args1, loc1, scale1 = …Run Code Online (Sandbox Code Playgroud) 我花了一些时间,但我使用下面的代码为我自己创建了适合我的 x,y 数据集的高斯拟合。
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit
def Gauss(x, a, x0, sigma, offset):
return a * np.exp(-(x - x0)**2 / (2 * sigma**2)) + offset
x, y = np.random.random(100), np.random.random(100)
popt, pcov = curve_fit(Gauss, x, y, p0=[np.max(y), np.median(x), np.std(x), np.min(y)])
plt.plot(x, y, 'b+:', label='data')
x_fit = np.linspace(np.min(x), np.max(x), 1000)
plt.plot(x_fit, Gauss(x_fit, *popt), 'r-', label='fit')
plt.legend()
plt.title('Something')
plt.xlabel('Anotherthing')
plt.ylabel('Athing')
plt.show()
Run Code Online (Sandbox Code Playgroud)
我可以看到我的拟合效果很好,并且可以看到图表和所有内容。
我现在想知道的是如何在屏幕上打印出该拟合的结果,例如拟合最大点上 x 的最大值、估计误差等?
这些信息可以访问吗?如果是这样,有没有办法打印出这些信息?如果没有,有人可以指出我找到拟合误差的正确方向吗?
我有一个嘈杂的信号和一个模型函数,例如:
x=linspace(0,20);
w=[2 6 -4 5];
y=w(1)*besselj(0,x)+w(2)*besselj(1,x)+w(3)*besselj(2,x)+w(4)*besselj(3,x);
y(randi(length(y),[1 10]))=10*rand(1,10)-5;
plot(x,y,'x')
Run Code Online (Sandbox Code Playgroud)
我想使用 RANSACw在我的模型中找到,因为这种方法在查找线时对噪声具有鲁棒性。然而,这不是一个线性问题,我无法得到合适的拟合,可能是因为我试图拟合的函数的振荡性质。
我看到 matlab 有一个 fitPolynomialRansac 函数,但即使对于一个a+b*x+c*x^2+d*x^3简单的情况(-1 和 1 之间),这也失败了。
任何想法如何驯服RANSAC?或不同的鲁棒噪声方法?
我决定试一试seaborn 0.11.0 版!据我所知,使用将替换 distplot 的 displot 函数。我只是想弄清楚如何将高斯拟合绘制到直方图上。这是一些示例代码。
import seaborn as sns
import numpy as np
x = np.random.normal(size=500) * 0.1
Run Code Online (Sandbox Code Playgroud)
使用 distplot 我可以做到:
sns.distplot(x, kde=False, fit=norm)
Run Code Online (Sandbox Code Playgroud)
但是如何在 displot 或 histplot 中进行呢?
data-fitting ×10
python ×6
matlab ×3
scipy ×3
distribution ×2
data-binding ×1
filtering ×1
gauss ×1
gaussian ×1
global ×1
matplotlib ×1
noise ×1
numpy ×1
plot ×1
probability ×1
python-2.7 ×1
ransac ×1
seaborn ×1
symfit ×1
uncertainty ×1