τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Το Support Vector Machine (SVM) είναι ένα ισχυρό και ευέλικτο μοντέλο μηχανικής εκμάθησης κατάλληλο για γραμμική και μη γραμμική ταξινόμηση, παλινδρόμηση και ανίχνευση ακραίων τιμών. Αυτό το άρθρο θα εισαγάγει τον αλγόριθμο μηχανών διανυσμάτων υποστήριξης και την υλοποίησή του στο scikit-learn και θα εξερευνήσει εν συντομία την ανάλυση των κύριων στοιχείων και την εφαρμογή του στο scikit-learn.
Υποστήριξη διανυσματική μηχανή (SVM) είναι ένας ευρέως χρησιμοποιούμενος αλγόριθμος στον τομέα της μηχανικής μάθησης, που ευνοείται για το χαρακτηριστικό του ότι παρέχει σημαντική ακρίβεια με λιγότερους υπολογιστικούς πόρους. Το SVM μπορεί να χρησιμοποιηθεί τόσο για εργασίες ταξινόμησης όσο και για εργασίες παλινδρόμησης, αλλά χρησιμοποιείται ευρύτερα σε προβλήματα ταξινόμησης.
Ο στόχος των μηχανών φορέα υποστήριξης είναι να NNΝ διαστασιακός χώρος ( NNΝ είναι ο αριθμός των χαρακτηριστικών) για να βρείτε ένα υπερεπίπεδο που μπορεί να διακρίνει καθαρά τα σημεία δεδομένων. Αυτό το υπερεπίπεδο επιτρέπει τα σημεία δεδομένων διαφορετικών κατηγοριών να διαχωριστούν και όσο το δυνατόν πιο μακριά από το υπερεπίπεδο για να διασφαλιστεί η ευρωστία της ταξινόμησης.
Προκειμένου να επιτευχθεί αποτελεσματικός διαχωρισμός των σημείων δεδομένων, μπορεί να υπάρχουν πολλαπλά υπερεπίπεδα. Στόχος μας είναι να επιλέξουμε ένα υπερεπίπεδο με το μέγιστο περιθώριο, δηλαδή τη μέγιστη απόσταση μεταξύ δύο τάξεων. Η μεγιστοποίηση των περιθωρίων συμβάλλει στη βελτίωση της ακρίβειας ταξινόμησης.
Ένα υπερεπίπεδο είναι ένα όριο απόφασης που διαιρεί τα σημεία δεδομένων. Τα σημεία δεδομένων που βρίσκονται και στις δύο πλευρές του υπερεπίπεδου μπορούν να ταξινομηθούν σε διαφορετικές κατηγορίες. Οι διαστάσεις του υπερεπίπεδου εξαρτώνται από τον αριθμό των χαρακτηριστικών: εάν τα χαρακτηριστικά εισόδου είναι 2, το υπερεπίπεδο είναι μια ευθεία γραμμή εάν τα χαρακτηριστικά είναι 3, το υπερεπίπεδο είναι ένα δισδιάστατο επίπεδο. Όταν ο αριθμός των χαρακτηριστικών υπερβαίνει τα 3, το υπερεπίπεδο γίνεται δύσκολο να κατανοηθεί διαισθητικά.
Τα διανύσματα υποστήριξης αναφέρονται σε εκείνα τα σημεία που βρίσκονται πιο κοντά στο υπερεπίπεδο, τα οποία επηρεάζουν τη θέση και την κατεύθυνση του υπερεπίπεδου. Με αυτά τα διανύσματα υποστήριξης, μπορούμε να μεγιστοποιήσουμε το περιθώριο του ταξινομητή. Η αφαίρεση των διανυσμάτων υποστήριξης αλλάζει τη θέση του υπερεπίπεδου, επομένως είναι ζωτικής σημασίας για την κατασκευή ενός SVM.
Στη λογιστική παλινδρόμηση, χρησιμοποιούμε τη συνάρτηση σιγμοειδούς για να συμπιέσουμε την τιμή εξόδου της γραμμικής συνάρτησης στο εύρος [0,1] και να εκχωρήσουμε ετικέτες με βάση ένα όριο (0,5). Στο SVM, χρησιμοποιούμε την τιμή εξόδου μιας γραμμικής συνάρτησης για να αποφασίσουμε την ταξινόμηση: αν η έξοδος είναι μεγαλύτερη από 1, ανήκει σε μια κατηγορία, αν η έξοδος είναι -1, ανήκει σε μια άλλη κλάση. Το SVM σχηματίζει το οριακό εύρος [-1,1] θέτοντας το όριο της τιμής εξόδου σε 1 και -1.
Πρόβλεψη καλοήθων και κακοήθων διαγνώσεων καρκίνου χρησιμοποιώντας μηχανές υποστήριξης φορέων.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
sns.set_style('whitegrid')
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()
df.info()print(cancer.target_names)
# ['malignant', 'benign']
# 数据描述:
df.describe()
# 统计摘要:
df.info()
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'
])
sns.countplot(x=df['target'], label="Count")
plt.figure(figsize=(10, 8))
sns.scatterplot(x='mean area', y='mean smoothness', hue='target', data=df)
plt.figure(figsize=(20,10))
sns.heatmap(df.corr(), annot=True)
Στη μηχανική μάθηση, η εκπαίδευση μοντέλων είναι ένα κρίσιμο βήμα για την εύρεση λύσεων σε προβλήματα.Παρακάτω θα παρουσιάσουμε τον τρόπο χρήσης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)
Στον κώδικα που χρησιμοποιούμε 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")
Το Support Vector Machine (SVM) είναι ένας ισχυρός αλγόριθμος ταξινόμησης του οποίου η απόδοση επηρεάζεται από υπερπαράμετρους. Τα παρακάτω θα παρουσιάσουν τις κύριες παραμέτρους του SVM και τον αντίκτυπό τους στην απόδοση του μοντέλου:
'poly'
), αγνοήθηκε από άλλους πυρήνες. Οι βέλτιστες τιμές υπερπαραμέτρων μπορούν να βρεθούν μέσω της αναζήτησης πλέγματος.Το 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)
Τα αποτελέσματα της εκπαίδευσης και των δοκιμών έχουν ως εξής:
Αποτελέσματα προπόνησης:
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]]
Αποτελέσματα δοκιμής:
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]]
Ο πολυωνυμικός πυρήνας 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)
Τα αποτελέσματα της εκπαίδευσης και των δοκιμών έχουν ως εξής:
Αποτελέσματα προπόνησης:
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]]
Αποτελέσματα δοκιμής:
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]]
Οι πυρήνες της συνάρτησης ακτινικής βάσης (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)
Τα αποτελέσματα της εκπαίδευσης και των δοκιμών έχουν ως εξής:
Αποτελέσματα προπόνησης:
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]]
Αποτελέσματα δοκιμής:
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]]
Μέσω της παραπάνω διαδικασίας εκπαίδευσης και αξιολόγησης μοντέλων, μπορούμε να παρατηρήσουμε τις διαφορές απόδοσης διαφορετικών πυρήνων SVM. Ο γραμμικός πυρήνας SVM αποδίδει καλά ως προς την ακρίβεια και τον χρόνο εκπαίδευσης και είναι κατάλληλος για καταστάσεις με υψηλότερες διαστάσεις δεδομένων. Ο πολυωνυμικός πυρήνας SVM και ο πυρήνας RBF SVM έχουν καλύτερη απόδοση σε μη γραμμικά δεδομένα, αλλά μπορεί να οδηγήσει σε υπερπροσαρμογή κάτω από ορισμένες ρυθμίσεις παραμέτρων. Η επιλογή κατάλληλων πυρήνων και υπερπαραμέτρων είναι ζωτικής σημασίας για τη βελτίωση της απόδοσης του μοντέλου.
ψηφιακή είσοδο : Το SVM υποθέτει ότι τα δεδομένα εισόδου είναι αριθμητικά. Εάν τα δεδομένα εισόδου είναι κατηγορικές μεταβλητές, ίσως χρειαστεί να τις μετατρέψετε σε δυαδικές εικονικές μεταβλητές (μία μεταβλητή ανά κατηγορία).
δυαδική ταξινόμηση :Το βασικό SVM είναι κατάλληλο για προβλήματα δυαδικής ταξινόμησης. Αν και το SVM χρησιμοποιείται κυρίως για δυαδική ταξινόμηση, υπάρχουν επίσης εκτεταμένες εκδόσεις για παλινδρόμηση και ταξινόμηση πολλαπλών κλάσεων.
X_train = pipeline.fit_transform(X_train)
X_test = pipeline.transform(X_test)
Τα παρακάτω δείχνουν τα αποτελέσματα εκπαίδευσης και δοκιμών διαφορετικών πυρήνων 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)
Αποτελέσματα προπόνησης:
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]]
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)
Αποτελέσματα προπόνησης:
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]]
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)
Αποτελέσματα προπόνησης:
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]]
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)
Αποτελέσματα προπόνησης:
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]]
Η ανάλυση κύριας συνιστώσας (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()
Μέσω των δύο πρώτων βασικών στοιχείων, μπορούμε εύκολα να διαχωρίσουμε διαφορετικές κατηγορίες σημείων δεδομένων σε δισδιάστατο χώρο.
Αν και η μείωση διαστάσεων είναι ισχυρή, η έννοια των εξαρτημάτων είναι δύσκολο να κατανοηθεί άμεσα. Κάθε στοιχείο αντιστοιχεί σε έναν συνδυασμό αρχικών χαρακτηριστικών, τα οποία μπορούν να αποκτηθούν με την τοποθέτηση ενός αντικειμένου PCA.
Οι ιδιότητες που σχετίζονται με τα εξαρτήματα περιλαμβάνουν:
Όταν χρησιμοποιούμε μηχανές διανύσματος υποστήριξης (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)
Αποτελέσματα προπόνησης:
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]]
Σε αυτό το άρθρο μάθαμε τα εξής:
αναφέρομαι σε:Υποστήριξη Vector Machine & PCA Tutorial για αρχάριους
Προτείνετε τις σχετικές στήλες μου: