gpt4 book ai didi

python - 减少校准中的测量次数

转载 作者:行者123 更新时间:2023-12-01 07:17:40 27 4
gpt4 key购买 nike

出于校准目的,我对水流进行了 N 次测量,每一次都非常耗时。我想减少测量次数。听起来这是功能选择的一部分,因为我正在减少我拥有的列数。但是 - 我需要预测我将要放弃的测量值。

以下是数据示例:

    SerialNumber  val      speed
0 193604048 1.350254 105.0
1 193604048 1.507517 3125.0
2 193604048 1.455142 525.0
6 193604048 1.211184 12.8
7 193604048 1.238835 20.0

对于每个序列号,我都有一套完整的速度值测量值。理想情况下,我想要一个模型,其输出是所有 N val 测量的向量,但选项似乎都是神经网络,我现在试图避免。还有其他选择吗?

如果我将此数据输入回归模型,如何区分每个序列号数据集?

为了确保我的目标明确 - 我想了解 N 个测量值的历史测量值,并找到可以降低哪个速度值以仍然准确预测所有 N 个输出值。

谢谢!

最佳答案

我试图找到最适合您发布的示例数据的最简单方程,并从我的方程中搜索哈里斯屈服密度方程,“y = 1.0/(a + b * pow(x, c) )”,是一个很好的候选者。这是一个使用该方程和数据的图形化 Python 拟合器,其中非线性拟合器的初始参数估计值直接根据数据最大值和最小值计算得出。请注意,SerialNumber 本身与数据无关,不会在回归中使用。

我希望您可能会发现这个方程在您的工作中普遍有用,并且在对几个不同的数据集执行类似的回归之后,参数 a、b 和 c 在所有情况下都非常相似 - 即最好的结果。如果您的测量精度很高,我个人预计,通过这个三参数方程,每次校准应该可以使用至少四个数据点,其中最大、最小和沿着预期校准曲线的其他两个间隔良好的点。

请注意,此处拟合的参数 a = -1.91719091e-03。 b = 1.11357103e+00,c = -1.51294798e+01,得出 RMSE = 3.191,R 平方 = 0.9999

plot

import numpy, scipy, matplotlib
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

xData = numpy.array([1.350254, 1.507517, 1.455142, 1.211184, 1.238835])
yData = numpy.array([105.0, 3125.0, 525.0, 12.8, 20.0])


def func(x, a, b, c): # Harris yield density equation
return 1.0 / (a + b*numpy.power(x, c))


initialParameters = numpy.array([0.0, min(xData), -10.0 * max(xData)])

# curve fit the test data
fittedParameters, pcov = curve_fit(func, xData, yData, initialParameters)

modelPredictions = func(xData, *fittedParameters)

absError = modelPredictions - yData

SE = numpy.square(absError) # squared errors
MSE = numpy.mean(SE) # mean squared errors
RMSE = numpy.sqrt(MSE) # Root Mean Squared Error, RMSE
Rsquared = 1.0 - (numpy.var(absError) / numpy.var(yData))

print('Parameters:', fittedParameters)
print('RMSE:', RMSE)
print('R-squared:', Rsquared)

print()


##########################################################
# graphics output section
def ModelAndScatterPlot(graphWidth, graphHeight):
f = plt.figure(figsize=(graphWidth/100.0, graphHeight/100.0), dpi=100)
axes = f.add_subplot(111)

# first the raw data as a scatter plot
axes.plot(xData, yData, 'D')

# create data for the fitted equation plot
xModel = numpy.linspace(min(xData), max(xData))
yModel = func(xModel, *fittedParameters)

# now the model as a line plot
axes.plot(xModel, yModel)

axes.set_title('Harris Yield Density Equation') # title
axes.set_xlabel('Val') # X axis data label
axes.set_ylabel('Speed') # Y axis data label

plt.show()
plt.close('all') # clean up after using pyplot

graphWidth = 800
graphHeight = 600
ModelAndScatterPlot(graphWidth, graphHeight)

使用反转的 X 和 Y 进行更新

根据评论,这是一个三参数方程混合幂和 Eponential“a * pow(x, b) * exp(c * x)”图形拟合器,其中 X 和 Y 与之前的代码相反。这里,拟合参数 a = 1.05910664e+00、b = 5.26304345e-02 和 -2.25604946e-05 产生 RMSE = 0.0003602 和 R 平方 = 0.9999

plot2

import numpy, scipy, matplotlib
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

xData = numpy.array([105.0, 3125.0, 525.0, 12.8, 20.0])
yData = numpy.array([1.350254, 1.507517, 1.455142, 1.211184, 1.238835])


def func(x, a, b, c): # mixed power and exponential equation
return a * numpy.power(x, b) * numpy.exp(c * x)


initialParameters = [1.0, 0.01, -0.01]

# curve fit the test data
fittedParameters, pcov = curve_fit(func, xData, yData, initialParameters)

modelPredictions = func(xData, *fittedParameters)

absError = modelPredictions - yData

SE = numpy.square(absError) # squared errors
MSE = numpy.mean(SE) # mean squared errors
RMSE = numpy.sqrt(MSE) # Root Mean Squared Error, RMSE
Rsquared = 1.0 - (numpy.var(absError) / numpy.var(yData))

print('Parameters:', fittedParameters)
print('RMSE:', RMSE)
print('R-squared:', Rsquared)

print()


##########################################################
# graphics output section
def ModelAndScatterPlot(graphWidth, graphHeight):
f = plt.figure(figsize=(graphWidth/100.0, graphHeight/100.0), dpi=100)
axes = f.add_subplot(111)

# first the raw data as a scatter plot
axes.plot(xData, yData, 'D')

# create data for the fitted equation plot
xModel = numpy.linspace(min(xData), max(xData))
yModel = func(xModel, *fittedParameters)

# now the model as a line plot
axes.plot(xModel, yModel)

axes.set_title('Mixed Power and Exponential Equation') # title
axes.set_xlabel('Speed') # X axis data label
axes.set_ylabel('Val') # Y axis data label

plt.show()
plt.close('all') # clean up after using pyplot

graphWidth = 800
graphHeight = 600
ModelAndScatterPlot(graphWidth, graphHeight)

关于python - 减少校准中的测量次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57867119/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com