Ένας οδηγός για την πρόβλεψη συνδέσεων - Πώς να προβλέψετε τις μελλοντικές σας συνδέσεις στο Facebook

ΣΦΑΙΡΙΚΗ ΕΙΚΟΝΑ

  • Μια εισαγωγή για να συνδέσετε την πρόβλεψη, πώς λειτουργεί και πού μπορείτε να την χρησιμοποιήσετε στον πραγματικό κόσμο
  • Μάθετε για τη σημασία του Link Prediction στα κοινωνικά μέσα ενημέρωσης
  • Δημιουργήστε το πρώτο μοντέλο πρόβλεψης συνδέσεων για μια περίπτωση χρήσης του Facebook που χρησιμοποιεί το Python

Εισαγωγή

Έχετε αναρωτηθεί ποτέ ποια θα είναι η επόμενη σύνδεσή σας στο Facebook; Περίεργος ποιος θα έρθει από το επόμενο αίτημα;

Τι θα λέγατε αν σας είπα ότι υπήρχε ένας τρόπος να προβλεφθεί αυτό;

Μου αρέσει το brainstorming και έρχονται με αυτές τις δηλώσεις προβλημάτων όταν περιηγώ στο λογαριασμό μου στο Facebook. Είναι ένα από τα πλεονεκτήματα της νοοτροπίας ενός επιστήμονα δεδομένων!

Οι περισσότερες πλατφόρμες κοινωνικών μέσων, όπως το Facebook, μπορούν να δομηθούν ως γραφικές παραστάσεις. Οι εγγεγραμμένοι χρήστες διασυνδέονται σε ένα σύμπαν δικτύων. Και για να δουλέψουμε σε αυτά τα δίκτυα και γραφήματα, χρειαζόμαστε ένα διαφορετικό σύνολο προσεγγίσεων, εργαλείων και αλγορίθμων (αντί των παραδοσιακών μεθόδων μηχανικής μάθησης).

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

Σας συνιστώ να περάσετε από τα παρακάτω άρθρα για να δείτε τι γραφικά είναι και πώς λειτουργούν:

Πίνακας περιεχομένων

  1. Μια επισκόπηση των κοινωνικών δικτύων Analytics
  2. Ένα πρότυπο για την πρόβλεψη συνδέσεων
  3. Στρατηγική για την επίλυση προβλήματος πρόβλεψης συνδέσμων
  4. Μελέτη περίπτωσης: Προβλέψτε τις μελλοντικές συνδέσεις μεταξύ σελίδων στο Facebook - Κατανόηση των δεδομένων - Μοντέλο προετοιμασίας μοντέλου κτιρίου - Εξαγωγή χαρακτηριστικών - Κτίριο μοντέλων: Μοντέλο πρόβλεψης συνδέσεων

Μια επισκόπηση των κοινωνικών δικτύων Analytics

Ας ορίσουμε πρώτα ένα κοινωνικό δίκτυο προτού καταδυθούμε στην έννοια της πρόβλεψης συνδέσμων.

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

Οι αλληλεπιδράσεις μεταξύ αυτών των οντοτήτων δημιουργούν αδιανόητες ποσότητες δεδομένων με τη μορφή μηνυμάτων, μηνυμάτων συνομιλίας, tweets, likes, σχολίων, μετοχών κλπ. Αυτό ανοίγει ένα παράθυρο ευκαιριών και χρησιμοποιεί περιπτώσεις στις οποίες μπορούμε να εργαστούμε.

Αυτό μας φέρνει στο Analytics κοινωνικών δικτύων (SNA). Μπορούμε να το ορίσουμε ως συνδυασμό πολλών δραστηριοτήτων που εκτελούνται σε κοινωνικά μέσα. Αυτές οι δραστηριότητες περιλαμβάνουν τη συλλογή δεδομένων από ιστότοπους κοινωνικής δικτύωσης σε απευθείας σύνδεση και τη χρήση αυτών των δεδομένων για τη λήψη επιχειρηματικών αποφάσεων.

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

  • Σας βοηθά να κατανοήσετε καλύτερα το κοινό σας
  • Χρησιμοποιείται για την κατάτμηση των πελατών
  • Χρησιμοποιείται για το σχεδιασμό συστημάτων συστάσεων
  • Ανιχνεύστε ψεύτικα νέα, μεταξύ άλλων

Ένα πρότυπο για την πρόβλεψη συνδέσεων

Η πρόβλεψη συνδέσεων είναι ένα από τα πιο σημαντικά ερευνητικά θέματα στον τομέα των γραφημάτων και των δικτύων. Ο στόχος της πρόβλεψης συνδέσεων είναι να προσδιοριστούν τα ζεύγη κόμβων που είτε θα σχηματίζουν ένα σύνδεσμο είτε όχι στο μέλλον.

Η πρόβλεψη του συνδέσμου έχει έναν τόνο χρήσης σε πραγματικές εφαρμογές. Εδώ είναι μερικές από τις σημαντικές περιπτώσεις χρήσης της πρόβλεψης σύνδεσης:

  • Προβλέψτε ποιοι πελάτες είναι πιθανό να αγοράσουν ποια προϊόντα σε online αγορές όπως το Amazon. Μπορεί να σας βοηθήσει να κάνετε καλύτερες προτάσεις προϊόντων
  • Προτείνετε αλληλεπιδράσεις ή συνεργασίες μεταξύ εργαζομένων σε έναν οργανισμό
  • Εξάγει ζωτικές πληροφορίες από τρομοκρατικά δίκτυα

Σε αυτό το άρθρο, θα διερευνήσουμε μια ελαφρώς διαφορετική περίπτωση χρήσης της πρόβλεψης συνδέσεων - την πρόβλεψη συνδέσεων σε ένα κοινωνικό δίκτυο στο διαδίκτυο!

Στρατηγική για την επίλυση προβλήματος πρόβλεψης συνδέσμων

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

Ας πάρουμε ένα ψεύτικο γράφημα για να καταλάβουμε αυτή την ιδέα. Δίνεται παρακάτω ένα γράφημα 7 κόμβων και τα μη συνδεδεμένα ζεύγη κόμβων είναι AF, BD, BE, BG και EG:

Γράφημα στην ώρα t

Τώρα, ας υποθέσουμε ότι αναλύουμε τα δεδομένα και καταλήξαμε στο παρακάτω γράφημα. Λήφθηκαν μερικές νέες συνδέσεις (κόκκινες συνδέσεις):

Γράφημα στην ώρα t + n

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

Στόχος μας είναι να προβλέψουμε αν θα υπάρξει σύνδεση μεταξύ οποιωνδήποτε 2 μη συνδεδεμένων κόμβων. Από το δίκτυο στο χρόνο t, μπορούμε να εξαγάγουμε τα ακόλουθα ζεύγη κόμβων που δεν έχουν κανέναν σύνδεσμο μεταξύ τους:

  1. AF
  2. BD
  3. ΕΙΝΑΙ
  4. BG
  5. Π.Χ

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

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

Κοιτάξτε το γράφημα στην ώρα t + n. Μπορούμε να δούμε ότι υπάρχουν τρεις νέες συνδέσεις στο δίκτυο για τα ζεύγη AF, BD και BE αντίστοιχα. Επομένως, θα εκχωρήσουμε σε κάθε μια από αυτές μια τιμή 1. Τα ζεύγη κόμβων BG και EG θα εκχωρηθούν 0 επειδή δεν υπάρχουν ακόμη σύνδεσμοι μεταξύ των κόμβων.

Ως εκ τούτου, τα δεδομένα θα μοιάζουν με αυτό:

Τώρα που έχουμε τη μεταβλητή στόχο, μπορούμε να δημιουργήσουμε ένα μοντέλο μηχανικής μάθησης χρησιμοποιώντας αυτά τα δεδομένα για να πραγματοποιήσουμε την πρόβλεψη της σύνδεσης.

Έτσι, έτσι πρέπει να χρησιμοποιήσουμε κοινωνικά γραφήματα σε δύο διαφορετικές χρονικές στιγμές για να εξαγάγουμε τη μεταβλητή στόχο, δηλαδή την ύπαρξη σύνδεσης μεταξύ ενός ζεύγους κόμβων. Λάβετε υπόψη, ωστόσο, ότι σε σενάρια πραγματικού κόσμου, θα έχουμε μόνο δεδομένα της σημερινής εποχής.

Εξαγάγετε δεδομένα από ένα γράφημα για την κατασκευή του μοντέλου σας

Στην παραπάνω ενότητα μπορούσαμε να πάρουμε ετικέτες για τη μεταβλητή στόχου επειδή είχαμε πρόσβαση στο γράφημα την ώρα t + n. Ωστόσο, σε σενάρια πραγματικού κόσμου, θα έχουμε στη διάθεσή μας ένα μόνο σύνολο γραφημάτων. Αυτό είναι!

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

Τα ζεύγη υποψήφιων κόμβων, τα οποία μπορούν να σχηματίσουν έναν σύνδεσμο σε μελλοντικό χρόνο, είναι (1 & 2), (2 & 4), (5 & 6), (8 & 10) κ.ο.κ. Πρέπει να οικοδομήσουμε ένα μοντέλο που θα προβλέψει αν υπάρχει σύνδεση μεταξύ αυτών των ζευγών κόμβων ή όχι. Αυτή είναι η πρόβλεψη του συνδέσμου!

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

Φανταστείτε αυτό - πώς θα φαινόταν αυτό το γράφημα σε κάποιο σημείο στο παρελθόν; Θα υπήρχαν λιγότερα άκρα μεταξύ των κόμβων επειδή οι συνδέσεις σε ένα κοινωνικό δίκτυο χτίζονται σταδιακά με την πάροδο του χρόνου.

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

Απενεργοποίηση συνδέσεων από το γράφημα

Κατά την αφαίρεση συνδέσμων ή ακμών, θα πρέπει να αποφύγουμε την αφαίρεση οποιουδήποτε άκρου που μπορεί να παράγει έναν απομονωμένο κόμβο (κόμβος χωρίς άκρη) ή ένα απομονωμένο δίκτυο. Ας αφαιρέσουμε μερικές από τις άκρες από το δίκτυό μας:

Όπως μπορείτε να δείτε, οι άκρες στα ζεύγη κόμβων (1 & 4), (7 & 9) και (3 & 8) έχουν αφαιρεθεί.

Προσθέστε ετικέτες στα εξαγόμενα δεδομένα

Στη συνέχεια, θα πρέπει να δημιουργήσουμε χαρακτηριστικά για όλα τα μη συνδεδεμένα ζεύγη κόμβων, συμπεριλαμβανομένων αυτών για τα οποία έχουμε παραλείψει τις άκρες. Οι απομακρυσμένες άκρες θα φέρουν την ένδειξη '1' και τα ζευγάρια των μη συνδεδεμένων κόμβων ως '0'.

Η μεταβλητή στόχος θα είναι εξαιρετικά ανισορροπημένη σε αυτό το σύνολο δεδομένων. Αυτό θα συναντήσετε και στα γραφήματα του πραγματικού κόσμου. Ο αριθμός των μη συνδεδεμένων ζευγών κόμβων θα ήταν τεράστιος.

Ας πάρουμε μια μελέτη περίπτωσης και να λύσουμε το πρόβλημα της πρόβλεψης συνδέσεων χρησιμοποιώντας Python.

Μελέτη περίπτωσης: Προβλέψτε τις μελλοντικές συνδέσεις μεταξύ των σελίδων του Facebook

Αυτό είναι όπου θα εφαρμόσουμε όλα τα παραπάνω σε ένα φοβερό πραγματικό σενάριο.

Θα εργαστούμε με ένα σύνολο δεδομένων γραφημάτων όπου οι κόμβοι είναι σελίδες του Facebook με δημοφιλή αρθρώσεις τροφίμων και γνωστούς σεφ από όλο τον κόσμο. Αν υπάρχουν δύο σελίδες (κόμβοι) ο ένας στον άλλο, τότε υπάρχει μια άκρη (σύνδεση) μεταξύ τους.

Μπορείτε να κατεβάσετε το σύνολο δεδομένων από εδώ.

Στόχος: Δημιουργία μοντέλου πρόβλεψης συνδέσμων για την πρόβλεψη μελλοντικών συνδέσεων (αμοιβαίων συμπαθειών) μεταξύ μη συνδεδεμένων κόμβων (σελίδες Facebook).

Ας πυρπολήσουμε το Jupyter Notebook (ή το Colab)!

Κατανόηση των Δεδομένων

Θα εισαγάγουμε πρώτα όλες τις απαραίτητες βιβλιοθήκες και ενότητες:

Ας φορτώσουμε τις σελίδες Facebook ως τους κόμβους και τις αμοιβαίες συμπαθεί μεταξύ των σελίδων ως άκρες:

Έξοδος: (620, 2102)

Έχουμε 620 κόμβους και 2.102 συνδέσμους. Ας δημιουργήσουμε τώρα ένα πλαίσιο δεδομένων όλων των κόμβων. Κάθε σειρά αυτού του πλαισίου δεδομένων αντιπροσωπεύει έναν σύνδεσμο που σχηματίζεται από τους κόμβους των κόμβων 'node_1' και 'node_2', αντίστοιχα:

fb_df.head ()

Οι κόμβοι '276', '58', '132', '603' και '398' σχηματίζουν δεσμούς με τον κόμβο '0'. Μπορούμε εύκολα να εκπροσωπήσουμε αυτή τη διάταξη των σελίδων του Facebook με τη μορφή ενός γραφήματος:

Ουάου, αυτό μοιάζει αρκετά. Αυτό είναι που πρόκειται να αντιμετωπίσουμε - ένα συρματόπλεγμα σελίδων του Facebook (μπλε κουκκίδες). Οι μαύρες γραμμές είναι οι συνδέσεις ή τα άκρα που συνδέουν όλους τους κόμβους μεταξύ τους.

Προετοιμασία δεδομένων για το κτίριο μοντέλων

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

Ανάκτηση ζευγών μη συνδεδεμένων κόμβων - Αρνητικά δείγματα

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

Πρώτον, θα δημιουργήσουμε ένα πλέγμα adjacency για να βρείτε ποια ζεύγη κόμβων δεν είναι συνδεδεμένα.

Για παράδειγμα, η γειτνίαση του κατωτέρω γραφήματος είναι μια τετραγωνική μήτρα στην οποία οι σειρές και οι στήλες αντιπροσωπεύονται από τους κόμβους του γραφήματος:

Οι συνδέσεις σημειώνονται με τις τιμές στη μήτρα. 1 σημαίνει ότι υπάρχει σύνδεση μεταξύ του ζεύγους κόμβων και 0 σημαίνει ότι υπάρχει σύνδεση μεταξύ του ζεύγους κόμβων. Για παράδειγμα, οι κόμβοι 1 και 3 έχουν 0 στη διασταύρωση τους στη μήτρα και αυτοί οι κόμβοι δεν έχουν επίσης άκρη στο παραπάνω γράφημα.

Θα χρησιμοποιήσουμε αυτήν την ιδιότητα του πίνακα πρόσδεσης για να βρούμε όλα τα ζεύγη μη συνδεδεμένων κόμβων από το αρχικό γράφημα G:

Ας δούμε το σχήμα της μήτρας γειτνίασης:

adj_G.shape

Έξοδος: (620, 620)

Όπως μπορείτε να δείτε, είναι μια τετράγωνη μήτρα. Τώρα, θα διασχίσουμε τον πίνακα adjacency για να βρούμε τις θέσεις των μηδενικών. Λάβετε υπόψη ότι δεν χρειάζεται να περάσουμε ολόκληρη τη μήτρα. Οι τιμές στη μήτρα είναι οι ίδιες πάνω και κάτω από τη διαγώνιο, όπως μπορείτε να δείτε παρακάτω:

Μπορούμε είτε να αναζητήσουμε τις τιμές πάνω από τη διαγώνιο (πράσινο τμήμα) είτε τις παρακάτω τιμές (κόκκινο μέρος). Ας ψάξουμε τις διαγώνιες τιμές για το μηδέν:

Ας δούμε πόσες ζεύγη μη συνδεδεμένων κόμβων έχουμε στο σύνολο δεδομένων μας:

len (all_unconnected_pairs)

Έξοδος: 19,018

Έχουμε 19,018 μη συνδεδεμένα ζεύγη. Αυτά τα ζεύγη κόμβων θα δρουν ως αρνητικά δείγματα κατά τη διάρκεια της εκπαίδευσης του μοντέλου πρόβλεψης σύνδεσης. Ας διατηρήσουμε αυτά τα ζεύγη σε ένα πλαίσιο δεδομένων:

Κατάργηση συνδέσεων από ζεύγη συνδεδεμένων κόμβων - θετικά δείγματα

Όπως συζητήσαμε παραπάνω, θα αφαιρέσουμε τυχαία μερικές από τις άκρες από το γράφημα. Ωστόσο, η τυχαία αφαίρεση των άκρων μπορεί να έχει ως αποτέλεσμα την αποκοπή των χαλαρά συνδεδεμένων κόμβων και θραυσμάτων του γραφήματος. Αυτό είναι κάτι που πρέπει να φροντίσουμε. Πρέπει να διασφαλίσουμε ότι κατά τη διαδικασία της πτώσης των άκρων, όλοι οι κόμβοι του γράφου θα πρέπει να παραμείνουν συνδεδεμένοι.

Στο μπλοκ κώδικα παρακάτω, θα ελέγξουμε πρώτα εάν η απόρριψη ενός ζεύγους κόμβων έχει ως αποτέλεσμα τη διάσπαση του γράφου (number_connected_components> 1) ή τη μείωση του αριθμού των κόμβων. Αν και τα δύο πράγματα δεν συμβούν, τότε αφήνουμε το ζεύγος κόμβων και επαναλαμβάνουμε την ίδια διαδικασία με το επόμενο ζεύγος κόμβων.

Τελικά, θα έχουμε μια λίστα με τα ζεύγη κόμβων που μπορούν να πέσουν από το γράφημα και όλοι οι κόμβοι θα παραμείνουν άθικτοι:

len (omissible_links_index)

Έξοδος: 1483

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

Δεδομένα για εκπαίδευση μοντέλου

Στη συνέχεια, θα προσαρτήσουμε αυτές τις αφαιρούμενες ακμές στο πλαίσιο δεδομένων των μη συνδεδεμένων ζευγών κόμβων. Δεδομένου ότι αυτά τα νέα άκρα είναι θετικά δείγματα, θα έχουν μια τιμή στόχου '1':

Ας ελέγξουμε την κατανομή των τιμών της μεταβλητής στόχου:

δεδομένα ['σύνδεσμος']. value_counts ()

0 -19018 1 -1483

Αποδεικνύεται ότι πρόκειται για εξαιρετικά μη ισορροπημένα δεδομένα. Ο λόγος του συνδέσμου χωρίς σύνδεση δεν είναι παρά σχεδόν 8%. Στην επόμενη ενότητα, θα εξάγουμε χαρακτηριστικά για όλα αυτά τα ζεύγη κόμβων.

Εξαγωγή χαρακτηριστικών

Θα χρησιμοποιήσουμε τον αλγόριθμο node2vec για να εξαγάγουμε τις λειτουργίες κόμβων από το γράφημα μετά την απόσπαση των συνδέσμων. Έτσι, ας δημιουργήσουμε πρώτα ένα νέο γράφημα μετά την απομάκρυνση των αποσπώμενων συνδέσμων:

Στη συνέχεια, θα εγκαταστήσουμε τη βιβλιοθήκη node2vec. Είναι αρκετά παρόμοιο με τον αλγόριθμο DeepWalk. Ωστόσο, περιλαμβάνει προκατειλημμένες τυχαίες βόλτες. Για να μάθετε περισσότερα για το node2vec, θα πρέπει σίγουρα να δείτε αυτό το έγγραφο node2vec: Εκμάθηση προσαρμοσμένων δυνατοτήτων για δίκτυα.

Προς το παρόν, να θυμάστε ότι το node2vec χρησιμοποιείται για την αντιπροσώπευση διανυσμάτων κόμβων ενός γραφήματος. Ας το εγκαταστήσουμε:

! pip install node2vec

Μπορεί να χρειαστεί λίγος χρόνος για να εγκατασταθεί στο τοπικό σας μηχάνημα (είναι αρκετά γρήγορο εάν χρησιμοποιείτε το Colab).

Τώρα, θα εκπαιδεύσουμε το μοντέλο node2vec στο γράφημά μας (G_data):

Στη συνέχεια, θα εφαρμόσουμε το εκπαιδευμένο μοντέλο node2vec σε κάθε ζεύγος κόμβων στα δεδομένα 'data' του πλαισίου δεδομένων. Για να υπολογίσουμε τα χαρακτηριστικά ενός ζεύγους ή μιας ακμής, θα προσθέσουμε τα χαρακτηριστικά των κόμβων σε αυτό το ζευγάρι:

x = [(n2w_model [str (i)] + n2w_model [str (j)]) για i, j στο zip (δεδομένα ['node_1'], data ['node_2'

Δημιουργία μοντέλου προγνωστικών συνδέσεων

Για να επικυρώσουμε την απόδοση του μοντέλου μας, θα πρέπει να χωρίσουμε τα δεδομένα μας σε δύο μέρη - το ένα για την εκπαίδευση του μοντέλου και το άλλο για να ελέγξουμε την απόδοση του μοντέλου:

Ας ταιριάζει πρώτα ένα μοντέλο λογικής παλινδρόμησης:

Θα κάνουμε τώρα προβλέψεις για το σετ δοκιμών:

προβλέψεις = lr.predict_proba (xtest)

Θα χρησιμοποιήσουμε τη βαθμολογία AUC-ROC για να ελέγξουμε την απόδοση του μοντέλου μας.

roc_auc_score (ytest, προβλέψεις [:, 1])

Έξοδος: 0,7817

Παίρνουμε βαθμολογία 0,78 χρησιμοποιώντας ένα μοντέλο λογιστικής παλινδρόμησης. Ας δούμε αν μπορούμε να πάρουμε ένα καλύτερο αποτέλεσμα χρησιμοποιώντας ένα πιο περίπλοκο μοντέλο.

Η εκπαίδευση σταμάτησε μετά την 208η επανάληψη επειδή εφαρμόσαμε τα κριτήρια πρόωρης διακοπής. Το πιο σημαντικό, το μοντέλο έλαβε εντυπωσιακή βαθμολογία AUC 0,9273 στο σετ δοκιμών. Σας ενθαρρύνω να ρίξετε μια ματιά στην τεκμηρίωση lightGBM για να μάθετε περισσότερα σχετικά με τις διαφορετικές παραμέτρους.

Τέλειες σημειώσεις

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

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

Μη διστάσετε να απαντήσετε σε ερωτήσεις ή να αφήσετε τα σχόλιά σας στην παρακάτω ενότητα σχολίων. Συνεχίστε να εξερευνούντε!

Αρχικά δημοσιεύθηκε στη διεύθυνση https://www.analyticsvidhya.com στις 16 Ιανουαρίου 2020.