Джулия умирает при создании контурного графика

#plot #julia

#сюжет #джулия

Вопрос:

Я хочу создать контурный график пространства потерь для довольно простой регрессии. Всякий раз, когда я иду на построение пространства, мой сеанс умирает. Есть ли что-то, что я делаю неправильно, или мне нужно затруднить установку съемки? (только что установлен пару дней назад, но раньше не использовал Julia)

 using Plots, DataFrames, StatsPlots, Statistics, LinearAlgebra

f(t) = t.^2
c(θ₁, θ₂) = sum(f(t)-θ₁*t-θ₂*t.^2)

t = LinRange(0,1,20) |> collect
θ₁ = LinRange(-3,2,100) |> collect
θ₂ = LinRange(-1,3.5,100)|> collect

X = [t t.^2]
θ = [θ₁ θ₂]

yhats = X * transpose(θ)
ytrue = t.^2

e = yhats .- ytrue
tse = sum(e.^2, dims=1)

contour(θ[:,1],θ[:,2], tse)
  

Комментарии:

1. Ваш пример выдает ошибку для меня: Arrays have incorrect length or dimension , но не завершает сеанс, так что, похоже, это проблема с вашей установкой. В качестве отступления обратите внимание, что вам не обязательно быть using Plots, StatsPlots , поскольку StatsPlots реэкспортируется Plots . И я считаю countour , что это стандартно Plots , поэтому вы могли бы отказаться StatsPlots от этого.

2. Кроме того, не используйте collect . Вам практически никогда не нужно использовать collect , поскольку диапазоны ведут себя как массивы (на самом деле они являются массивами). Просто удалите |> collect детали и забудьте, о чем вы когда-либо слышали collect (пока что-то действительно не перестанет работать.)

3. Я удалил Джулию и папки, переустановил ее, установил только графики и все равно столкнулся с той же проблемой… Я не уверен, почему должна быть ошибка, потому что все они являются векторами 100×1… Могу ли я получить немного больше помощи в устранении неполадок или выяснении того, что происходит не так?

4. Похоже, что третий аргумент contour должен быть либо двумерной функцией, либо матрицей. Похоже, что ваш код предоставляет вектор для третьего аргумента.

Ответ №1:

Похоже, вы пытаетесь сделать

 using Plots
f(t) = t^2
y(θ₁, θ₂, t) = θ₁ * t   θ₂ * t^2
ts = LinRange(0, 1, 20)
e(θ₁, θ₂) = sum(abs2, f(t) - y(θ₁, θ₂, t) for t in ts)
θ₁ = LinRange(-3, 2, 100)
θ₂ = LinRange(-1, 3.5, 100)
contourf(θ₁, θ₂, e)
  

что дает

введите описание изображения здесь