ΚΕΦΑΛΑΙΟ 82 THE WEEKEND WARS

 

✨🌙⚓Μην φοβάστε την 4η διάσταση παιδιά μου. (Όπως θα έλεγε και ο θεούλης Λαγκράντζ ). Χοντρικά όπως καταλαβαίνω ένα "point of view" του 3D. 🌊🏖️🍸🐷🩴🌴🫶🤓🩺🎵🎶

Ακριβώς! Χτύπησες φλέβα. Στις τρεις διαστάσεις, αυτό που βλέπουμε ως Tesseract (υπερκύβο) δεν είναι ο ίδιος ο υπερκύβος, αλλά η σκιά του ή η προβολή του στον δικό μας χώρο.

Είναι 100% ζήτημα "point of view" (οπτικής γωνίας), με τον ίδιο τρόπο που η σκιά ενός τρισδιάστατου κύβου πάνω σε έναν τοίχο είναι ένα δισδιάστατο τετράγωνο (ή εξάγωνο, ανάλογα πώς τον κρατάς).

Πώς το "βλέπουμε" στην πράξη;

Όταν βλέπεις ένα μοντέλο Tesseract να περιστρέφεται (αυτόν τον κύβο μέσα στον κύβο που οι ακμές τους ενώνονται), βλέπεις μια στερεογραφική προβολή.

  • Στην 4η διάσταση: Όλες οι ακμές έχουν το ίδιο μήκος και όλες οι γωνίες είναι 90°.

  • Στη δική μας 3D "ματιά": Οι εσωτερικές ακμές φαίνονται μικρότερες και οι γωνίες παραμορφωμένες.


Η σύνδεση με τον Lagrange και τα Quaternions

Εδώ η κουβέντα μας «κουμπώνει» τέλεια:

  1. Η 4η Διάσταση ως "Υπερ-πληροφορία": Όπως ο υπερκύβος χρειάζεται 4 συντεταγμένες $(x, y, z, w)$ για να οριστεί πλήρως, έτσι και η περιστροφή ενός δορυφόρου χρειάζεται τις 4 τιμές του Lagrange (το Quaternion) για να είναι πλήρης.

  2. Το Point of View του Δορυφόρου: Ο δορυφόρος «ζει» στις 3 διαστάσεις, αλλά ο υπολογιστής του «σκέφτεται» στις 4. Γιατί; Γιατί αν σκεφτόταν μόνο στις 3, θα είχε «τυφλά σημεία» (το Gimbal Lock που λέγαμε). Στις 4 διαστάσεις, ο δορυφόρος έχει μια πανοπτική θέα όλων των πιθανών περιστροφών χωρίς να κολλάει πουθενά.

Γιατί μας φαίνεται παράξενο;

Επειδή το "point of view" μας είναι περιορισμένο. Φαντάσου ένα 2D ον που ζει πάνω σε ένα τραπέζι. Αν περάσεις μια μπάλα (3D σφαίρα) μέσα από το τραπέζι, το ον θα δει ένα σημείο που γίνεται κύκλος, μεγαλώνει, μικραίνει και εξαφανίζεται.

Εμείς, βλέποντας τον Tesseract, βλέπουμε την 4D "μπάλα" να περνάει μέσα από το 3D "τραπέζι" μας.


Η πρακτική "μαγκιά" του Lagrange

Ο Lagrange είπε ουσιαστικά: "Μη φοβάστε την 4η διάσταση. Μπορεί να μην τη βλέπετε, αλλά μπορώ να σας δώσω τους κανόνες (τα 4 τετράγωνα) για να κάνετε υπολογισμούς μέσα σε αυτήν σαν να ήσασταν εκεί."


Δείτε το βίντεο "Star Trek: The Next Generation Intro HD" στο YouTube

https://youtu.be/HnDtvZXYHgE?is=KEq3Dk2lkWfOxAJ3 

✨🌙⚓"The Weekend Wars Episode No. 82🐒📺  💅🐷⚜️🫶🤓🩺🎵🎶


Δείτε το βίντεο "Verdi's Requiem: II. Dies Irae" στο YouTube

https://youtu.be/CUGMZlvrR4c?is=mbDK1EsZeemVTV-9 


✨🌙⚓ Λοιπόν, το σχέδιο είναι απλό, θα στείλουμε 5000 σαν τον Σβαρτζενέγκερ Χ100, 5000 σαν τον Ρόκι || x 10.000 και ένα στρατό ρόμποκοπ⚡⚡#Enjoy 📺 🍿🐷⚜️🫶🤓🩺🎵🎶

✨🌙⚓Μήλα Lagrange (pre release)1.0.0- τέσαρεκτ 1.0🤓

✨🌙⚓--- Σύστημα Τριπλής Εκτίμησης με Δυνατότητα Μάθησης ---


Δώσε 4 τιμές (π.χ. 10,20,30,40) ή 'exit': 1,0,0,0

🍎 1η Εκτίμηση: 'ΈΝΑ M'

👉 Είναι σωστό; (ν/ο): ν

💡 2η Εκτίμηση (Ερμηνεία): ένα

🔄 Επαλήθευση: Οι τιμές δείχνουν 'ΈΝΑ M'


Δώσε 4 τιμές (π.χ. 10,20,30,40) ή 'exit': Μήλα 4D 🍎🐷⚜️🫶🤓🩺🎵🎶


--- 🧠 Σύστημα Ενιαίας Πληρότητας & Οντοτήτων ---


Δώσε 4 τιμές (π.χ. 88,81,62,76): 1,0,0,0

🍎 Φάση 1: Αντιλαμβάνομαι την οντότητα '1 ΣΎΚΟ'

💡 Φάση 2 (Ερμηνεία): σύκο 1

✅ Επαλήθευση: Η περιοχή '1 ΣΎΚΟ' είναι ενιαία και στις δύο βάσεις.


Δώσε 4 τιμές (π.χ. 88,81,62,76): 0,3,0,0

🍎 Φάση 1: Αντιλαμβάνομαι την οντότητα '2 ΣΎΚΑ'

💡 Φάση 2 (Ερμηνεία): σύκα 2

⚠️ Η γέφυρα οδηγεί σε άλλη οντότητα. Χρειάζεται βαθύτερη χωρική ευθυγράμμιση.


Δώσε 4 τιμές (π.χ. 88,81,62,76):


✨🌙⚓⚠️ Η γέφυρα οδηγεί σε άλλη οντότητα. Χρειάζεται βαθύτερη χωρική ευθυγράμμιση. 🍎🐷⚜️🫶🤓🩺🎵🎶


Σύμφωνα με την Μηχανή ΤΝ ChatGPT, Μια πολύ βαθύτερη σκέψη, Στη σύγχρονη θεωρία AI υπάρχει η άποψη ότι: η νοημοσύνη δεν είναι τίποτα άλλο από την ικανότητα να ανακαλύπτεις manifolds στα δεδομένα.


Στο πρόβλημα μας, έχουμε δύο πίνακες, data1 και data 2. τα δεδομένα μας έχουν τέσσερις συντεταγμένες και μια ετικέτα. data1: ακέραιος αριθμός, ακέραιος αριθμός, ακέραιος αριθμός, ακέραιος αριθμός, "κάτι".  στο αρχείο data2 ακέραιος αριθμός, ακέραιος αριθμός, ακέραιος αριθμός, ακέραιος αριθμός, "κάτι". Οι συντεταγμένες αυτες ανάμεσα στους δύο πίνακες μπορεί και να σχετίζονται με μια συνάρτηση.


Υπάρχει συνάρτηση που τα συνδέει.


Η μάθηση πρέπει να προσπαθεί να ανακαλύψει αυτή την επιφάνεια.



θέλουμε το σύστημα να μάθει ξεκινώντας από συντεταγμένες που θα του δώσουμε στο command να δει πως σχετίζονται με ποια συνάρτηση οι δύο πίνακες, και να μας προβλέψει οι συντεταγμένες που θα του δώσουμε ακέραιος αριθμός, ακέραιος αριθμός, ακέραιος αριθμός, ακέραιος αριθμός. Σε ποιες συντεταγμένες πιστεύει ότι βρίσκονται πιο κοντά από το data1 και data2. και να μας τυπώσει τις ετικέτες τους. Δεν θέλουμε το σύστημα να είναι βλαμμένο και να συγκρίνει ετικέτες.


Θέλω να σκεφτεί ότι οι δύο πίνακες συνδέονται μεν με μια συνάρτηση. Και επιπλέον βρίσκονται σε κάποιον όγκο.


Θέλω να μιλήσουμε φιλοσοφικά. Σε μια διαδικασία "μάθησης" χρειαζόμαστε το κλειδί;


Άρα στην περίπτωση του γενικού ζητήματος που βάζουμε εδώ: 


. Μάθηση χωρίς κλειδί (ανακάλυψη δομής)

Εδώ δεν υπάρχει σωστή απάντηση.

Το σύστημα βλέπει μόνο δεδομένα και προσπαθεί να ανακαλύψει:

μοτίβα

ομάδες

γεωμετρία

σχέσεις

Φιλοσοφικά αυτό είναι η μάθηση της ανακάλυψης.

Παράδειγμα:

ταξινόμηση αντικειμένων χωρίς να ξέρουμε τα ονόματα

ανακάλυψη νόμων της φύσης

Στην AI:

unsupervised learning.


Η ChatGPT προτείνει ουσιαστικά ένα μικρό unsupervised manifold learner


Την παροτρύνω να το ολοκληρώσει σε κώδικα.


Αυτό που προτείνει η  ChatGPT είναι μικρογραφία μιας μεγάλης ιδέας στη σύγχρονη AI:

η γνώση είναι γεωμετρία πάνω σε manifold.


Και προτείνει κάτι πολύ πιο ισχυρό αλλά ακόμη μικρό σε κώδικα:

πώς να μετατρέψουμε αυτό το σύστημα σε true manifold learner που βρίσκει και τη συνάρτηση μεταξύ των δύο πινάκων (κάτι σαν μικρό self-supervised alignment model). Είναι ουσιαστικά το ίδιο είδος ιδέας που χρησιμοποιούν τα embedding models.


Αν θέλεις, μπορώ να σου δείξω το επόμενο βήμα που κάνει αυτό το σύστημα πολύ πιο κοντά σε πραγματική ΤΝ:

να το μετατρέψουμε σε self-organizing geometric learner που ανακαλύπτει μόνο του όχι μόνο τη συνάρτηση αλλά και τη διάσταση του manifold. Αυτό είναι ένα από τα πιο όμορφα μικρά πειράματα που μπορεί να κάνει κανείς στην AI


import numpy as np


DATA1 = "data1.csv"

DATA2 = "data2.csv"



# ----------------------------

# φόρτωση δεδομένων

# ----------------------------


def load_table(file):


    coords = []

    labels = []


    with open(file,"r",encoding="utf-8") as f:


        for line in f:


            p = line.strip().split(",")


            if len(p) != 5:

                continue


            vec = [int(p[0]),int(p[1]),int(p[2]),int(p[3])]

            label = p[4]


            coords.append(vec)

            labels.append(label)


    return np.array(coords), labels



# ----------------------------

# PCA

# ----------------------------


def pca(X):


    mean = np.mean(X,axis=0)


    Xc = X - mean


    cov = np.cov(Xc.T)


    eigvals,eigvecs = np.linalg.eig(cov)


    order = np.argsort(eigvals)[::-1]


    eigvals = eigvals[order]

    eigvecs = eigvecs[:,order]


    return mean,eigvals,eigvecs



# ----------------------------

# automatic manifold dimension

# ----------------------------


def intrinsic_dimension(eigvals):


    total = np.sum(eigvals)


    s = 0


    for i,v in enumerate(eigvals):


        s += v


        if s/total > 0.95:

            return i+1


    return len(eigvals)



# ----------------------------

# projection

# ----------------------------


def project(X,mean,eigvecs,k):


    return (X-mean) @ eigvecs[:,:k]



# ----------------------------

# alignment (Procrustes)

# ----------------------------


def align(A,B):


    Amean = A.mean(axis=0)

    Bmean = B.mean(axis=0)


    Ac = A-Amean

    Bc = B-Bmean


    U,_,Vt = np.linalg.svd(Ac.T @ Bc)


    R = U @ Vt


    return R,Amean,Bmean



# ----------------------------

# nearest

# ----------------------------


def nearest(vec,cloud):


    d = np.linalg.norm(cloud-vec,axis=1)


    return np.argmin(d)



# ----------------------------

# load

# ----------------------------


X1,L1 = load_table(DATA1)

X2,L2 = load_table(DATA2)


Xall = np.vstack([X1,X2])


# ----------------------------

# learn manifold geometry

# ----------------------------


mean,eigvals,eigvecs = pca(Xall)


k = intrinsic_dimension(eigvals)


print("Detected manifold dimension:",k)


M1 = project(X1,mean,eigvecs,k)

M2 = project(X2,mean,eigvecs,k)


# ----------------------------

# learn transformation

# ----------------------------


R,m1,m2 = align(M1,M2)


print("Manifold alignment learned.")



# ----------------------------

# interactive

# ----------------------------


while True:


    cmd = input("\nΔώσε 4 ακέραιους ή exit: ")


    if cmd=="exit":

        break


    try:


        x = np.array([int(v) for v in cmd.split(",")])


        xm = project(x.reshape(1,-1),mean,eigvecs,k)[0]


        i1 = nearest(xm,M1)


        xm2 = (xm-m1)@R + m2


        i2 = nearest(xm2,M2)


        print("\nClosest DATA1")

        print(X1[i1],L1[i1])


        print("\nPredicted position in DATA2 manifold")

        print(np.round(xm2,2))


        print("\nClosest DATA2")

        print(X2[i2],L2[i2])


    except:


        print("Λάθος είσοδος.")


Μήπως επιπλέον πρέπει να πάμε στην ιδέα του Self-Organizing χώρου;


Και Τελικά μήπως Δεν μπορεί να γίνει χωρίς Έστω 1 κλειδί; Ή μία παρότρυνση; 


Και τελικά πρέπει να ενσωματώσουμε αυτή την ιδέα στον κώδικα ώστε οι νευρώνες να ανακαλύπτουν τη συνάρτηση μεταξύ data1 και data2 χωρίς ποτέ να βλέπουν labels. Στο προηγούμενο κώδικα κάτι πήγε να γίνει στις ενδιάμεσες τιμές πάντως. Κάτι χάνει στα άκρα αλλά αυτό ίσως είναι τυχαίο. 


💡 Φιλοσοφική σκέψη της ChatGPT:

Ο άνθρωπος μαθαίνει χωρίς κλειδί. Το “σήμα” του είναι η δομή του κόσμου γύρω του.

Η AI μπορεί να κάνει το ίδιο: μαθαίνει manifolds από data, ανακαλύπτει σχέσεις, χωρίς να ξέρει τι σημαίνει κάθε label.

Ο “κόσμος” λειτουργεί σαν το self-organizing signal.


Απλά πρέπει να ανακαλύπτει μόνο του την συνάρτηση.



Χμμμμμ....🤓 


Πάντως το κλειδί ή η συνάρτηση αν θέλετε κρύβεται εκ των πραγμάτων στη Δομή των δύο πινάκων.


Επίσης ΔΕΝ υπάρχει γνωστή πιθανότητα παραπάνω απο μία συναρτήσεις.


Δεν έχω ιδέα τι κάνει ο προτεινόμενος κώδικας, δεν καταλήγει σε ακριβή συνάρτηση και σε εξαιρετικά κοντινή συσχέτιση πάντα ακόμα σε αναλυτικά στοιχεία δεδομένων στα δύο αρχεία που είναι ακριβώς αντικρυστά. 


Ίσως λίγη προσπάθεια ακόμα. Να γίνει τόσο καλό ώστε να χειρίζεται τις συντεταγμένες σαν ετικέτα αντί να ψάχνει την συνάρτηση Object όλα ή περίπλου όλα 🤓



import numpy as np

from sklearn.decomposition import PCA

from sklearn.neural_network import MLPRegressor


DATA1 = "data1.csv"

DATA2 = "data2.csv"


# ----------------------------

# φόρτωση δεδομένων

# ----------------------------

def load_table(file):

    coords = []

    labels = []

    with open(file,"r",encoding="utf-8") as f:

        for line in f:

            p = line.strip().split(",")

            if len(p) != 5:  # 4 συντεταγμένες + label

                continue

            vec = [int(p[0]),int(p[1]),int(p[2]),int(p[3])]

            label = p[4]

            coords.append(vec)

            labels.append(label)

    return np.array(coords), labels


# ----------------------------

# φόρτωση

# ----------------------------

X1, L1 = load_table(DATA1)

X2, L2 = load_table(DATA2)


# ----------------------------

# PCA για κοινό manifold

# ----------------------------

Xall = np.vstack([X1, X2])

pca = PCA(n_components=4)  # μπορούμε να αφήσουμε πλήρες ή να αυτορυθμιστεί

Xall_pca = pca.fit_transform(Xall)


# χωρίζουμε ξανά

M1 = Xall_pca[:len(X1)]

M2 = Xall_pca[len(X1):]


print("Detected manifold dimension (PCA):", M1.shape[1])


# ----------------------------

# μαθαίνουμε mapping M1 -> M2 με μικρό νευρωνικό δίκτυο

# ----------------------------

mlp = MLPRegressor(hidden_layer_sizes=(32,32), activation='relu', max_iter=5000)

mlp.fit(M1, M2)

print("Mapping learned.")


# ----------------------------

# interactive προβλέψεις

# ----------------------------

while True:

    cmd = input("\nΔώσε 4 ακέραιους ή 'exit': ")

    if cmd.lower() == "exit":

        break

    try:

        x = np.array([int(v) for v in cmd.split(",")]).reshape(1,-1)

        xm = pca.transform(x)  # προβολή στο manifold

        xm2 = mlp.predict(xm)  # προβλεπόμενη θέση στο M2


        # nearest neighbors για labels

        i1 = np.argmin(np.linalg.norm(M1 - xm, axis=1))

        i2 = np.argmin(np.linalg.norm(M2 - xm2, axis=1))


        print("\nClosest DATA1")

        print(X1[i1], L1[i1])

        print("\nPredicted position in DATA2 manifold")

        print(np.round(xm2,2))

        print("\nClosest DATA2")

        print(X2[i2], L2[i2])

    except:

        print("Λάθος είσοδος. Δώσε 4 ακέραιους χωρισμένους με κόμμα.")


Detected manifold dimension (PCA): 4Mapping learned.


Δώσε 4 ακέραιους ή 'exit': 1,0,0,0


Closest DATA1

[ 1 -1  0  0] 2


Predicted position in DATA2 manifold[[ 0.01 -0.3   0.15  1.09]]


Closest DATA2

[1 0 0 0] 1


Δώσε 4 ακέραιους ή 'exit': 1,0,0,1


Closest DATA1

[0 0 0 1] 1


Predicted position in DATA2 manifold[[-0.04  0.97  0.11  1.  ]]


Closest DATA2

[1 1 1 0] 3


Δώσε 4 ακέραιους ή 'exit': 3,0,2,1


Closest DATA1

[3 0 2 0] 13


Predicted position in DATA2 manifold[[ 1.37 -7.53  9.41  2.37]]


Closest DATA2

[ 1  7 -7  1] 100


Δώσε 4 ακέραιους ή 'exit': 1,0,0,1


Closest DATA1

[0 0 0 1] 1


Predicted position in DATA2 manifold[[-0.04  0.97  0.11  1.  ]]


Closest DATA2

[1 1 1 0] 3


Δώσε 4 ακέραιους ή 'exit': 6,6,0,1


Closest DATA1

[6 6 0 1] 73


Predicted position in DATA2 manifold[[0.05 1.06 5.93 6.  ]]


Closest DATA2

[6 6 1 0] 73


Δώσε 4 ακέραιους ή 'exit': 7,1,4,0


Closest DATA1

[7 0 4 0] 65


Predicted position in DATA2 manifold[[0.1  0.39 4.36 7.12]]


Closest DATA2

[7 4 0 0] 65


Δώσε 4 ακέραιους ή 'exit': 0,4,1,7


Closest DATA1

[0 4 0 7] 65


Predicted position in DATA2 manifold[[1.48 4.7  6.03 0.03]]


Closest DATA2

[0 6 5 1] 62


Δώσε 4 ακέραιους ή 'exit': 4,1,7,0


Closest DATA1

[4 0 7 0] 65


Predicted position in DATA2 manifold[[0.09 0.42 7.43 3.99]]


Closest DATA2

[4 7 0 0] 65


Δώσε 4 ακέραιους ή 'exit': 4,5,0,1


Closest DATA1

[4 5 0 1] 42


Predicted position in DATA2 manifold[[-0.08  1.05  5.09  3.89]]


Closest DATA2

[4 5 1 0] 42


Δώσε 4 ακέραιους ή 'exit': 0,1,5,4


Closest DATA1

[-1  0  5  0] 26


Predicted position in DATA2 manifold[[  8.52 -22.57  26.08  -1.35]]


Closest DATA2

[-1  7 -7  1] 100


Δώσε 4 ακέραιους ή 'exit':


Δεν είπα ότι μας ενδιαφέρει η ανθρώπινη ζωή, για οικονομία πυρομαχικών προτείνουμε χαρτί και μολύβι, καλύτερες παρατηρήσεις των αεροφωτογραφιών& επιβεβαίωση των στόχων με στοιχειώδη σοβαρότητα.🍫🍼🐷⚜️🫶🤓🩺🎵🎶



Αν ψάχναμε λαγούμια δεν είναι απαραίτητο ότι τα λαγούμια έχουν κατασκευαστεί με βάση κάποια συνάρτηση. Ή μάλλον τις συνθήκες του εδάφους, την εγγύτητα σε δρόμους, άλλες εγκαταστάσεις, ή τοποθεσίες. Επίσης οι τοποθεσίες κατασκευής των λαγουμιων μπορεί να είναι γνήσια τυχαίες.


Παρόλα αυτά, συχνά πυκνά γίνεται λόγος για επιλογή στόχων με βάση την λεγόμενη τεχνητή νοημοσύνη. 



Πήραμε δύο πίνακες με τέσσερις συντεταγμένες.

Τα στοιχεία του ενός πίνακα συσχετίζονται στην Δομή τους απο μία απλή συνάρτηση x^2+y^2+z^2+w^2


Εγώ έχω ελάχιστη σχέση με τον προγραμματισμό, ανέθεσα την εργασία σε μηχανές Μεταφυσικών Νοημάτων.


Η συνάρτηση Δεν έγινε ακόμα δυνατόν να προσεγγιστεί. Με σταθερότητά και βεβαιότητα μετά από πολλούς ελέγχους. 


Τελικά οι προτεινόμενες λύσεις δεν αποφεύγουν την Ντετερμινιστική τους τάση στην Οπτικοποίηση, δηλαδή Ετικετοποίηση του προβλήματος. 


Τι πρακτικά σημαίνει αυτό. Αν δεν μπορεί να γίνει στατιστικό συμπέρασμα από δύο πίνακες με απόλυτη συσχέτιση στη Δομή τους. Η εργασία μου μέχρι στιγμής λέει Κλάφτα Χαράλαμπε. 



✨🌙⚓Όσο επικίνδυνο ένα στραβό τρίγωνο για ένα μαραγκό: Άρα, συνοψίζοντας μέχρι στιγμής, συχνά πυκνά μπαίνει το ερώτημα, είναι επικίνδυνα τα μεταφυσικά νοήματα; Ή ένας λάθος χάρτης για έναν υπεύθυνο αξιωματικό επιλογής στόχων.🍫🍼🐷⚜️🫶🤓🩺🎵🎶



Τέλος 


Αν οι ετικέτες τους ήταν αριθμός και είναι τελικά εκεί συνδέονται στο χώρο. Μπορείς να μου κάνεις την πρόταση σου ολοκληρωμένη



τα δεδομένα είναι σημεία σε όγκο

κάθε σημείο έχει 4 χαρακτηριστικά

υπάρχει αμφίπλευρη συνάρτηση

οι ετικέτες είναι αριθμοί

οι δύο πίνακες συνδέονται στον χώρο.


Ο κώδικας που έφτιαξες κάνει:

PCA

projection

neural mapping

Αλλά υπάρχει ένα θεμελιώδες πρόβλημα:

Το PCA ισιώνει τη γεωμετρία.


Το πρόβλημα σου είναι manifold alignment


✨🌙⚓Διορθωμένος & Βελτιστοποιημένος Κώδικας (Manifold Alignment για Mobile)🔥🍂☕🐷⚜️🫶🤓🩺🎵🎶

import numpy as np
from sklearn.kernel_approximation import Nystroem
from sklearn.linear_model import Ridge
from sklearn.neighbors import NearestNeighbors

# --- Φόρτωση (ίδια με πριν, αλλά με έλεγχο τύπου) ---
def load_data(file):
    coords, labels = [], []
    try:
        with open(file, "r", encoding="utf-8") as f:
            for line in f:
                p = line.strip().split(",")
                if len(p) < 5: continue
                coords.append([float(x) for x in p[:4]])
                labels.append(p[4].strip())
        return np.array(coords, dtype=np.float32), np.array(labels)
    except Exception as e:
        print(f"Error loading {file}: {e}")
        return None, None

X1, L1 = load_data("data1.csv")
X2, L2 = load_data("data2.csv")

if X1 is not None and X2 is not None:
    print(f"Data loaded: {len(X1)} points.")

    # 1. LANDMARK SELECTION (Self-Organization)
    # Αντί για N x N, φτιάχνουμε έναν χάρτη με 300 βασικά σημεία "φάρους"
    n_components = min(len(X1), 300) 
    feature_map = Nystroem(kernel='rbf', gamma=0.1, n_components=n_components, random_state=42)
    
    print("Extracting manifold features...")
    X1_features = feature_map.fit_transform(X1)
    
    # 2. LEARNING THE TRANSFORMATION
    # Χρησιμοποιούμε απλό Ridge πάνω στα χαρακτηριστικά του Manifold
    # Αυτό είναι ΠΟΛΥ πιο γρήγορο και δεν κρασάρει
    print("Learning geometric mapping...")
    model = Ridge(alpha=1.0)
    model.fit(X1_features, X2)

    # 3. NEIGHBORHOOD STRUCTURE
    nn1 = NearestNeighbors(n_neighbors=1).fit(X1)
    nn2 = NearestNeighbors(n_neighbors=1).fit(X2)

    print("System Ready. Manifold aligned successfully.")

    while True:
        cmd = input("\nΔώσε 4 συντεταγμένες ή 'exit': ")
        if cmd.lower() == 'exit': break
        
        try:
            x_input = np.array([float(v) for v in cmd.split(",")], dtype=np.float32).reshape(1, -1)
            
            # Βρίσκουμε πού ανήκει το σημείο στο Manifold του Data1
            x_feat = feature_map.transform(x_input)
            
            # Προβλέπουμε τη θέση του στον όγκο του Data2
            x_pred_2 = model.predict(x_feat)
            
            # Ταυτοποίηση
            _, idx1 = nn1.kneighbors(x_input)
            _, idx2 = nn2.kneighbors(x_pred_2)
            
            print(f"\n[DATA 1] Closest: {X1[idx1[0][0]]} | Label: {L1[idx1[0][0]]}")
            print(f"[PREDICTION] Map to Data2: {np.round(x_pred_2[0], 2)}")
            print(f"[DATA 2] Closest: {X2[idx2[0][0]]} | Label: {L2[idx2[0][0]]}")
            
        except Exception as e:
            print(f"Error: {e}")


Data loaded: 24844 points.
Extracting manifold features...
Learning geometric mapping...
/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.13/site-packages/sklearn/utils/extmath.py:203: RuntimeWarning: invalid value encountered in matmul
  ret = a @ b
System Ready. Manifold aligned successfully.

Δώσε 4 συντεταγμένες ή 'exit': 1,0,0,0

[DATA 1] Closest: [ 1. -1.  0.  0.] | Label: 2
[PREDICTION] Map to Data2: [ 1.85 -0.03  0.42 -0.52]
[DATA 2] Closest: [2. 0. 0. 0.] | Label: 4

Δώσε 4 συντεταγμένες ή 'exit': 5,0,0,1

[DATA 1] Closest: [ 5. -1.  0.  1.] | Label: 27
[PREDICTION] Map to Data2: [ 4.32  0.55  1.34 -0.46]
[DATA 2] Closest: [4. 1. 1. 0.] | Label: 18

Δώσε 4 συντεταγμένες ή 'exit': 7,1,0,0

[DATA 1] Closest: [ 7.  1. -1.  0.] | Label: 51
[PREDICTION] Map to Data2: [6.96 1.26 0.46 0.11]
[DATA 2] Closest: [7. 1. 0. 0.] | Label: 50

Δώσε 4 συντεταγμένες ή 'exit': 5,5,0,1

[DATA 1] Closest: [5. 5. 0. 1.] | Label: 51
[PREDICTION] Map to Data2: [ 5.91  5.75  1.   -0.22]
[DATA 2] Closest: [6. 6. 1. 0.] | Label: 73

Δώσε 4 συντεταγμένες ή 'exit': 6,6,0,0

[DATA 1] Closest: [ 6.  6. -1.  0.] | Label: 73
[PREDICTION] Map to Data2: [6.13 6.78 0.44 0.46]
[DATA 2] Closest: [6. 7. 0. 0.] | Label: 85

Δώσε 4 συντεταγμένες ή 'exit': 0,4,2,1

[DATA 1] Closest: [ 0.  4.  2. -1.] | Label: 21
[PREDICTION] Map to Data2: [0.   3.09 1.74 0.1 ]
[DATA 2] Closest: [0. 3. 2. 0.] | Label: 13

Δώσε 4 συντεταγμένες ή 'exit': 4,0,1,2

[DATA 1] Closest: [ 4. -1.  0.  2.] | Label: 21
[PREDICTION] Map to Data2: [ 3.63  0.88  1.86 -0.18]
[DATA 2] Closest: [4. 1. 2. 0.] | Label: 21

Δώσε 4 συντεταγμένες ή 'exit':

✨🌙⚓ Κάτι πάει να γίνει εκ νέου με "Βομβαρδισμούς" Nearest Neighbours "Bombing" (τι να κάνουμε;) #Χορηγούμενη🔥🍂☕🐷⚜️🫶🤓🩺🎵🎶


Δεδομένα φορτώθηκαν: 24844 σημεία.
Ανακάλυψη εσωτερικής γεωμετρίας...
Εκπαίδευση αμφίπλευρης συνάρτησης (Manifold Alignment)...
/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.13/site-packages/sklearn/utils/extmath.py:203: RuntimeWarning: invalid value encountered in matmul
  ret = a @ b
----------------------------------------
ΣΥΣΤΗΜΑ ΕΤΟΙΜΟ: Η γεωμετρία έχει χαρτογραφηθεί.
----------------------------------------

Δώσε 4 συντεταγμένες (π.χ. 10,0,5,1) ή 'exit': 6,0,6,1

>>> ΑΠΟΤΕΛΕΣΜΑΤΑ <<<
[DATA 1] Πλησιέστερο Σημείο: [6. 0. 6. 0.]
[DATA 1] Ετικέτα: 72

[MANIFOLD] Προβλεπόμενη θέση στον όγκο του DATA 2:
          [5.971 4.025 1.314 0.563]

[DATA 2] Πλησιέστερο Σημείο: [6. 4. 1. 1.]
[DATA 2] Ετικέτα: 54
-------------------------

Δώσε 4 συντεταγμένες (π.χ. 10,0,5,1) ή 'exit': 6,6,0,0

>>> ΑΠΟΤΕΛΕΣΜΑΤΑ <<<
[DATA 1] Πλησιέστερο Σημείο: [ 6.  6. -1.  0.]
[DATA 1] Ετικέτα: 73

[MANIFOLD] Προβλεπόμενη θέση στον όγκο του DATA 2:
          [6.01  6.015 0.538 0.356]

[DATA 2] Πλησιέστερο Σημείο: [6. 6. 1. 0.]
[DATA 2] Ετικέτα: 73
-------------------------

Δώσε 4 συντεταγμένες (π.χ. 10,0,5,1) ή 'exit': 7,0,0,1

>>> ΑΠΟΤΕΛΕΣΜΑΤΑ <<<
[DATA 1] Πλησιέστερο Σημείο: [ 7. -1.  0.  1.]
[DATA 1] Ετικέτα: 51

[MANIFOLD] Προβλεπόμενη θέση στον όγκο του DATA 2:
          [ 7.029  0.219  0.859 -0.228]

[DATA 2] Πλησιέστερο Σημείο: [7. 1. 1. 0.]
[DATA 2] Ετικέτα: 51
-------------------------

Δώσε 4 συντεταγμένες (π.χ. 10,0,5,1) ή 'exit': 6,0,3,3

>>> ΑΠΟΤΕΛΕΣΜΑΤΑ <<<
[DATA 1] Πλησιέστερο Σημείο: [6. 0. 3. 0.]
[DATA 1] Ετικέτα: 45

[MANIFOLD] Προβλεπόμενη θέση στον όγκο του DATA 2:
          [ 6.011  3.854 -2.717  4.095]

[DATA 2] Πλησιέστερο Σημείο: [ 6.  4. -3.  4.]
[DATA 2] Ετικέτα: 77
-------------------------

Δώσε 4 συντεταγμένες (π.χ. 10,0,5,1) ή 'exit': 3,2,1,0

>>> ΑΠΟΤΕΛΕΣΜΑΤΑ <<<
[DATA 1] Πλησιέστερο Σημείο: [ 3.  2.  1. -1.]
[DATA 1] Ετικέτα: 15

[MANIFOLD] Προβλεπόμενη θέση στον όγκο του DATA 2:
          [2.976 2.2   0.707 0.923]

[DATA 2] Πλησιέστερο Σημείο: [3. 2. 1. 1.]
[DATA 2] Ετικέτα: 15
-------------------------

Δώσε 4 συντεταγμένες (π.χ. 10,0,5,1) ή 'exit': 1,9,0,0

>>> ΑΠΟΤΕΛΕΣΜΑΤΑ <<<
[DATA 1] Πλησιέστερο Σημείο: [ 1.  9. -1.  0.]
[DATA 1] Ετικέτα: 83

[MANIFOLD] Προβλεπόμενη θέση στον όγκο του DATA 2:
          [1.278 8.763 0.479 0.367]

[DATA 2] Πλησιέστερο Σημείο: [1. 9. 0. 0.]
[DATA 2] Ετικέτα: 82
-------------------------

Δώσε 4 συντεταγμένες (π.χ. 10,0,5,1) ή 'exit': 9,3,1,1

>>> ΑΠΟΤΕΛΕΣΜΑΤΑ <<<
[DATA 1] Πλησιέστερο Σημείο: [9. 3. 0. 1.]
[DATA 1] Ετικέτα: 91

[MANIFOLD] Προβλεπόμενη θέση στον όγκο του DATA 2:
          [8.958 3.333 1.112 0.615]

[DATA 2] Πλησιέστερο Σημείο: [9. 3. 1. 1.]
[DATA 2] Ετικέτα: 92
-------------------------

Δώσε 4 συντεταγμένες (π.χ. 10,0,5,1) ή 'exit': 7,0,7,0

>>> ΑΠΟΤΕΛΕΣΜΑΤΑ <<<
[DATA 1] Πλησιέστερο Σημείο: [7. 0. 7. 0.]
[DATA 1] Ετικέτα: 98

[MANIFOLD] Προβλεπόμενη θέση στον όγκο του DATA 2:
          [6.891 2.709 4.128 0.23 ]

[DATA 2] Πλησιέστερο Σημείο: [7. 3. 4. 0.]
[DATA 2] Ετικέτα: 74
-------------------------

Δώσε 4 συντεταγμένες (π.χ. 10,0,5,1) ή 'exit':


✨🌙⚓ Nice Try🔥🍂☕🐷⚜️🫶🤓🩺🎵🎶


Μια ακόμα "καλή προσπάθεια" με PCA

✨🌙Μια ακόμη "καλή & φιλότιμη" προσπάθεια με PCA + MLPRegressor, αλλά με προσοχή στη self-supervised αντιστοίχιση: Hint:Vibrator#Fail🔥🍂☕🐷⚜️🫶🤓🩺🎵🎶

import numpy as np
from sklearn.decomposition import PCA
from sklearn.neural_network import MLPRegressor

DATA1 = "data1.csv"
DATA2 = "data2.csv"

# ----------------------------
# φόρτωση δεδομένων
# ----------------------------
def load_table(file):
    coords = []
    labels = []
    with open(file,"r",encoding="utf-8") as f:
        for line in f:
            p = line.strip().split(",")
            if len(p) != 5:  # 4 συντεταγμένες + label
                continue
            vec = [int(p[0]), int(p[1]), int(p[2]), int(p[3])]
            label = p[4]
            coords.append(vec)
            labels.append(label)
    return np.array(coords), labels

X1, L1 = load_table(DATA1)
X2, L2 = load_table(DATA2)

# ----------------------------
# PCA για κοινό manifold
# ----------------------------
Xall = np.vstack([X1, X2])
pca = PCA(n_components=4)
Xall_pca = pca.fit_transform(Xall)

M1 = Xall_pca[:len(X1)]
M2 = Xall_pca[len(X1):]

print("Detected manifold dimension (PCA):", M1.shape[1])

# ----------------------------
# μαθαίνουμε mapping M1 -> M2
# ----------------------------
mlp = MLPRegressor(hidden_layer_sizes=(64,64), activation='relu', max_iter=5000)
mlp.fit(M1, M2)
print("Mapping learned (self-supervised).")

# ----------------------------
# interactive προβλέψεις
# ----------------------------
while True:
    cmd = input("\nΔώσε 4 ακέραιους ή 'exit': ")
    if cmd.lower() == "exit":
        break
    try:
        x = np.array([int(v) for v in cmd.split(",")]).reshape(1,-1)
        xm = pca.transform(x)                 # προβολή στο manifold
        xm2 = mlp.predict(xm)                 # εκτίμηση στο M2

        # nearest neighbors για ετικέτες
        i1 = np.argmin(np.linalg.norm(M1 - xm, axis=1))
        i2 = np.argmin(np.linalg.norm(M2 - xm2, axis=1))

        print("\nClosest DATA1")
        print(X1[i1], L1[i1])
        print("\nPredicted position in DATA2 manifold")
        print(np.round(xm2, 2))
        print("\nClosest DATA2")
        print(X2[i2], L2[i2])

    except:
        print("Λάθος είσοδος. Δώσε 4 ακέραιους χωρισμένους με κόμμα.")


Detected manifold dimension (PCA): 4Mapping learned (self-supervised).

Δώσε 4 ακέραιους ή 'exit': 1,6,6,0

Closest DATA1
[ 1  6  6 -1] 74

Predicted position in DATA2 manifold[[0.08 2.51 8.84 1.31]]

Closest DATA2
[1 9 3 0] 91

Δώσε 4 ακέραιους ή 'exit': 2,3,0,0

Closest DATA1
[ 2  3 -1  0] 14

Predicted position in DATA2 manifold[[-0.13  0.07  0.87  4.14]]

Closest DATA2
[4 1 0 0] 17

Δώσε 4 ακέραιους ή 'exit': 7,0,0,2

Closest DATA1
[ 7 -1  0  2] 54

Predicted position in DATA2 manifold[[-0.01  2.01 -0.06  7.  ]]

Closest DATA2
[ 7 -1  2  0] 54

Δώσε 4 ακέραιους ή 'exit': 6,0,0,0

Closest DATA1
[ 6 -1  0  0] 37

Predicted position in DATA2 manifold[[ 0.02 -0.08  0.13  5.89]]

Closest DATA2
[6 0 0 0] 36

Δώσε 4 ακέραιους ή 'exit': 0,6,0,0

Closest DATA1
[0 6 0 0] 36

Predicted position in DATA2 manifold[[-0.04  0.01  0.06  5.94]]

Closest DATA2
[6 0 0 0] 36

Δώσε 4 ακέραιους ή 'exit': 0,0,0,6

Closest DATA1
[0 0 0 6] 36

Predicted position in DATA2 manifold[[-0.03  6.08 -0.16  0.04]]

Closest DATA2
[0 0 6 0] 36

Δώσε 4 ακέραιους ή 'exit': 0,0,3,5

Closest DATA1
[0 0 0 5] 25

Predicted position in DATA2 manifold[[ 2.81 -4.02  4.86  1.24]]

Closest DATA2
[ 1  5 -4  3] 51

Δώσε 4 ακέραιους ή 'exit':

Δημοφιλείς αναρτήσεις