首先让我告诉我得到的可能不是我所期望的,也许你可以在这里帮助我.我有以下数据:
>>> x
array([ 3.08, 3.1 , 3.12, 3.14, 3.16, 3.18, 3.2 , 3.22, 3.24,
3.26, 3.28, 3.3 , 3.32, 3.34, 3.36, 3.38, 3.4 , 3.42,
3.44, 3.46, 3.48, 3.5 , 3.52, 3.54, 3.56, 3.58, 3.6 ,
3.62, 3.64, 3.66, 3.68])
>>> y
array([ 0.000857, 0.001182, 0.001619, 0.002113, 0.002702, 0.003351,
0.004062, 0.004754, 0.00546 , 0.006183, 0.006816, 0.007362,
0.007844, 0.008207, 0.008474, 0.008541, 0.008539, 0.008445,
0.008251, 0.007974, 0.007608, 0.007193, 0.006752, 0.006269,
0.005799, 0.005302, 0.004822, 0.004339, 0.00391 , 0.003481,
0.003095])
Run Code Online (Sandbox Code Playgroud)
现在,我想用4度多项式拟合这些数据.所以我这样做:
>>> coefs …Run Code Online (Sandbox Code Playgroud) 我有一组数据(位移与时间),我已经使用optimize.leastsq方法拟合了几个方程.我现在希望得到拟合参数的误差值.通过文档查看输出的矩阵是雅可比矩阵,我必须将其乘以残差矩阵以得到我的值.不幸的是,我不是统计学家所以我在术语中有点溺水.
根据我的理解,我需要的是与我的拟合参数一致的协方差矩阵,因此我可以对角元素的平方根来得到拟合参数的标准误差.我有一个模糊的阅读记忆,协方差矩阵无论如何都是来自optimize.leastsq方法的输出.它是否正确?如果不是,您将如何获得残差矩阵乘以输出的雅可比矩阵乘以得到我的协方差矩阵?
任何帮助将不胜感激.我是python的新手,因此如果问题变成一个基本问题就道歉.
拟合代码如下:
fitfunc = lambda p, t: p[0]+p[1]*np.log(t-p[2])+ p[3]*t # Target function'
errfunc = lambda p, t, y: (fitfunc(p, t) - y)# Distance to the target function
p0 = [ 1,1,1,1] # Initial guess for the parameters
out = optimize.leastsq(errfunc, p0[:], args=(t, disp,), full_output=1)
Run Code Online (Sandbox Code Playgroud)
args t和disp是time和displcement值的数组(基本上只有2列数据).我已经导入了代码顶部所需的所有内容.输出提供的拟合值和矩阵如下:
[ 7.53847074e-07 1.84931494e-08 3.25102795e+01 -3.28882437e-11]
[[ 3.29326356e-01 -7.43957919e-02 8.02246944e+07 2.64522183e-04]
[ -7.43957919e-02 1.70872763e-02 -1.76477289e+07 -6.35825520e-05]
[ 8.02246944e+07 -1.76477289e+07 2.51023348e+16 5.87705672e+04]
[ 2.64522183e-04 -6.35825520e-05 5.87705672e+04 2.70249488e-07]]
Run Code Online (Sandbox Code Playgroud)
我怀疑此刻适合有点怀疑.当我可以解决错误时,这将得到确认.
我有一组pts形成循环的点,它看起来像这样:

这有点类似于31243002,但是我不想在点对之间放置点,而是想在点之间插入一条平滑的曲线(坐标在问题的末尾给出),所以我尝试了类似于Interpolation的scipy文档.:
values = pts
tck = interpolate.splrep(values[:,0], values[:,1], s=1)
xnew = np.arange(2,7,0.01)
ynew = interpolate.splev(xnew, tck, der=0)
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
ValueError:输入数据错误
有没有办法找到这样的合适?
点数的坐标:
pts = array([[ 6.55525 , 3.05472 ],
[ 6.17284 , 2.802609],
[ 5.53946 , 2.649209],
[ 4.93053 , 2.444444],
[ 4.32544 , 2.318749],
[ 3.90982 , 2.2875 ],
[ 3.51294 , 2.221875],
[ 3.09107 , 2.29375 ],
[ 2.64013 , 2.4375 ],
[ 2.275444, 2.653124],
[ 2.137945, 3.26562 ],
[ 2.15982 …Run Code Online (Sandbox Code Playgroud) 我打算将2D高斯函数拟合到显示激光束的图像,以获得其参数FWHM和位置.到目前为止,我试图了解如何在Python中定义2D高斯函数以及如何将x和y变量传递给它.
我写了一个小脚本来定义该函数,绘制它,为它添加一些噪声,然后尝试使用它curve_fit.除了我尝试将模型函数适合噪声数据的最后一步之外,一切似乎都有效.这是我的代码:
import scipy.optimize as opt
import numpy as np
import pylab as plt
#define model function and pass independant variables x and y as a list
def twoD_Gaussian((x,y), amplitude, xo, yo, sigma_x, sigma_y, theta, offset):
xo = float(xo)
yo = float(yo)
a = (np.cos(theta)**2)/(2*sigma_x**2) + (np.sin(theta)**2)/(2*sigma_y**2)
b = -(np.sin(2*theta))/(4*sigma_x**2) + (np.sin(2*theta))/(4*sigma_y**2)
c = (np.sin(theta)**2)/(2*sigma_x**2) + (np.cos(theta)**2)/(2*sigma_y**2)
return offset + amplitude*np.exp( - (a*((x-xo)**2) + 2*b*(x-xo)*(y-yo) + c*((y-yo)**2)))
# Create x and y indices
x = np.linspace(0, …Run Code Online (Sandbox Code Playgroud) 我有一个数据集sklearn,我绘制了load_diabetes.target数据的分布(即load_diabetes.data用于预测的回归值).
我使用它是因为它具有最少数量的回归变量/属性sklearn.datasets.
使用Python 3,我如何获得最接近类似的分布类型和分布参数?
我所知道的target价值都是积极的和倾斜的(假定倾斜/右倾斜)...Python中是否有一种方法可以提供一些分布,然后最适合target数据/向量?或者,根据给出的数据实际建议拟合?对于那些具有理论统计知识但很少将其应用于"真实数据"的人来说,这将是非常有用的.
奖金 使用这种方法来确定你的后验分布对"真实数据"的影响是否合理?如果不是,为什么不呢?
from sklearn.datasets import load_diabetes
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import pandas as pd
#Get Data
data = load_diabetes()
X, y_ = data.data, data.target
#Organize Data
SR_y = pd.Series(y_, name="y_ (Target Vector Distribution)")
#Plot Data
fig, ax = plt.subplots()
sns.distplot(SR_y, bins=25, color="g", ax=ax)
plt.show()
Run Code Online (Sandbox Code Playgroud)
python statistics distribution machine-learning data-fitting
我一直试图使用scipy.optimize.curve_fit在一段时间内对某些数据进行指数拟合,但我遇到了真正的困难.我真的看不出任何理由为什么这不起作用,但它只会产生一条直线,不明白为什么!
任何帮助将非常感激
from __future__ import division
import numpy
from scipy.optimize import curve_fit
import matplotlib.pyplot as pyplot
def func(x,a,b,c):
return a*numpy.exp(-b*x)-c
yData = numpy.load('yData.npy')
xData = numpy.load('xData.npy')
trialX = numpy.linspace(xData[0],xData[-1],1000)
# Fit a polynomial
fitted = numpy.polyfit(xData, yData, 10)[::-1]
y = numpy.zeros(len(trailX))
for i in range(len(fitted)):
y += fitted[i]*trialX**i
# Fit an exponential
popt, pcov = curve_fit(func, xData, yData)
yEXP = func(trialX, *popt)
pyplot.figure()
pyplot.plot(xData, yData, label='Data', marker='o')
pyplot.plot(trialX, yEXP, 'r-',ls='--', label="Exp Fit")
pyplot.plot(trialX, y, label = '10 Deg Poly')
pyplot.legend() …Run Code Online (Sandbox Code Playgroud) 我在Python中使用带有Tensorflow后端的Keras.更精确的tensorflow 1.2.1及其内置的contrib.keras lib.
我想使用fit_generator一个Sequential模型对象,但我对作为方法参数传递的内容感到困惑.
number of training batches = uniqueTrainingData / batchSize???; = uniqueValidationData /批量大小???如上所示??? 我真的不知道validation_steps是什么意思.我知道上面链接的doc(Number of steps to yield from validation generator at the end of every epoch)的定义,但这只会混淆我在给定的上下文中.从文档中我知道validation_data生成器必须生成数据,在表单中标记元组(inputs, targets).与此相反,上述陈述表明在每个时期结束时必须存在多个"从验证生成器产生的步骤",在这种情况下,这意味着在每个训练时期之后将产生多个验证批次.
关于的问题validation_steps:
uniqueValidationData / batches不是uniqueValidationData / epochs?例如,100个时期的100个验证批次而不是x验证批次,其中x可能小于或大于指定的时期数量,这不是更好吗?或者:如果你的验证批次比epoches的数量少得多,那么模型是否在没有验证剩余时期的情况下进行训练,或者验证集是否会重复使用/重新洗牌+重复使用?关于的其他问题use_multiprocessing …
所以,我在Python中的polyfit(numpy.polynomial.polynomial.polyfit)函数中查找了有关weights参数的信息,看起来它与与各个点相关的错误有关.(如何在numpy.polyfit中包含测量误差)
但是,我想要做的与错误无关,而是权重.我有一个numpy阵列形式的图像,表明探测器中沉积的电荷量.我将该图像转换为散点图,然后进行拟合.但我希望这适合给予更多电荷沉积的点更多的权重,而不是那些电荷更少的点.这是权重参数的用途吗?
def get_best_fit(image_array, fixedX, fixedY):
weights = np.array(image_array)
x = np.where(weights>0)[1]
y = np.where(weights>0)[0]
size = len(image_array) * len(image_array[0])
y = np.zeros((len(image_array), len(image_array[0])))
for i in range(len(np.where(weights>0)[0])):
y[np.where(weights>0)[0][i]][np.where(weights>0)[1][i]] = np.where(weights>0)[0][i]
y = y.reshape(size)
x = np.array(range(len(image_array)) * len(image_array[0]))
weights = weights.reshape((size))
b, m = polyfit(x, y, 1, w=weights)
angle = math.atan(m) * 180/math.pi
return b, m, angle
Run Code Online (Sandbox Code Playgroud)
让我向您解释一下代码:
第一行将指定的电荷分配给称为权重的变量.接下来的两行得到沉积电荷> 0的点,因此存在一些电荷以捕获散射图的坐标.然后我得到整个图像的大小,以便稍后转换为一维数组进行绘图.然后我去通过图像,并试图让那里的一些电荷堆积的点的坐标(记住,量电荷时,存储在变量weights).然后我重塑y坐标以获得一维数组,并从图像中获取所有相应y坐标的x坐标,然后将权重的形状也改变为一维.
编辑:如果有使用该np.linalg.lstsq函数的方法,这将是理想的,因为我也试图通过绘图的顶点.我可以重新定位绘图,使顶点为零,然后使用np.linalg.lstsq,但这不允许我使用权重.
我有一个数据表面,我使用SciPy的leastsq功能.
我想对leastsq退货后的合身质量有一些估计.我希望这可以作为函数的返回包含在内,但如果是这样的话,它似乎没有明确记录.
是否有这样的回报,或者,除非,我可以传递我的数据和返回的参数值和拟合函数的某些函数将给出我对拟合质量的估计(R ^ 2或某些此类)?
谢谢!
当使用curve_fitfrom scipy.optimize来拟合python中的某些数据时,首先定义拟合函数(例如二阶多项式),如下所示:
def f(x, a, b):
return a*x**2+b*x
popt, pcov = curve_fit(f,x,y)但现在的问题是,如果函数包含一个整数(或一个离散的和),如何在第1点定义函数,例如:

实验数据仍然给出了x和f(x),所以第2点就像我想象的一样,我可以在python中定义f(x).顺便说一下,我忘了说假设g(t)在这里有一个众所周知的形式,并且包含拟合参数,即在多项式例子中给出的像a和b这样的参数.任何帮助深表感谢.问题实际上应该是通用的,而帖子中使用的函数只是随机的例子.
data-fitting ×10
python ×9
scipy ×6
numpy ×4
distribution ×1
generator ×1
integral ×1
keras ×1
matplotlib ×1
parameters ×1
regression ×1
statistics ×1