# fitoptions


创建或调整拟合选项对象

函数库: TyCurveFitting

# 语法

fitOptions = fitoptions()

fitOptions = fitoptions(ModelName)
fitOptions = fitoptions(ModelName; Key=Value)

fitOptions = fitoptions(fitType)

fitOptions = fitoptions(;Key=Value)

newOptions = fitoptions(fitOptions; Name=Value)
newOptions = fitoptions(options1, options2)

# 说明

fitOptions = fitoptions() 创建默认拟合选项对象 FitOptions。示例


fitOptions = fitoptions(ModelName) 为以 ModelName 指定的模型 fittype(ModelName) 创建拟合选项对象。示例


fitOptions = fitoptions(ModelName; Key=Value) 为以 ModelName 指定的模型 fittype(ModelName) 创建拟合选项对象,然后使用一个或多个关键字参数为其赋值。示例


fitOptions = fitoptions(fitType) 为指定的 fitType 读取其拟合选项。示例


fitOptions = fitoptions(;Key=Value 创建默认拟合选项对象,然后使用一个或多个关键字参数为其赋值。


newOptions = fitoptions(fitOptions; Key=Value) 使用一个或多个关键字参数为 fitOptions 赋值,并以 newOptions 返回。示例


newOptions = fitoptions(options1, options2) 组合 options1 与 options2 后,并返回结果 newOptions。

  • 如果两者的算法参数相同,则 options2 中与默认值不同的值将会被赋予给 options1,并以 newOptions 返回。

  • 如果两种的算法参数不同,则 newOptions 除 normalize, , weights, exclude 值来源于 options2 外,其他值均与 options1 相同。示例

# 示例

调整默认拟合选项对数据进行中心化并缩放

创建默认拟合选项对象然后在拟合之前设置 option 进行中心化并缩放。

using TyCurveFitting
options = fitoptions()
options.normalize = true
options
options = TyCurveFitting.FitOptions(true, Int64[], Float64[], "None")
为高斯拟合创建默认拟合选项

创建 2 阶高斯模型的拟合选项。

using TyCurveFitting
options = fitoptions("gauss2")
options = TyCurveFitting.SnlsOptions(false, Int64[], Float64[], "NonlinearLeastSquares", "trust region", "off", Float64[], [-Inf, -Inf, 0.0, -Inf, -Inf, 0.0], Float64[], 0.1, 10.0, 1.0e-6, 1.0e-6, 1.0e-6, 400, 0.25, 0.75, 2.0, 4.0)     
设置多项式拟合选项

为三次多项式拟合创建拟合选项,然后设置中心化并缩放以及稳健拟合选项。

using TyCurveFitting
options = fitoptions("poly3",normalize=true,robust="bisquare")
optiosn = TyCurveFitting.LLSQOptions(true, Int64[], Float64[], "LinearLeastSquares", "mldivide", "bisquare", Float64[], Float64[])
为 dogleg 算法创建拟合选项

创建将算法设置为 dogleg 的拟合选项。

using TyCurveFitting
options = fitoptions("a*x+b",algorithm="dogleg")
TyCurveFitting.OptimOptions(false, Int64[], Float64[], "NonlinearLeastSquares", "subspace 2d", "off", Float64[], Float64[], Float64[], 100.0, 1.0, 0.125, 400, 0.25, 4.0, 2.0, 0.75, 2.0)       
在多个拟合中使用相同的拟合选项

调整默认拟合选项在你想要设置 normalize, exclude, weights 之后使用有相同选项的不同方法拟合数据时很有用。例如,接下来的用法使用相同的拟合选项对不同内置模型进行拟合。

读取数据并使用相同选项对不同内置模型进行拟合,此处对于非线性拟合固定了初值以防止结果不同。

using TyCurveFitting
using TyPlot
include(pkgdir(TyCurveFitting) * "/examples/docs/census.jl")
options = fitoptions()
options.normalize = true
f1 = fit("poly3", cdate, pop; options=options)
f2 = fit("exp1", cdate, pop, startpt=[0.4534512151114697, 0.9866725256868641],options=options)
f3 = fit("cubicspline", cdate, pop; options=options)

将它们绘制在同一张图上进行比较。

ppx = LinRange(minimum(cdate), maximum(cdate), 100)
plot(
    cdate,
    pop,
    "b.",
    ppx,
    fvallm(f1, ppx),
    "r",
    ppx,
    fvallm(f2, ppx),
    "y",
    ppx,
    fvallm(f3, ppx),
    "g",
)
legend(["data", "poly3", "exp1", "cubicspline"])
读取并改变平滑拟合选项

拟合平滑参数。依赖数据的拟合选项比如 smooth 参数可以在 fit 函数中返回。

using TyCurveFitting
using TyPlot
include(pkgdir(TyCurveFitting) * "/examples/docs/census.jl")
# smooth
f1 = fit("smoothingspline", cdate, pop)
smoothparam = f1.options.smoothingparams
smoothparam = 0.008919722497522304

调整默认平滑参数并进行新的拟合。

options = fitoptions(f1.options,smoothingparams=1-smoothparam)
f2 = fit("smoothingspline", cdate, pop; options=options)

绘制两个拟合进行比较。

plotfit(f1,cdate,pop)
xlim([cdate[1],cdate[end]])
hold("on")
plotfit(f2,"g")
legend(["data","p=0.0089","p=0.9911"])
复制与组合拟合选项

创建拟合选项并设置下界。

using TyCurveFitting
options = fitoptions("gauss2",lb=[0,-Inf,0,0,-Inf,0])
options = TyCurveFitting.SnlsOptions(false, Int64[], Float64[], "NonlinearLeastSquares", "trust region", "off", Float64[], [0.0, -Inf, 0.0, 0.0, -Inf, 0.0], Float64[], 0.1, 10.0, 1.0e-6, 1.0e-6, 1.0e-6, 400, 0.25, 0.75, 2.0, 4.0)       

创建拟合选项的新的复制并调整稳健参数。

newoptions = fitoptions(options,robust="bisquare")
newoptions = TyCurveFitting.SnlsOptions(false, Int64[], Float64[], "NonlinearLeastSquares", "trust region", "bisquare", Float64[], [0.0, -Inf, 0.0, 0.0, -Inf, 0.0], Float64[], 0.1, 10.0, 1.0e-6, 1.0e-6, 1.0e-6, 400, 0.25, 0.75, 2.0, 4.0)

组合拟合选项。

options2 = fitoptions(options,newoptions)
options2 = TyCurveFitting.SnlsOptions(false, Int64[], Float64[], "NonlinearLeastSquares", "trust region", "bisquare", Float64[], [0.0, -Inf, 0.0, 0.0, -Inf, 0.0], Float64[], 0.1, 10.0, 1.0e-6, 1.0e-6, 1.0e-6, 400, 0.25, 0.75, 2.0, 4.0)  
改变自定义模型拟合选项

创建线性模型拟合类。

using TyCurveFitting
lft = fittype(["x","sin(x)","1"])
Linear model:
y(a,b,c,x) = a*x + b*sin(x) + c

取得拟合类 lft 的拟合选项。

fo = fitoptions(lft)
fo = TyCurveFitting.LLSQOptions(false, Int64[], Float64[], "LinearLeastSquares", "mldivide", "off", Float64[], Float64[])

设置中心化并缩放拟合选项。

fo.normalize = true
fo = TyCurveFitting.LLSQOptions(true, Int64[], Float64[], "LinearLeastSquares", "mldivide", "off", Float64[], Float64[])

# 输入参数

ModelName - 拟合模型名称
字符串 | 向量

模型名称,指定为字符串或向量。这个表格展示了一些内置模型名称的常见例子。

内置模型名称 描述
"poly1" 线性多项式曲线
"poly11" 线性多项式曲面
"poly2" 二次多项式曲线
"linearinterp" 分段线性插值
"cubicinterp" 分段三次插值
"smoothingspline" 平滑样条(曲线)
"lowess" 局部线性回归(曲面)

在指定需要阶数输入的模型时以及大于 10 次的多项式模型时,可以以两元素向量,第一个元素为模型名称,第二个元素为指定阶数输入。例如:12 次多项式,可以输入["poly",12],3 阶高斯,可以输入["gauss",3]。

可选的内置模型名称可以参阅模型名称与方程

除了内置模型名称以外,该输入可以是 fittype 的所有合法输入,例如函数、字符串表示的函数、字符串向量(线性基函数)等。

示例:"poly2", ["poly",13]

fitType - 拟合模型类
FitType

拟合模型类,指定为由 fittype 函数生成的 FitType。可以使用这个语法调整自定义模型选项。

fitOptions - 拟合选项
AbstractOptions

拟合选项,指定为由 fitoptions 函数生成的 AbstractOptions 对象。

options1 - 要组合的拟合选项
AbstractOptions

要组合的拟合选项,由 fitoptions 生成。

options2 - 要组合的拟合选项
AbstractOptions

要组合的拟合选项,由 fitoptions 生成。

# 关键字参数

实现 Key1=Value1,...,KeyN=ValueN 功能的关键字参数,其中 Key 与 Value 相互对应。名称-值对参数必须在其余参数以及一个英文百分号以后,但是内部出现顺序不重要。

示例: lb=[0,0], ub=[Inf,maximum(x)], startpt = [1,1] 指定了拟合的界与初值。

# 所有拟合方法的选项

normalize - 中心化并缩放指示
false(默认)| true

中心化并缩放指示,指定为逻辑值。当该项指定为 true 时,传入数据会中心化并缩放,亦即减去其均值再除以其标准差。

exclude - 拟合排除数据
空向量(默认)| 指标向量 | 逻辑值向量

拟合排除数据,指定以下之一。

  • 逻辑值向量或 excludedata的生成结果,例如 x.>10。

  • 由希望排除的点的指标组成的整数向量,例如 [1,10,25]。

示例参见从拟合中排除数据

weights - 拟合缩放因子(权)
Float64[](默认)| 向量

拟合缩放因子,指定为一个与响应值 y,z 长度相同的向量。

method - 拟合方法
"None"(默认)| "LinearLeastSquares" | "SmoothingSpline" | "LowessFit" | "NonlinearLeastSquares" ...

拟合方法,指定下表中的字符串。

拟合方法 描述
"LinearLeastSquares" 或 "Linear Least Squares" 线性最小二乘
"NonlinearLeastSquares" 或 "Nonlinear Least Squares" 非线性最小二乘
"SmoothingSpline" 或 "Smoothing Spline" 平滑样条
"LowessFit" 或 "Lowess Fit" Lowess 平滑(仅适用于曲面)
"CubicSplineInterpolant" 或 "CubicSpline Interpolation" 三次样条插值
"LinearInterpolant" 或 "Linear Interpolation" 线性插值
"PchipInterpolant" 或 "Pchip Interpolation" 分段三次 Hermite 插值(仅限曲线)
"NearestInterpolant" 或 "Nearest Interpolation" 最近邻点插值
"NaturalInterpolant" 或 "Natural Interpolation" 自然邻点插值
"BiharmonicInterpolant" 或 "Biharmonic Interpolation" 双调和插值
"ThinPlateInterpolant" 或 "Thinplate Interpolation" 薄板样条插值

# 平滑选项

smoothingparam - 平滑半径
nothing(默认)| 介于(0,1)的标量

平滑半径,指定为介于(0,1)之间的标量。

span - 局部回归中使用点的比例
0.25(默认)| 介于(0,1)之间的标量

局部回归中使用点的比例,指定为介于(0,1)之间的正标量。

# 线性与非线性回归选项

robust - 稳健最小二乘方法
"off"(默认)| "LAR" | "bisquare"

稳健最小二乘拟合方法,指定为以下值:

  • "LAR" 指示最小绝对残差方法。

  • "bisquare" 指定双平方误差权方法。

当 method 为 "Linear Least Squares" 或 "Nonlinear Least Squares" 时会使用。

lb - 拟合系数的下界
Floa64[](默认)| 向量

拟合系数的下界,指定为向量。默认值为空向量,这表示拟合下无界。如果指定了拟合界,则界向量的长度必须等于系数的长度。可以使用 coeffnames 返回系数的顺序。单个下无界的系数可以指定为 -Inf。

当 method 为 "Linear Least Squares" 或 "Nonlinear Least Squares" 时会使用。

ub - 拟合系数的上界
Floa64[](默认)| 向量

拟合系数的上界,指定为向量。默认值为空向量,这表示拟合上无界。如果指定了拟合界,则界向量的长度必须等于系数的长度。可以使用 coeffnames 返回系数的顺序。单个上无界的系数可以指定为 Inf。

当 method 为 "Linear Least Squares" 或 "Nonlinear Least Squares" 时会使用。

algorithm - 拟合算法
"mldivide" | "trust region"(默认) | "interior point" | "subspace 2d" | "dogleg" | "double dogleg"...

拟合使用的具体算法,指定为以下之一的字符串。

适用范围 算法 描述
非线性 全部 dogleg 狗腿优化算法
double dogleg 双狗腿优化算法
subspace 2d 子空间 2D 优化算法
cg steihaug CG 狗腿法
levenberg marquardt levenberg marquardt 拟合算法
fsubspace 2d 拟合特化的子空间 2D 算法
trust region 非线性信赖域拟合算法
参数无界 ty levenberg marquardt 带加速选项的 levenberg marquardt 拟合算法
线性 参数无界 mldivide LU 分解求解无界线性最小二乘问题
全部 trust region 线性信赖域算法
interior point 内点法

# 优化算法拟合选项

startpt - 系数初始值
Floa64[](默认)| 向量

系数初始值,指定为向量。可以用 coeffnames 函数找到参数的顺序。

如果没有指定初始值(使用函数直接传入时必须指定初始值),则对于除 rational 和 weibull 在内的内置模型会使用启发式的初值,对于其他方法,将会采用在 (0,1) 上均匀分布的随机数向量作为初值。因此,对于相同的数据和模型每次拟合的结果可能不同。如果要避免随机性,请指定一个固定的初值。

deltamax - 信赖域最大半径
100.0(默认)| 大于零的实数标量

信赖域最大半径,指定为大于零的实数标量。

delta - 信赖域初始半径
1.0(默认)| 大于零的实数标量

信赖域初始半径,指定为大于零的实数标量。

eta - 接受指标
1/8(默认)| 大于零的实数标量

接受指标,指定为大于零的实数标量。如果当前步的变化比率高于这个值,则会接受该步。eta 的值需要大于等于 rhodown 的值,以防止迭代失效。

maxiter - 最大迭代次数
400(默认)| 正整数

最大迭代次数,指定为正整数。

rhodown - 收缩指标
1/4(默认)| 大于零的实数标量

收缩指标,指定为大于零的实数标量。如果当前步的变化比率低于这个值,信赖域会收缩。

rhoup - 扩张指标
3/4(默认)| 大于零的实数标量

扩张指标,指定为大于零的实数标量。如果当前步的变化比率大于这个值,信赖域会扩张。

scaledown - 收缩倍数
4.0(默认)| 大于零的实数标量

收缩倍数,指定为大于零的实数标量。信赖域收缩时,新的信赖域半径等于原来的信赖域半径除以收缩倍数。

scaleup - 扩张倍数
2.0(默认)| 大于零的实数标量

扩张倍数,指定为大于零的实数标量。信赖域扩张时,新的信赖域半径等于原来的信赖域半径乘以收缩倍数。信赖域半径总是不大于最大信赖域半径。

normp - 范数指标
2.0(默认)| 大于零的实数标量 | 函数

范数指标,指定为大于零的实数标量或者标量函数。误差权重用于将曲线拟合问题转变为优化问题,如果误差权重为实数标量,则优化问题为 ,因此默认参数 2.0 表示最小二乘拟合,而指定 normp = Inf 则表示优化问题为 。如果 normp 为函数,则优化问题为 ,因此指定 normp 为 abs2 得到的结果将与默认结果一致。

# f subspace 2d

tolX - 系数值容差
1e-6(默认)| 大于零的实数标量

系数值容差,指定为大于零的实数标量。

tolFun - 函数值容差
1e-6(默认)| 大于零的实数标量

函数值容差,指定为大于零的实数标量。

# nonlinear trust region

pcgtol - 预共轭容差
0.1(默认)| 大于零的实数标量

预共轭容差,指定为大于零的实数标量。

delta - 初始信赖域半径
10(默认)| 大于零的实数标量

初始信赖域半径,指定为大于零的实数标量。

tol1 - 函数容差
1e-6(默认)| 大于零的实数标量

函数容差,指定为大于零的实数标量。

tol2 - 系数容差
1e-6(默认)| 大于零的实数标量

系数容差,指定为大于零的实数标量。

tolfunvalue - 函数值容差
1e-6(默认)| 大于零的实数标量

函数值容差,指定为大于零的实数标量。

ratiodown - 收缩指标
0.25(默认)| 大于零的实数标量

收缩指标,指定为大于零的实数标量。如果当前步的变化比率低于这个值,信赖域会收缩。

ratioup - 扩张指标
0.75(默认)| 大于零的实数标量

扩张指标,指定为大于零的实数标量。如果当前步的变化比率大这个值,信赖域会扩张。

# levenberg marquardt

gamma - 类信赖域初始半径
0.01(默认)| 大于零的实数标量

类信赖域初始半径,指定为大于零的实数标量。

gammadown - 类信赖域收缩倍数
0.01(默认)| 大于零的实数标量

类信赖域收缩倍数,指定为大于零的实数标量。当类信赖域收缩时,新的类信赖域半径等于原半径乘以该收缩倍数。

gammaup - 类信赖域扩张倍数
10.0(默认)| 大于零的实数标量

类信赖域扩张倍数,指定为大于零的实数标量。当类信赖域扩张时,新的类信赖域半径等于原半径乘以该收缩倍数。

# ty levenberg marquardt

maxiter - 最大迭代次数
100(默认)| 正整数标量

最大迭代次数,指定为正整数标量。

lambda - 信赖域初始半径
10.0(默认)| 大于零的实数标量

信赖域初始半径,指定为大于零的实数标量。

tau - 信赖域初始半径指标
Inf(默认)| 大于零的实数标量

信赖域初始半径指标,指定为大于零的实数标量。当 tau 为有限值时,设 J 为初始雅可比矩阵,则信赖域初始半径将会选为

lambdadown - 信赖域收缩倍数
10.0(默认)| 大于零的实数标量

信赖域收缩倍数,指定为大于零的实数标量。当信赖域收缩时,新的类信赖域半径等于原半径乘以该倍数。

lambdaup - 信赖域扩张倍数
0.1(默认)| 大于零的实数标量

信赖域扩张倍数,指定为大于零的实数标量。当信赖域扩张时,新的类信赖域半径等于原半径乘以该倍数。

lambdamax - 类信赖最大半径
1e16(默认)| 大于零的实数标量

类信赖域最大半径,指定为大于零的实数标量。

lambdamin - 类信赖最小半径
1e-16(默认)| 大于零的实数标量

类信赖域最小半径,指定为大于零的实数标量。

avv - 加速度修正指标
false(默认)| true

加速度修正指标,指定为逻辑值。当指定 avv 为 true 时,将使用与黑塞矩阵相关的加速度向量修正迭代方向。

# llsq interior point

tol1 - 系数值容差
1e-6(默认)| 大于零的实数标量

系数值容差,指定为大于零的实数标量。

tol2 - 函数值容差
1e-6(默认)| 大于零的实数标量

函数值容差,指定为大于零的实数标量。

itbnd - 最大迭代次数
200(默认)| 正整数标量

最大迭代次数,指定为正整数标量。

# llsq trust region

tolfun - 函数容差
1e-8(默认)| 大于零的实数标量

函数容差,指定为大于零的实数标量。

tolfunvalue - 函数值容差
100*eps()(默认)| 大于零的实数标量

函数值容差,指定为大于零的实数标量。

tol2 - 函数值均方容差
sqrt(tolfunvalue)(默认)| 大于零的实数标量

函数值均方容差,指定为大于零的实数标量。

dellow - 信赖域最小半径
1.0(默认)| 大于零的实数标量

信赖域最小半径,指定为大于零的实数标量。

delup - 信赖域最小半径
1000.0(默认)| 大于零的实数标量

信赖域最大半径,指定为大于零的实数标量。

del - 扰动强度
10*eps()(默认)| 大于零的实数标量

扰动强度,指定为大于零的实数标量。在迭代步计算之后会对迭代步进行小的扰动以使上下界强成立。

# 输出参数

fitOptions - 拟合选项
AbstractOptions

拟合选项,以 AbstractOptions 实例形式返回。

newOptions - 新的拟合选项
AbstractOptions

新的拟合选项,以 AbstractOptions 实例形式返回。

# 另请参阅

fit | fittype | get_op | set! | set_option