Προς το περιεχόμενο

Python ML μπορούμε να κάνουμε εσκεμμένα 1 classifier να έχει πολύ χαμηλό prediction accuracy


masteripper

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Γεια χαρά 

Σίγουρα μια μάλλον περίεργη ερώτηση αλλά ...

Δοκιμάζω κάποιους Classifiers σε δεδομένα που το τελικό αποτέλεσμα είναι 0 ή 1

Το πρόβλημα είναι ότι κυμαίνονται ανάμεσα 40% - 50% επιτυχία πρόβλεψης σχεδόν με ότι παραμέτρους και να βάλω.

Αλλά λόγω της φύσεως του αποτελέσματος σκεφτόμουν ότι εαν π.χ χαμήλωνα το accuracy στο 20% περίπου θα μπορούσα απλώς να πάρω το αντίθετο των προβλέψεων και να φτάσω ας πούμε περίπου 80% επιτυχίας πρόβλεψης.

Μια 1η σκέψη θα ήταν να κάνω "μαύρα - ασπρα" στο training αλλά πιστεύω ότι το πιο σωστό είναι να γίνει το training οπως είναι τα δεδομένα και μετά "κάπως" να πειράξω τις παραμέτρους και να "χαντακώσω" την πρόβλεψη.

Καμμιά ιδέα

 

Επεξ/σία από masteripper
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

8 λεπτά πριν, masteripper είπε

Γεια χαρά 

Σίγουρα μια μάλλον περίεργη ερώτηση αλλά ...

Δοκιμάσω κάποιους Classifiers σε δεδομένα που το τελικό αποτέλεσμα είναι 0 ή 1

Το πρόβλημα είναι ότι κυμαίνονται ανάμεσα 40% - 50% επιτυχία πρόβλεψης σχεδόν με ότι παραμέτρους και να βάλω.

Αλλά λόγω της φύσεως του αποτελέσματος σκεφτόμουν ότι εαν π.χ χαμήλωνα το accuracy στο 20% περίπου θα μπορούσα απλώς να πάρω το αντίθετο των προβλέψεων και να φτάσω ας πούμε περίπου 80% επιτυχίας πρόβλεψης.

Μια 1η σκέψη θα ήταν να κάνω "μαύρα - ασπρα" στο training αλλά πιστεύω ότι το πιο σωστό είναι να γίνει το training οπως είναι τα δεδομένα και μετά "κάπως" να πειράξω τις παραμέτρους και να "χαντακώσω" την πρόβλεψη.

Καμμιά ιδέα

 

Τι ακριβώς εννοείς με το "Classifiers" και με τι αλγόριθμους είναι υλοποιημένοι; Δηλαδή, έχεις κάποιους pre-trained classifiers που χρησιμοποιείς ή εκπαιδεύεις νέους; 

Μετά, έχεις τσεκάρει εάν το dataset σου είναι balanced; Πώς μετράς την επιτυχία; Δηλαδή, χρησιμοποιείς accuracy ή κάποιο άλλο metric;

Υ.Γ. Γενικά, αυτό που λες δεν είναι ενδεδειγμένο (expressed με ένα mild statement). 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ας πάρουμε την περίπτωση 1 πολύ γνωστού Classifier :SVM

Το τρέχω και το prediction κυμαίνεται μεταξύ 40% -50%

svclassifier = SVC(kernel='rbf')
svclassifier.fit(X_train, y_train)
svm_pred = svclassifier.predict(X_test)
svm_accuracy = accuracy_score(y_test, svm_pred)

Υπάρχει τρόπος να επηρρέασω αυτό το Prediction ωστε να είναι "χαμηλότερο" χωρίς να πειράξω το fit ?

Παραθέτω για παράδειγμα το αποτέλεσμα και την πρόβλεψη (επιτυχία 48%)

0 1
0 1
1 1
1 1
1 1
0 1
0 1
0 1
1 0
0 1
1 1
0 1
1 1
1 1
0 1
0 1
1 1
0 1
1 1
0 1
1 1
1 1
1 0
1 1
1 1
1 1
0 1
0 0
0 1

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

@masteripper

Υπάρχει ένας σκασμός παραμέτρων που επηρεάζουν την απόδοση. Γενικά, το να προσπαθήσεις να κάνεις το μοντέλο σου να είναι "λάθος" και μετά να πεις "ΟΚ, αφού είναι 100% λάθος, τότε παίρνω τα αντίστροφα και είναι 100% σωστά", είναι 100% λάθος. Εάν θέλεις να αυξήσεις την απόδοση του μοντέλου σου, δεν είναι ο σωστός δρόμος αυτός. Βασικά, είναι από τους πιο λάθος δρόμους.

Εάν θέλεις βοήθεια, προσωπικά εικάζω ότι το πρόβλημά σου είναι κλασικό XY problem και το πραγματικό πρόβλημα είναι σε ένα ή όλα από: 

1. Dataset splitting: δεν έχεις κάνει σωστό spitting στο dataset. 

2. Υπάρχει imbalance στο dataset, το οποίο κάνει το metric που χρησιμοποιείς λάθος καθώς και την διαδικασία training λάθος. 

3. Τα δεδομένα σου δεν είναι αρκετά για τα features που έχεις

Για παραπάνω βοήθεια, εγώ θα χρειαστώ λίγο παραπάνω inside info από το τι κάνεις. Π.χ., τι data έχεις, κατανομή examples per class, και τι features χρησιμοποιείς για αρχή.

Υ.Γ. Π.χ., σε αυτό που παρέθεσες, παρατηρώ καλό class imbalance. Δηλαδή, εάν έχεις 80 παραδείγματα με κλάση 1 και 20 με κλάση 0, τότε 50% ευστοχία (όπως την μετράς εσύ στον κώδικα που έδωσες) μπορεί να ειναι τα:

1. 50/80 για κλάση 1 και 0/20 για κλάση 0

2. 30/80 για κλάση 1 και 20/20 για κλάση 0

3. 40/80 για κλάση 1 και 10/20 για κλάση 0

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

Επεξ/σία από DrKo
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Απαντώντας

1. To splitting είναι συγκεκριμένο : παίρνω δεδομένα προηγούμενων ημερών και τα εφαρμόζω σε 1 μόνο ημέρα 

2.Αν ήταν "balanced" τότε θα είχαμε λύσει πολλά προβλήματα... :) ... σίγουρα το input είναι εντελώς προβληματικό εκ φύσεως

3. Δεδομένα υπάρχουν (του τύπου "λεφτά υπάρχουν") αλλά τα περιορίζω σε αυτά που έχουν κάποιας μορφής διασύνδεση με την συγκεκριμένη μέρα.
π.χ τι νόημα π.χ να παίρνεις δεδομένα απο 100 μέρες με Κόκκινα/Μπλε/Ασπρα όταν μπορείς να περιοριστείς σε 1 υποδείγμα μόνο με Κόκκινα και να ψάξεις μόνο τα Κόκκινα της ημέρας.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

3 λεπτά πριν, masteripper είπε

1. To splitting είναι συγκεκριμένο : παίρνω δεδομένα προηγούμενων ημερών και τα εφαρμόζω σε 1 μόνο ημέρα 

Αυτό, ας πούμε, δείχνει ότι έχεις πρόβλημα στο splitting. Εσύ έχεις φροντίσει μόνο το train/val/test και, το πιο πιθανό, δεν έχεις πάρει καθόλου υπόψη το πώς μπορείς να κάνεις το split έτσι ώστε να έχεις καλό condition representation. 

5 λεπτά πριν, masteripper είπε

2.Αν ήταν "balanced" τότε θα είχαμε λύσει πολλά προβλήματα... :) ... σίγουρα το input είναι εντελώς προβληματικό εκ φύσεως

Άρα, και εδώ έχεις πρόβλημα. Υπάρχουν αρκετές τεχνικές να λύσεις αυτό το πρόβλημα, το οποίο είναι (συνήθως) αρκετά συνηθισμένο. Το ότι απαντάς έτσι, δείχνει πως δεν το έχεις φροντίσει καθόλου κατά το training και, σίγουρα, είναι αφρόντιστο στο πως αξιολογείς το μοντέλο σου. Ειδικά για την αξιολόγηση υπάρχουν αρκετά trivial πράγματα για να κάνεις. 

6 λεπτά πριν, masteripper είπε

3. Δεδομένα υπάρχουν (του τύπου "λεφτά υπάρχουν") αλλά τα περιορίζω σε αυτά που έχουν κάποιας μορφής διασύνδεση με την συγκεκριμένη μέρα.
π.χ τι νόημα π.χ να παίρνεις δεδομένα απο 100 μέρες με Κόκκινα/Μπλε/Ασπρα όταν μπορείς να περιοριστείς σε 1 υποδείγμα μόνο με Κόκκινα και να ψάξεις μόνο τα Κόκκινα της ημέρας.

Θαρρώ ότι αυτό δεν απαντάει στην ερώτηση και, επιπλέον, δείχνει ότι δεν έχεις γνώση για το πως λειτουργεί ο αλγόριθμος που έχεις διαλέξει. Γενικά, (εντελώς φιλικά, για να μην παρεξηγηθώ) τα προβλήματα που έχεις δείχνουν ότι θα βοηθηθείς εάν πάρεις βοήθεια από κάποιον που ξέρει να κάνει τέτοια πράγματα. Π.χ., ενδέχεται να βοηθηθείς εάν πάρεις δεδομένα από 100 μέρες με Κόκκινα/Μπλε/Άσπρα αντί να κάνεις αυτό που λες. 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

1 λεπτό πριν, DrKo είπε

Αυτό, ας πούμε, δείχνει ότι έχεις πρόβλημα στο splitting. Εσύ έχεις φροντίσει μόνο το train/val/test και, το πιο πιθανό, δεν έχεις πάρει καθόλου υπόψη το πώς μπορείς να κάνεις το split έτσι ώστε να έχεις καλό condition representation. 

Άρα, και εδώ έχεις πρόβλημα. Υπάρχουν αρκετές τεχνικές να λύσεις αυτό το πρόβλημα, το οποίο είναι (συνήθως) αρκετά συνηθισμένο. Το ότι απαντάς έτσι, δείχνει πως δεν το έχεις φροντίσει καθόλου κατά το training και, σίγουρα, είναι αφρόντιστο στο πως αξιολογείς το μοντέλο σου. Ειδικά για την αξιολόγηση υπάρχουν αρκετά trivial πράγματα για να κάνεις. 

Θαρρώ ότι αυτό δεν απαντάει στην ερώτηση και, επιπλέον, δείχνει ότι δεν έχεις γνώση για το πως λειτουργεί ο αλγόριθμος που έχεις διαλέξει. Γενικά, (εντελώς φιλικά, για να μην παρεξηγηθώ) τα προβλήματα που έχεις δείχνουν ότι θα βοηθηθείς εάν πάρεις βοήθεια από κάποιον που ξέρει να κάνει τέτοια πράγματα. Π.χ., ενδέχεται να βοηθηθείς εάν πάρεις δεδομένα από 100 μέρες με Κόκκινα/Μπλε/Άσπρα αντί να κάνεις αυτό που λες. 

Θα τα εξετάσω αυτά που μου έδωσες ... και αν είναι το ξανασυζητάμε.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Εριξα μια ματιά σε αυτά που μου έγραψες και έχω τα εξής:

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

2. Το dataset είναι balanced απλώς έχει τιμές με μεγάλη διακύμανση...

3. Τα Κόκκινα/Μπλε/Άσπρα θεωρώ με τα στοιχεία που έχω ότι δεν συνδέονται μεταξύ τους...το καθένα γκρουπ έχει την δικιά του συμπεριφορά.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

4 ώρες πριν, masteripper είπε

Γεια χαρά 

Σίγουρα μια μάλλον περίεργη ερώτηση αλλά ...

Δοκιμάζω κάποιους Classifiers σε δεδομένα που το τελικό αποτέλεσμα είναι 0 ή 1

Το πρόβλημα είναι ότι κυμαίνονται ανάμεσα 40% - 50% επιτυχία πρόβλεψης σχεδόν με ότι παραμέτρους και να βάλω.

Αλλά λόγω της φύσεως του αποτελέσματος σκεφτόμουν ότι εαν π.χ χαμήλωνα το accuracy στο 20% περίπου θα μπορούσα απλώς να πάρω το αντίθετο των προβλέψεων και να φτάσω ας πούμε περίπου 80% επιτυχίας πρόβλεψης.

Μια 1η σκέψη θα ήταν να κάνω "μαύρα - ασπρα" στο training αλλά πιστεύω ότι το πιο σωστό είναι να γίνει το training οπως είναι τα δεδομένα και μετά "κάπως" να πειράξω τις παραμέτρους και να "χαντακώσω" την πρόβλεψη.

Καμμιά ιδέα

 

garbage in, garbage out. Απο που πηγαζει η πεποιθηση οτι μπορεις να κανεις ενα μοντελο να μαθει με βαση τα δεδομενα σου, αφου οτι κι αν εχεις κανει ουσιαστικα ειναι μια τρυπα στο νερο (1/Κ ακριβεια οπου Κ οι κλασσεις σου)? Αυτα με αναστροφη της προβλεψης κλπ δεν εχουν κανενα νοημα σε δυαδικο προβλημα, λογω συμμετριας δεν υπαρχει καμια απολυτως λογικη στη σκεψη να παρεις το αντιθετο των προβλεψεων... οσο δυσκολο ειναι να μοντελοποιησεις τον classifier που δινει 10% τοσο δυσκολο ειναι το ιδιο για το 90%... 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
2 ώρες πριν, masteripper είπε

Εριξα μια ματιά σε αυτά που μου έγραψες και έχω τα εξής:

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

2. Το dataset είναι balanced απλώς έχει τιμές με μεγάλη διακύμανση...

3. Τα Κόκκινα/Μπλε/Άσπρα θεωρώ με τα στοιχεία που έχω ότι δεν συνδέονται μεταξύ τους...το καθένα γκρουπ έχει την δικιά του συμπεριφορά.

Ό,τι πεις. Το πιο δύσκολο είναι να μάθει κανείς κάτι σε κάποιον που νομίζει ότι ήδη το ξέρει (κάποιος αρχαίος το είπε αυτό).

FWIW, αυτά που λες είναι λάθος. Π.χ., όταν έχεις 0/1, τι ακριβώς μεγάλη διακύμανση εννοείς; Εάν έχεις 50% examples με κλάση 0 και 50% με κλάση 1, τότε και μόνο τότε δεν έχεις imbalanced dataset. Η διακύμανση που γράφεις, είναι πέρα ως πέρα άσχετη.

Ξαναλέω, συνεργάσου με κάποιον που ξέρει τι συμβαίνει, γιατί εσύ ούτε ξέρεις αλλά (και το πιο σημαντικό) ούτε θέλεις να μάθεις. 

Επεξ/σία από DrKo
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
17 λεπτά πριν, DrKo είπε

Ό,τι πεις. Το πιο δύσκολο είναι να μάθει κανείς κάτι σε κάποιον που νομίζει ότι ήδη το ξέρει (κάποιος αρχαίος το είπε αυτό).

FWIW, αυτά που λες είναι λάθος. Π.χ., όταν έχεις 0/1, τι ακριβώς μεγάλη διακύμανση εννοείς; Εάν έχεις 50% examples με κλάση 0 και 50% με κλάση 1, τότε και μόνο τότε δεν έχεις imbalanced dataset. Η διακύμανση που γράφεις, είναι πέρα ως πέρα άσχετη.

Ξαναλέω, συνεργάσου με κάποιον που ξέρει τι συμβαίνει, γιατί εσύ ούτε ξέρεις αλλά (και το πιο σημαντικό) ούτε θέλεις να μάθεις. 

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

3;3,5;2;1,5;1,25;1,25;1,75;1,75;3;1,75;3,25;29;1,25;3;2;1,75;3,5;1,25;5;13;22;6,75;4,75;4,75;26;13;3;3,5;2;2,5;7,5;13;9,5;31;23;29;81;61;75;125;9;5,75;13,5;55;151;6;8;7;15;14;23;35;33;51;95;29;51,5;0,25;1;2;2;2;2;2;2;1

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

Thanks 

Υ.Γ θεωρείστε ότι το θέμα έχει κλείσει καθώς θα κινηθώ προς άλλη κατεύθυνση

                                                                                                                     
Επεξ/σία από masteripper
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Στις 9/12/2021 στις 7:25 ΜΜ, vs_skg είπε

garbage in, garbage out. Απο που πηγαζει η πεποιθηση οτι μπορεις να κανεις ενα μοντελο να μαθει με βαση τα δεδομενα σου, αφου οτι κι αν εχεις κανει ουσιαστικα ειναι μια τρυπα στο νερο (1/Κ ακριβεια οπου Κ οι κλασσεις σου)? Αυτα με αναστροφη της προβλεψης κλπ δεν εχουν κανενα νοημα σε δυαδικο προβλημα, λογω συμμετριας δεν υπαρχει καμια απολυτως λογικη στη σκεψη να παρεις το αντιθετο των προβλεψεων... οσο δυσκολο ειναι να μοντελοποιησεις τον classifier που δινει 10% τοσο δυσκολο ειναι το ιδιο για το 90%... 

Όταν συγκεντρώνεις δεδομένα, ποτέ δεν ξέρεις αν σου πετάξει garbage , μέχρι να τρέξεις τον αλγόριθμο ή αλγορίθμους.

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

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

37 λεπτά πριν, Lanike71 είπε

Όταν συγκεντρώνεις δεδομένα, ποτέ δεν ξέρεις αν σου πετάξει garbage , μέχρι να τρέξεις τον αλγόριθμο ή αλγορίθμους.

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

Ας συμφωνησουμε οτι διαφωνουμε. Αερα πατερα ισως ξεκιναει ο χομπιστας η ο software engineer, ο ML engineer εχει μια αρκετα καλη ιδεα του αν ειναι εφικτο να μοντελοποιησει το προβλημα με ML η οχι. Το να πετας σκατα στον τοιχο κι οτι κολλησει σιγουρα δεν ειναι ουτε η δημοφιλεστερη ουτε η καλυτερη προσέγγιση απο αποψη και χρονου και αποτελεσματος. 

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

3 λεπτά πριν, vs_skg είπε

Ας συμφωνησουμε οτι διαφωνουμε. Αερα πατερα ισως ξεκιναει ο χομπιστας η ο software engineer, ο ML engineer εχει μια αρκετα καλη ιδεα του αν ειναι εφικτο να μοντελοποιησει το προβλημα με ML η οχι. Το να πετας σκατα στον τοιχο κι οτι κολλησει σιγουρα δεν ειναι ουτε η δημοφιλεστερη ουτε η καλυτερη προσέγγιση απο αποψη και χρονου και αποτελεσματος. 

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

Το αν έχει μία καλή ιδέα, είναι ένα άλλο ζήτημα.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

50 λεπτά πριν, Lanike71 είπε

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

Το αν έχει μία καλή ιδέα, είναι ένα άλλο ζήτημα.

Δεν είπα ότι είπες κάτι άλλο. 

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

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

Αυτά από μένα 

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...