Na obrázku vyššie vidíte ako sa dajú pre našu AI balansovať optimálne vzdialenosti SVR a K-NEARS vďaka kruhovému dendrogramu, ktorý vyzerá napríklad pre 10 listov takto:

Pre výkonnejší strom by sme už vyzerali takto:

No á to je celé. Takto musíme balansovať optimálne vzdialenosti svr k nears a dostaneme model, ktorý by mal dávať celkom logické odpovede na základe ekníh. Sám čet bot takto vytvorí optimálne vzdialenosti a naučí sa myslieť ako deterministická ekniha, lebo podedí z nej determinizmus syntaxe slov vo vetách.
using Pkg
Pkg.add(["Plots","JSON","Clustering","Statistics","Distances","Random"])
using JSON
using Plots
using Clustering
using Statistics
using Distances
using Random
# -----------------------------------------------------
# 1) LOAD DATA
# -----------------------------------------------------
data = JSON.parsefile("model.json")
ys_all = Float64[]
for (key, subdict) in data
ys = collect(values(subdict))
if maximum(ys) < 100
append!(ys_all, ys)
end
end
N = length(ys_all)
xs = collect(1:N)
ys = ys_all ./ 100.0
# -----------------------------------------------------
# 2) SAFE SAMPLING (max 9000 points)
# -----------------------------------------------------
max_points = 10
if N > max_points
println("Sampling $max_points points from $N...")
idx = randperm(N)[1:max_points]
xs = xs[idx]
ys = ys[idx]
end
X = hcat(xs, ys) # N × 2
# -----------------------------------------------------
# 3) PRIAMA MATICA VZDIAleností
# -----------------------------------------------------
D = pairwise(Euclidean(), X; dims = 1)
# -----------------------------------------------------
# 4) HIERARCHICAL CLUSTERING
# -----------------------------------------------------
tree = hclust(D, linkage = :ward)
k_clades = 3
clade_assign = cutree(tree; k = k_clades)
palette = [:dodgerblue, :orange, :seagreen]
# -----------------------------------------------------
# 5) RADIALNY DENDROGRAM S ČÍSLAMI HRÁN
# -----------------------------------------------------
plt = plot(size = (900, 900),
legend = false,
title = "Stabilný radiálny dendrogram")
function plot_radial(tree, clade_assign)
leaves = tree.order # permutácia listov
#n = length(leaves)
n=10
merges = tree.merges
m = size(merges, 1)
first_internal = n + 1
last_internal = n + m
angles = range(0, 2π, length = n + 1)[1:end-1]
pos = Dict{Int, Tuple{Float64,Float64}}()
# --- 1) listy (body) + čísla listov ---
for (i, leaf) in enumerate(leaves)
θ = angles[i]
x, y = cos(θ), sin(θ)
pos[leaf] = (x, y)
clr = palette[clade_assign[leaf]]
scatter!(plt, [x], [y], color = clr, ms = 7)
# číslo listu
annotate!(plt, (x, y,
text(string(leaf), 7, :black)))
end
# --- 2) vnútorné uzly + hrany s číslami ---
edge_id = 1
for i in 1:m
L = merges[i, 1]
R = merges[i, 2]
parent = n + i
# Clustering.jl: L < 0 znamená leaf => index = -L
left = L < 0 ? -L : L
right = R < 0 ? -R : R
# pozície detí
x1, y1 = pos[left]
x2, y2 = pos[right]
# rodič = stred
px = (x1 + x2) / 2
py = (y1 + y2) / 2
pos[parent] = (px, py)
# hrana left -> parent
plot!(plt, [x1, px], [y1, py], color = :gray, lw = 1)
mx1, my1 = (x1 + px) / 2, (y1 + py) / 2
annotate!(plt, (mx1, my1,
text(string(edge_id), 7, :black)))
edge_id += 1
# hrana right -> parent
plot!(plt, [x2, px], [y2, py], color = :gray, lw = 1)
mx2, my2 = (x2 + px) / 2, (y2 + py) / 2
annotate!(plt, (mx2, my2,
text(string(edge_id), 7, :black)))
edge_id += 1
end
end
plot_radial(tree, clade_assign)
display(plt)
if !Base.isinteractive()
println("Press enter to quit:")
readline()
end

Comments “Ako balancovať medzi SVR a K-NEARS pri hľadaní optimálnych vzdialeností? Mohli by sme vyrábať kruhový dendrogram a to takto:”