Κοινή χρήση τεχνολογίας

[Machine Learning] Εφαρμογή μηχανών διανυσμάτων υποστήριξης και ανάλυσης κύριων εξαρτημάτων στη μηχανική μάθηση

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Κατάλογος άρθρων

Το Support Vector Machine (SVM) είναι ένα ισχυρό και ευέλικτο μοντέλο μηχανικής εκμάθησης κατάλληλο για γραμμική και μη γραμμική ταξινόμηση, παλινδρόμηση και ανίχνευση ακραίων τιμών. Αυτό το άρθρο θα εισαγάγει τον αλγόριθμο μηχανών διανυσμάτων υποστήριξης και την υλοποίησή του στο scikit-learn και θα εξερευνήσει εν συντομία την ανάλυση των κύριων στοιχείων και την εφαρμογή του στο scikit-learn.

1. Επισκόπηση μηχανών φορέα υποστήριξης

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

Τι είναι ένα μηχάνημα φορέα υποστήριξης;

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

Εισαγάγετε την περιγραφή της εικόνας εδώ

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

Υπερπλάνα και διανύσματα υποστήριξης

Εισαγάγετε την περιγραφή της εικόνας εδώ

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

Εισαγάγετε την περιγραφή της εικόνας εδώ

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

Διαίσθηση μεγάλου περιθωρίου

Στη λογιστική παλινδρόμηση, χρησιμοποιούμε τη συνάρτηση σιγμοειδούς για να συμπιέσουμε την τιμή εξόδου της γραμμικής συνάρτησης στο εύρος [0,1] και να εκχωρήσουμε ετικέτες με βάση ένα όριο (0,5). Στο SVM, χρησιμοποιούμε την τιμή εξόδου μιας γραμμικής συνάρτησης για να αποφασίσουμε την ταξινόμηση: αν η έξοδος είναι μεγαλύτερη από 1, ανήκει σε μια κατηγορία, αν η έξοδος είναι -1, ανήκει σε μια άλλη κλάση. Το SVM σχηματίζει το οριακό εύρος [-1,1] θέτοντας το όριο της τιμής εξόδου σε 1 και -1.

2. Προεπεξεργασία και οπτικοποίηση δεδομένων

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

Βασικές πληροφορίες για το σύνολο δεδομένων

  • Ο αριθμός των χαρακτηριστικών είναι 30, για παράδειγμα:
    • Ακτίνα (μέση απόσταση από το κέντρο έως τα περιμετρικά σημεία)
    • Υφή (τυπική απόκλιση τιμών κλίμακας του γκρι)
    • περίμετρος
    • περιοχή
    • Ομαλότητα (τοπική διακύμανση στο μήκος της ακτίνας)
    • Συμπαγότητα (Περίμετρος^2 / Εμβαδόν - 1,0)
    • Κοιλότητα (η σοβαρότητα του πιεσμένου τμήματος του περιγράμματος)
    • λακκάκια (ο αριθμός των κοίλων τμημάτων του περιγράμματος)
    • συμμετρία
    • Διάσταση φράκταλ ("Προσέγγιση ακτογραμμής" - 1)
  • Το σύνολο δεδομένων περιέχει 569 δείγματα και η κατανομή της κατηγορίας είναι 212 κακοήθη δείγματα και 357 καλοήθη δείγματα.
  • Κατηγορία στόχου:
    • κακοήθης
    • αγαθός

Εισαγάγετε τις απαραίτητες βιβλιοθήκες

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

%matplotlib inline
sns.set_style('whitegrid')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

from sklearn.datasets import load_breast_cancer

cancer = load_breast_cancer()

# 创建 DataFrame
col_names = list(cancer.feature_names)
col_names.append('target')
df = pd.DataFrame(np.c_[cancer.data, cancer.target], columns=col_names)
df.head()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

Επισκόπηση δεδομένων

df.info()print(cancer.target_names)
# ['malignant', 'benign']

# 数据描述:
df.describe()
# 统计摘要:
df.info()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

οπτικοποίηση δεδομένων

Πίνακας Scatterplot ζευγών χαρακτηριστικών
sns.pairplot(df, hue='target', vars=[
    'mean radius', 'mean texture', 'mean perimeter', 'mean area',
    'mean smoothness', 'mean compactness', 'mean concavity',
    'mean concave points', 'mean symmetry', 'mean fractal dimension'
])
  • 1
  • 2
  • 3
  • 4
  • 5
Διάγραμμα ράβδων διανομής κατηγορίας
sns.countplot(x=df['target'], label="Count")
  • 1

Εισαγάγετε την περιγραφή της εικόνας εδώ

Οικόπεδο διασποράς μέσης επιφάνειας έναντι μέσης ομαλότητας
plt.figure(figsize=(10, 8))
sns.scatterplot(x='mean area', y='mean smoothness', hue='target', data=df)
  • 1
  • 2

Εισαγάγετε την περιγραφή της εικόνας εδώ

Χάρτης θερμότητας συσχετισμών μεταξύ μεταβλητών
plt.figure(figsize=(20,10))
sns.heatmap(df.corr(), annot=True)
  • 1
  • 2

Εισαγάγετε την περιγραφή της εικόνας εδώ

3. Μοντέλο εκπαίδευσης (επίλυση προβλημάτων)

Στη μηχανική μάθηση, η εκπαίδευση μοντέλων είναι ένα κρίσιμο βήμα για την εύρεση λύσεων σε προβλήματα.Παρακάτω θα παρουσιάσουμε τον τρόπο χρήσηςscikit-learn Πραγματοποιήστε εκπαίδευση μοντέλων και δείξτε την απόδοση της μηχανής διανυσμάτων υποστήριξης (SVM) κάτω από διαφορετικούς πυρήνες.

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

Πρώτα, πρέπει να προετοιμάσουμε και να επεξεργαστούμε εκ των προτέρων τα δεδομένα. Το παρακάτω είναι ένα παράδειγμα κώδικα για την προεπεξεργασία δεδομένων:

from sklearn.model_selection import cross_val_score, train_test_split
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler, MinMaxScaler

X = df.drop('target', axis=1)
y = df.target

print(f"'X' shape: {X.shape}")
print(f"'y' shape: {y.shape}")
# 'X' shape: (569, 30)
# 'y' shape: (569,)

pipeline = Pipeline([
    ('min_max_scaler', MinMaxScaler()),
    ('std_scaler', StandardScaler())
])

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

Στον κώδικα που χρησιμοποιούμε MinMaxScaler καιStandardScaler Κλιμακώστε τα δεδομένα. Τα δεδομένα χωρίζονται σε σετ εκπαίδευσης και δοκιμών, με το 30% των δεδομένων να χρησιμοποιείται για δοκιμές.

Αξιολογήστε την απόδοση του μοντέλου

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

from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
import pandas as pd

def print_score(clf, X_train, y_train, X_test, y_test, train=True):
    if train:
        pred = clf.predict(X_train)
        clf_report = pd.DataFrame(classification_report(y_train, pred, output_dict=True))
        print("Train Result:n================================================")
        print(f"Accuracy Score: {accuracy_score(y_train, pred) * 100:.2f}%")
        print("_______________________________________________")
        print(f"CLASSIFICATION REPORT:n{clf_report}")
        print("_______________________________________________")
        print(f"Confusion Matrix: n {confusion_matrix(y_train, pred)}n")
    else:
        pred = clf.predict(X_test)
        clf_report = pd.DataFrame(classification_report(y_test, pred, output_dict=True))
        print("Test Result:n================================================")        
        print(f"Accuracy Score: {accuracy_score(y_test, pred) * 100:.2f}%")
        print("_______________________________________________")
        print(f"CLASSIFICATION REPORT:n{clf_report}")
        print("_______________________________________________")
        print(f"Confusion Matrix: n {confusion_matrix(y_test, pred)}n")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

Υποστήριξη διανυσματική μηχανή (SVM)

Το Support Vector Machine (SVM) είναι ένας ισχυρός αλγόριθμος ταξινόμησης του οποίου η απόδοση επηρεάζεται από υπερπαράμετρους. Τα παρακάτω θα παρουσιάσουν τις κύριες παραμέτρους του SVM και τον αντίκτυπό τους στην απόδοση του μοντέλου:

  • C παράμετροι : Ελέγχει την αντιστάθμιση μεταξύ της σωστής ταξινόμησης σημείων προπόνησης και της ύπαρξης ομαλών ορίων απόφασης.μικρότερος CCντο(χαλαρό) κάνει το κόστος λανθασμένης ταξινόμησης (ποινές) χαμηλότερο (μαλακά περιθώρια), ενώ μεγαλύτερο CCντο(αυστηρό) καθιστά την εσφαλμένη ταξινόμηση πιο δαπανηρή (σκληρό περιθώριο), αναγκάζοντας το μοντέλο να ερμηνεύει τα δεδομένα εισόδου πιο αυστηρά.
  • παράμετρος γάμμα : Ελέγξτε το εύρος επιρροής ενός ενιαίου προπονητικού σετ.μεγαλύτερος γ γάμμαγ Κάντε το εύρος επιρροής πιο κοντά (τα πιο κοντινά σημεία δεδομένων έχουν μεγαλύτερο βάρος), μικρότερο γ γάμμαγ Διευρύνετε την πρόσβαση (ευρύτερες λύσεις).
  • παράμετρος βαθμού: Πολυωνυμική συνάρτηση πυρήνα ('poly' ), αγνοήθηκε από άλλους πυρήνες. Οι βέλτιστες τιμές υπερπαραμέτρων μπορούν να βρεθούν μέσω της αναζήτησης πλέγματος.

Γραμμικός πυρήνας SVM

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

from sklearn.svm import LinearSVC

model = LinearSVC(loss='hinge', dual=True)
model.fit(X_train, y_train)

print_score(model, X_train, y_train, X_test, y_test, train=True)
print_score(model, X_train, y_train, X_test, y_test, train=False)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Τα αποτελέσματα της εκπαίδευσης και των δοκιμών έχουν ως εξής:

Αποτελέσματα προπόνησης:

Accuracy Score: 86.18%
_______________________________________________
CLASSIFICATION REPORT:
                  0.0         1.0  accuracy   macro avg  weighted avg
precision    1.000000    0.819079  0.861809    0.909539      0.886811
recall       0.630872    1.000000  0.861809    0.815436      0.861809
f1-score     0.773663    0.900542  0.861809    0.837103      0.853042
support    149.000000  249.000000  0.861809  398.000000    398.000000
_______________________________________________
Confusion Matrix: 
 [[ 94  55]
 [  0 249]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Αποτελέσματα δοκιμής:

Accuracy Score: 89.47%
_______________________________________________
CLASSIFICATION REPORT:
                 0.0         1.0  accuracy   macro avg  weighted avg
precision   1.000000    0.857143  0.894737    0.928571      0.909774
recall      0.714286    1.000000  0.894737    0.857143      0.894737
f1-score    0.833333    0.923077  0.894737    0.878205      0.890013
support    63.000000  108.000000  0.894737  171.000000    171.000000
_______________________________________________
Confusion Matrix: 
 [[ 45  18]
 [  0 108]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Πολυωνυμικό πυρήνα SVM

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

from sklearn.svm import SVC

model = SVC(kernel='poly', degree=2, gamma='auto', coef0=1, C=5)
model.fit(X_train, y_train)

print_score(model, X_train, y_train, X_test, y_test, train=True)
print_score(model, X_train, y_train, X_test, y_test, train=False)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Τα αποτελέσματα της εκπαίδευσης και των δοκιμών έχουν ως εξής:

Αποτελέσματα προπόνησης:

Accuracy Score: 96.98%
_______________________________________________
CLASSIFICATION REPORT:
                  0.0         1.0  accuracy   macro avg  weighted avg
precision    0.985816    0.961089  0.969849    0.973453      0.970346
recall       0.932886    0.991968  0.969849    0.962427      0.969849
f1-score     0.958621    0.976285  0.969849    0.967453      0.969672
support    149.000000  249.000000  0.969849  398.000000    398.000000
_______________________________________________
Confusion Matrix: 
 [[139  10]
 [  2 247]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Αποτελέσματα δοκιμής:

Accuracy Score: 97.08%
_______________________________________________
CLASSIFICATION REPORT:
                 0.0         1.0  accuracy   macro avg  weighted avg
precision   0.967742    0.972477   0.97076    0.970109      0.970733
recall      0.952381    0.981481   0.97076    0.966931      0.970760
f1-score    0.960000    0.976959   0.97076    0.968479      0.970711
support    63.000000  108.000000   0.97076  171.000000    171.000000
_______________________________________________
Confusion Matrix: 
 [[ 60   3]
 [  2 106]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

SVM πυρήνα συνάρτησης ακτινικής βάσης (RBF).

Οι πυρήνες της συνάρτησης ακτινικής βάσης (RBF) είναι κατάλληλοι για την επεξεργασία μη γραμμικών δεδομένων. Το παρακάτω είναι ένα παράδειγμα κώδικα που χρησιμοποιεί τον πυρήνα RBF:

model = SVC(kernel='rbf', gamma=0.5, C=0.1)
model.fit(X_train, y_train)

print_score(model, X_train, y_train, X_test, y_test, train=True)
print_score(model, X_train, y_train, X_test, y_test, train=False)
  • 1
  • 2
  • 3
  • 4
  • 5

Τα αποτελέσματα της εκπαίδευσης και των δοκιμών έχουν ως εξής:

Αποτελέσματα προπόνησης:

Accuracy Score: 62.56%
_______________________________________________
CLASSIFICATION REPORT:
             0.0         1.0  accuracy   macro avg  weighted avg
precision    0.0    0.625628  0.625628    0.312814      0.392314
recall       0.0    1.000000  0.625628    0.500000      0.625628
f1-score     0.0    0.769231  0.625628    0.384615      0.615385
support    149.0  249.0    0.625628  398.0        398.0
_______________________________________________
Confusion Matrix: 
 [[  0 149]
 [  0 249]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Αποτελέσματα δοκιμής:

Accuracy Score: 64.97%
_______________________________________________
CLASSIFICATION REPORT:
             0.0         1.0  accuracy   macro avg  weighted avg
precision    0.0    0.655172  0.649661    0.327586      0.409551
recall       0.0    1.000000  0.649661    0.500000      0.649661
f1-score     0.0    0.792453  0.649661    0.396226      0.628252
support    63.0  108.0    0.649661  171.0        171.0
_______________________________________________
Confusion Matrix: 
 [[  0  63]
 [  0 108]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Συνοψίζω

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

4. Προετοιμασία δεδομένων SVM

ψηφιακή είσοδο : Το SVM υποθέτει ότι τα δεδομένα εισόδου είναι αριθμητικά. Εάν τα δεδομένα εισόδου είναι κατηγορικές μεταβλητές, ίσως χρειαστεί να τις μετατρέψετε σε δυαδικές εικονικές μεταβλητές (μία μεταβλητή ανά κατηγορία).

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

X_train = pipeline.fit_transform(X_train)
X_test = pipeline.transform(X_test)
  • 1
  • 2

Πρότυπη εκπαίδευση και αξιολόγηση

Τα παρακάτω δείχνουν τα αποτελέσματα εκπαίδευσης και δοκιμών διαφορετικών πυρήνων SVM:

Γραμμικός πυρήνας SVM

print("=======================Linear Kernel SVM==========================")
model = SVC(kernel='linear')
model.fit(X_train, y_train)

print_score(model, X_train, y_train, X_test, y_test, train=True)
print_score(model, X_train, y_train, X_test, y_test, train=False)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Αποτελέσματα προπόνησης:

Accuracy Score: 98.99%
_______________________________________________
CLASSIFICATION REPORT:
                  0.0         1.0  accuracy   macro avg  weighted avg
precision    1.000000    0.984190   0.98995    0.992095      0.990109
recall       0.973154    1.000000   0.98995    0.986577      0.989950
f1-score     0.986395    0.992032   0.98995    0.989213      0.989921
support    149.000000  249.000000   0.98995  398.000000    398.000000
_______________________________________________
Confusion Matrix: 
 [[145   4]
 [  0 249]]

测试结果

Accuracy Score: 97.66%
_______________________________________________
CLASSIFICATION REPORT:
                 0.0         1.0  accuracy   macro avg  weighted avg
precision   0.968254    0.981481  0.976608    0.974868      0.976608
recall      0.968254    0.981481  0.976608    0.974868      0.976608
f1-score    0.968254    0.981481  0.976608    0.974868      0.976608
support    63.000000  108.000000  0.976608  171.000000    171.000000
_______________________________________________
Confusion Matrix: 
 [[ 61   2]
 [  2 106]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
Πολυωνυμικό πυρήνα SVM
print("=======================Polynomial Kernel SVM==========================")
from sklearn.svm import SVC

model = SVC(kernel='poly', degree=2, gamma='auto')
model.fit(X_train, y_train)

print_score(model, X_train, y_train, X_test, y_test, train=True)
print_score(model, X_train, y_train, X_test, y_test, train=False)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Αποτελέσματα προπόνησης:

Accuracy Score: 85.18%
_______________________________________________
CLASSIFICATION REPORT:
                  0.0         1.0  accuracy   macro avg  weighted avg
precision    0.978723    0.812500  0.851759    0.895612      0.874729
recall       0.617450    0.991968  0.851759    0.804709      0.851759
f1-score     0.757202    0.893309  0.851759    0.825255      0.842354
support    149.000000  249.000000  0.851759  398.000000    398.000000
_______________________________________________
Confusion Matrix: 
 [[ 92  57]
 [  2 247]]

测试结果:

Accuracy Score: 82.46%
_______________________________________________
CLASSIFICATION REPORT:
                 0.0         1.0  accuracy   macro avg  weighted avg
precision   0.923077    0.795455  0.824561    0.859266      0.842473
recall      0.571429    0.972222  0.824561    0.771825      0.824561
f1-score    0.705882    0.875000  0.824561    0.790441      0.812693
support    63.000000  108.000000  0.824561  171.000000    171.000000
_______________________________________________
Confusion Matrix: 
 [[ 36  27]
 [  3 105]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
Ακτινική συνάρτηση βάσης πυρήνα SVM
print("=======================Radial Kernel SVM==========================")
from sklearn.svm import SVC

model = SVC(kernel='rbf', gamma=1)
model.fit(X_train, y_train)

print_score(model, X_train, y_train, X_test, y_test, train=True)
print_score(model, X_train, y_train, X_test, y_test, train=False)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Αποτελέσματα προπόνησης:

Accuracy Score: 100.00%
_______________________________________________
CLASSIFICATION REPORT:
             0.0    1.0  accuracy  macro avg  weighted avg
precision    1.0    1.0       1.0        1.0           1.0
recall       1.0    1.0       1.0        1.0           1.0
f1-score     1.0    1.0       1.0        1.0           1.0
support    149.0  249.0       1.0      398.0         398.0
_______________________________________________
Confusion Matrix: 
 [[149   0]
 [  0 249]]

测试结果:

Accuracy Score: 63.74%
_______________________________________________
CLASSIFICATION REPORT:
                 0.0         1.0  accuracy   macro avg  weighted avg
precision   1.000000    0.635294  0.637427    0.817647      0.769659
recall      0.015873    1.000000  0.637427    0.507937      0.637427
f1-score    0.031250    0.776978  0.637427    0.404114      0.502236
support    63.000000  108.000000  0.637427  171.000000    171.000000
_______________________________________________
Confusion Matrix: 
 [[  1  62]
 [  0 108]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

Υποστήριξη διανυσματικού συντονισμού υπερπαραμέτρων μηχανής

from sklearn.model_selection import GridSearchCV

param_grid = {'C': [0.01, 0.1, 0.5, 1, 10, 100], 
              'gamma': [1, 0.75, 0.5, 0.25, 0.1, 0.01, 0.001], 
              'kernel': ['rbf', 'poly', 'linear']} 

grid = GridSearchCV(SVC(), param_grid, refit=True, verbose=1, cv=5)
grid.fit(X_train, y_train)

best_params = grid.best_params_
print(f"Best params: {best_params}")

svm_clf = SVC(**best_params)
svm_clf.fit(X_train, y_train)
print_score(svm_clf, X_train, y_train, X_test, y_test, train=True)
print_score(svm_clf, X_train, y_train, X_test, y_test, train=False)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

Αποτελέσματα προπόνησης:

Accuracy Score: 98.24%
_______________________________________________
CLASSIFICATION REPORT:
                  0.0         1.0  accuracy   macro avg  weighted avg
precision    0.986301    0.980159  0.982412    0.983230      0.982458
recall       0.966443    0.991968  0.982412    0.979205      0.982412
f1-score     0.976271    0.986028  0.982412    0.981150      0.982375
support    149.000000  249.000000  0.982412  398.000000    398.000000
_______________________________________________
Confusion Matrix: 
 [[144   5]
 [  2 247]]

测试结果:

Accuracy Score: 98.25%
_______________________________________________
CLASSIFICATION REPORT:
                 0.0         1.0  accuracy   macro avg  weighted avg
precision   0.983871    0.981651  0.982456    0.982761      0.982469
recall      0.968254    0.990741  0.982456    0.979497      0.982456
f1-score    0.976000    0.986175  0.982456    0.981088      0.982426
support    63.000000  108.000000  0.982456  171.000000    171.000000
_______________________________________________
Confusion Matrix: 
 [[ 61   2]
 [  1 107]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

5. Ανάλυση κύριας συνιστώσας

Εισαγωγή στο PCA

Η ανάλυση κύριας συνιστώσας (PCA) είναι μια τεχνική που επιτυγχάνει γραμμική μείωση διαστάσεων προβάλλοντας δεδομένα σε χώρο χαμηλότερης διάστασης Τα συγκεκριμένα βήματα είναι τα εξής:

  • Χρησιμοποιήστε την αποσύνθεση μοναδικής τιμής: Προβολή δεδομένων σε χώρο χαμηλής διάστασης μέσω αποσύνθεσης μοναδικής τιμής.
  • μάθηση χωρίς επίβλεψη:Το PCA δεν απαιτεί δεδομένα με ετικέτα για μείωση διαστάσεων.
  • Μεταμόρφωση χαρακτηριστικών: Προσπαθήστε να βρείτε ποια χαρακτηριστικά εξηγούν τη μεγαλύτερη απόκλιση στα δεδομένα.

Οπτικοποίηση PCA

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

from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

# 数据标准化
scaler = StandardScaler()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# PCA 降维
pca = PCA(n_components=2)
X_train = pca.fit_transform(X_train)
X_test = pca.transform(X_test)

# 可视化前两个主成分
plt.figure(figsize=(8,6))
plt.scatter(X_train[:,0], X_train[:,1], c=y_train, cmap='plasma')
plt.xlabel('First Principal Component')
plt.ylabel('Second Principal Component')
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

Εισαγάγετε την περιγραφή της εικόνας εδώ

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

Εξηγήστε τα συστατικά

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

Οι ιδιότητες που σχετίζονται με τα εξαρτήματα περιλαμβάνουν:

  • βαθμολογία συστατικών: Η μετασχηματισμένη τιμή μεταβλητής.
  • Φορτίο (βάρος): Συνδυαστικό βάρος χαρακτηριστικών.
  • Συμπίεση δεδομένων και διατήρηση πληροφοριών: Πραγματοποιήστε συμπίεση δεδομένων μέσω PCA διατηρώντας ταυτόχρονα βασικές πληροφορίες.
  • Φιλτράρισμα θορύβου: Ο θόρυβος μπορεί να φιλτραριστεί κατά τη διαδικασία μείωσης διαστάσεων.
  • Εξαγωγή και μηχανική χαρακτηριστικών: Χρησιμοποιείται για την εξαγωγή και τη δημιουργία νέων χαρακτηριστικών.

Προσαρμογή παραμέτρων μοντέλου μηχανής διανύσματος υποστήριξης (SVM).

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

from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV

# 定义参数网格
param_grid = {'C': [0.01, 0.1, 0.5, 1, 10, 100], 
              'gamma': [1, 0.75, 0.5, 0.25, 0.1, 0.01, 0.001], 
              'kernel': ['rbf', 'poly', 'linear']} 

# 网格搜索
grid = GridSearchCV(SVC(), param_grid, refit=True, verbose=1, cv=5)
grid.fit(X_train, y_train)
best_params = grid.best_params_
print(f"Best params: {best_params}")

# 使用最佳参数训练模型
svm_clf = SVC(**best_params)
svm_clf.fit(X_train, y_train)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

Αποτελέσματα προπόνησης:

Accuracy Score: 96.48%
_______________________________________________
CLASSIFICATION REPORT:
                  0.0         1.0  accuracy   macro avg  weighted avg
precision    0.978723    0.957198  0.964824    0.967961      0.965257
recall       0.926174    0.987952  0.964824    0.957063      0.964824
f1-score     0.951724    0.972332  0.964824    0.962028      0.964617
support    149.000000  249.000000  0.964824  398.000000    398.000000
_______________________________________________
Confusion Matrix: 
 [[138  11]
 [  3 246]]

测试结果:

Accuracy Score: 96.49%
_______________________________________________
CLASSIFICATION REPORT:
                 0.0         1.0  accuracy   macro avg  weighted avg
precision   0.967213    0.963636  0.964912    0.965425      0.964954
recall      0.936508    0.981481  0.964912    0.958995      0.964912
f1-score    0.951613    0.972477  0.964912    0.962045      0.964790
support    63.000000  108.000000  0.964912  171.000000    171.000000
_______________________________________________
Confusion Matrix: 
 [[ 59   4]
 [  2 106]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

6. Περίληψη

Σε αυτό το άρθρο μάθαμε τα εξής:

  • Υποστήριξη διανυσματική μηχανή (SVM): Κατανόηση των βασικών εννοιών του SVM και της εφαρμογής του στην Python.
  • Λειτουργία πυρήνα SVM: Συμπεριλαμβανομένων γραμμικών, ακτινικών συναρτήσεων βάσης (RBF) και πολυωνυμικών συναρτήσεων πυρήνα.
  • προετοιμασία δεδομένων: Πώς να προετοιμάσετε δεδομένα για τον αλγόριθμο SVM.
  • Συντονισμός υπερπαραμέτρων: Συντονισμός υπερπαραμέτρων SVM μέσω αναζήτησης πλέγματος.
  • Ανάλυση κύριου στοιχείου (PCA): Πώς να χρησιμοποιήσετε το PCA για να μειώσετε την πολυπλοκότητα των δεδομένων και να το επαναχρησιμοποιήσετε στο scikit-learn.

αναφέρομαι σε:Υποστήριξη Vector Machine & PCA Tutorial για αρχάριους
Προτείνετε τις σχετικές στήλες μου:


Εισαγάγετε την περιγραφή της εικόνας εδώ