Engee 文档
Notebook

数据近似(Engee应用)

我们提出了一个工具包,用于使用数据近似工具的示例开发我们自己的应用程序。

本申请的目的是

数据近似工具旨在帮助您找到近似输入数据向量的良好函数。

此特定示例的目的是使用GenieFramework展示和讨论Engee中的应用程序开发技术。

启动应用程序

在此示例的文件夹中,您将找到该文件 app.jl,我们将在Engee中作为一个单独的应用程序启动,并使用以下命令:

In [ ]:
genie_app = engee.genie.start("$(@__DIR__)/app.jl", log_file="log.txt");

应用程序可以在单独的窗口中打开。:

In [ ]:
display("text/html", """<a href="$(string(genie_app.url))" target="_blank">Открыть в отдельном окне</a>""")

或者它可以显示在交互式脚本中。:

In [ ]:
display(MIME("text/html"), """<iframe src="$(string(genie_app.url))" width="1100" height="680" style="border: none;"></iframe>""";)

停止应用程序(用于调试或重新启动)

要停止应用程序,请运行以下命令并取消注释:

In [ ]:
# engee.genie.stop("$(@__DIR__)/app.jl"));

创建输入向量

让我们创建应用程序工作所需的输入数据。:

In [ ]:
# Полиномиальная функция
v1 = 1:5
v2 = (v1.^3 .+ 3v1 .- 5)./150;

# Экспонента
v3 = 3 .* exp.(v1 .- 4);

# Обычная логистическая регрессия
n = 1000
xr = randn(n)
yr = Float32.((1.0 ./ (1.0 .+ exp.(-xr))) .> rand(n))

# Ступенчатая функция (тоже для логистической регрессии)
yr1 = Float32.(xr .> (minimum(xr) + 0.5*abs(maximum(xr)-minimum(xr))))

# Гауссова функция (единичная - осторожно, это всё еще линейная регрессия)
normal_pdf(x; μ=0, σ=1) = exp(-(x-μ)^2/(2σ^2)) / (σ * sqrt(2π))
xn = collect(-3:0.1:3);
yn = normal_pdf.(xn);
yn1 = normal_pdf.(xn, μ=1, σ=0.001);

绘制找到的函数

找到的函数可以从应用程序中的行复制并粘贴到交互式脚本的单元格中以获取输出数据。:

In [ ]:
f(x) = 1/(1+exp(-(3.99922 + 8.62808 * x)))

plot(-4:0.1:4, f, lw=3, leg=false)
scatter!(xr,yr1)
Out[0]:

它是如何工作的?

这是一个小演示与上面给出的测试向量。:

ezgif-458bb1e9574ef9.gif

关于程序运行的评论

任何通过函数调用添加到工具内矢量的数据都可以用作输入矢量。 collect().

回归任务的一部分使用命名正方形的方法执行,一部分使用带有瞬间的梯度下降执行。 这给出了回归收敛的一些信心,但由于迭代算法的步数有限,对于某些数据集可能无法实现最佳近似。 增加工具代码中的步骤数是值得的。

如果你进入该工具的代码,你会看到一个相当标准的应用程序结构。:

image.png

结论

我们希望您的反馈,使该工具更有用,并消除错误。