Δημιουργήστε μια συνάρτηση nnk_gen για πρόβλεψη μιας γενικής διακριτής εξαρτημένης μεταβλητής με \(m\) κατηγορίες, και \(p\) ανεξάρτητες μεταβλητές. Η συνάρτηση θα είναι της μορφής nnk_gen(xtrain, xtest,ytrain, ytest, k), όπου:
xtrain ο πίνακας ή data.frame τιμών των ανεξάρτητων μεταβλητών στο training set
ytrain το διάνυσμα κατηγοριών της εξαρτημένης μεταβλητής στο training set (τύπου factor)
xtest ο πίνακας ή data.frame τιμών των ανεξάρτητων μεταβλητών στο test set
ytest το διάνυσμα κατηγοριών της εξαρτημένης μεταβλητής στο test set (τύπου factor)
k η τάξη του αλγορίθμου knn (πληθάριθμος του συνόλου γειτονικών σημείων)
Η συνάρτηση επιστρέφει το διάνυσμα προβλεπόμενων τιμών της \(Y\) στο test set.
Υποθέστε ότι όλες οι ανεξάρτητες μεταβλητές είναι συνεχείς. Για τον υπολογισμό της απόστασης χρησιμοποιήστε την Ευκλείδεια απόσταση. Ένα πρόβλημα στην πολυδιάστατη περίπτωση είναι ότι ο υπολογισμός της απόστασης δύο σημείων στο χώρο των \(X\) δεν είναι ανεξάρτητος από τις μονάδες μέτρησης, με αποτέλεσμα οι μεταβλητές που έχουν γενικά μεγάλες τιμές να συνεισφέρουν πολύ περισσότερο στον υπολογισμό της απόστασης από μεταβλητές που έχουν γενικά μικρές τιμές, και επομένως η εύρεση των πλησιέστερων γειτόνων να εξαρτάται επίσης από τις μονάδες μέτρησης, που δεν είναι σωστό. Ένας απλός τρόπος να αποφευχθεί αυτό το πρόβλημα είναι να γίνει κανονικοποίηση των ανεξάρτητων μεταβλητών πριν την εφαρμογή της μεθόδου. Αν έχουμε ένα διάνυσμα δεδομένων \(x\), μια απλή κανονικοποίηση είναι η \((x0-\min(x))/(\max(x)-\min(x))\). Επίσης μπορεί να γίνει η κλασική από τη στατιστικη τυποποίηση, όπου το τυποποιημένο διάνυσμα είναι \(\tilde{x} =(x-m)/s\) όπου \(m\) ο δειγματικός μέσος και \(s\) η δειγματική τυπική απόκλιση του \(x\).
Στην άσκηση αυτή καλείστε να εκτιμήσετε το μέσο σφάλμα πρόβλεψης του αλγορίθμου knn ως συνάρτηση της παραμέτρου \(k\). Αυτό θα γίνει στο dataset South African Heart Disease. Η εξαρτημένη μεταβλητή είναι η chd που δείχνει την ύπαρξη ή όχι καρδιαγγειακής νόσου. Χρησιμοποιήστε μόνο τις ποσοτικές ανεξάρτητες μεταβλητές (sdp, tobacco, ldl, adiposity, obesity, alcohol, age).
Κατεβάστε το South African Heart dataset από την ιστοσελίδα του ESLR: https://hastie.su.domains/ElemStatLearn/ Το αρχείο είναι σε μορφή text (comma separated) και από αυτό θα δημιουργήσετε το κατάλληλο dataset (σε R ή python)
Χωρίστε το dataset των 463 παρατηρήσεων σε δύο υποσύνολα: ένα training set μεγέθους \(N_1=400\) και ένα test set μεγέθους \(N_2=63\), κάνοντας τη διαμέριση με τυχαίο τρόπο. Ένας εύκολος τρόπος να γίνει αυτό είναι με την εντολή sample του R.
Θεωρήστε τιμές του \(k=1, 10, 20, 50, 100, 200, 300\). Για κάθε τιμή εφαρμόστε τη συνάρτηση knn_gen σε όλες τις παρατηρήσεις του test set, χρησιμοποιώντας ως δεδομένα τις \(N_1\) παρατηρήσεις του training set. Έστω \(\hat{y}_1, \ldots, \hat{y}_{N_2}\) οι προβλέψεις για τα σημεία \(x_1, \ldots, x_{N_2}\) του test set και εκτιμήστε το μέσο σφάλμα (misclassification rate).
Δημιουργήστε ένα γράφημα του μέσου σφάλματος πρόβλεψης ως συνάρτησης του \(k\) και εξηγήστε τι παρατηρείτε σχετικά με το bias-variance tradeoff.
Για να εφαρμοστεί η μέθδος knn σε περιπτώσεις που υπάρχουν κατηγορικές ανεξάρτητες μεταβλητές, είτε αυτές πρέπει πρώτα να κωδικοποιηθούν κατάλληλα είτε να χρησιμοποιηθεί μια εναλλακτική μετρική απόστασης. Μια συνηθισμένη μετρική είναι η απόσταση Gowers (https://en.wikipedia.org/wiki/Gower%27s_distance). Για την απόσταση Gowers υπάρχουν συναρτήσεις σε R και python. Τροποποιήστε τη συνάρτηση knn_gen στην knn_gen_gowers, η οποία χρησιμοποιεί την απόσταση Gowers αντί για την Ευκλείδεια απόσταση, και εφαρμόστε την στο South African Heart Disease dataset αυτή τη φορά με όλες τις ανεξάρτητες μεταβλητές. Εκτιμήστε σε ποιο βαθμό βελτιώνεται το μέσο σφάλμα πρόβλεψης σχετικά με την Άσκηη 2.
Ασκήσεις
ESLR : Exercise 2.1
ISLR2: 2.4.1, 2.4.2, 2.4.8