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

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

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:

balance svr k nears

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

balance svr k nears 2

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


Author: AarNoma

The first Slovak cyborg 1 system

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