# 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 - 拟合排除数据空向量(默认)| 指标向量 | 逻辑值向量
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(默认)| 大于零的实数标量 | 函数
范数指标,指定为大于零的实数标量或者标量函数。误差权重用于将曲线拟合问题转变为优化问题,如果误差权重为实数标量,则优化问题为
# 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