Berbagi teknologi

[Pembelajaran Mesin] Penerapan mesin vektor pendukung dan analisis komponen utama dalam pembelajaran mesin

2024-07-12

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

Support vector machine (SVM) adalah model pembelajaran mesin yang kuat dan serbaguna yang cocok untuk klasifikasi linier dan nonlinier, regresi, dan deteksi outlier. Artikel ini akan memperkenalkan algoritma mesin vektor dukungan dan implementasinya di scikit-learn, dan secara singkat mengeksplorasi analisis komponen utama dan penerapannya di scikit-learn.

1. Ikhtisar mesin vektor dukungan

Support vector machine (SVM) adalah algoritma yang banyak digunakan dalam bidang pembelajaran mesin, disukai karena karakteristiknya dalam memberikan akurasi yang signifikan dengan sumber daya komputasi yang lebih sedikit. SVM dapat digunakan untuk tugas klasifikasi dan regresi, namun paling banyak digunakan dalam masalah klasifikasi.

Apa itu mesin vektor dukungan?

Tujuan dari mendukung mesin vektor adalah untuk Tidak adaN ruang dimensi ( Tidak adaN adalah jumlah fitur) untuk menemukan hyperplane yang dapat membedakan titik data dengan jelas. Hyperplane ini memungkinkan titik data dari berbagai kategori dipisahkan dan sejauh mungkin dari hyperplane untuk memastikan ketahanan klasifikasi.

Masukkan deskripsi gambar di sini

Untuk mencapai pemisahan titik data yang efektif, mungkin ada beberapa hyperplane. Tujuan kami adalah memilih hyperplane dengan margin maksimum, yaitu jarak maksimum antara dua kelas. Memaksimalkan margin membantu meningkatkan akurasi klasifikasi.

Hyperplanes dan vektor pendukung

Masukkan deskripsi gambar di sini

Hyperplane adalah batas keputusan yang membagi titik data. Titik data yang terletak di kedua sisi hyperplane dapat diklasifikasikan ke dalam kategori berbeda. Dimensi hyperplane bergantung pada jumlah fitur: jika fitur inputnya 2, hyperplane adalah garis lurus; jika fiturnya 3, hyperplane adalah bidang dua dimensi. Ketika jumlah fitur melebihi 3, hyperplane menjadi sulit dipahami secara intuitif.

Masukkan deskripsi gambar di sini

Vektor pendukung mengacu pada titik-titik yang paling dekat dengan hyperplane, yang mempengaruhi posisi dan arah hyperplane. Dengan vektor dukungan ini, kita dapat memaksimalkan margin pengklasifikasi. Menghapus vektor dukungan akan mengubah posisi hyperplane, sehingga sangat penting untuk membangun SVM.

Intuisi margin besar

Dalam regresi logistik, kami menggunakan fungsi sigmoid untuk mengompresi nilai keluaran fungsi linier ke dalam rentang [0,1] dan menetapkan label berdasarkan ambang batas (0,5). Di SVM, kita menggunakan nilai keluaran dari fungsi linier untuk menentukan klasifikasi: jika keluaran lebih besar dari 1, maka termasuk dalam satu kelas; jika keluarannya -1, maka termasuk dalam kelas lain. SVM membentuk rentang marjinal [-1,1] dengan menetapkan ambang batas nilai keluaran ke 1 dan -1.

2. Pemrosesan awal dan visualisasi data

Memprediksi diagnosis kanker jinak dan ganas menggunakan mesin vektor pendukung.

Informasi dasar tentang kumpulan data

  • Jumlah fiturnya 30, contoh:
    • Radius (jarak rata-rata dari pusat ke titik keliling)
    • Tekstur (deviasi standar nilai skala abu-abu)
    • perimeter
    • daerah
    • Kehalusan (variasi lokal dalam panjang radius)
    • Kekompakan (Keliling^2 / Luas - 1,0)
    • Kecekungan (tingkat keparahan bagian kontur yang tertekan)
    • Lesung pipit (jumlah bagian cekung pada kontur)
    • simetri
    • Dimensi Fraktal ("Perkiraan Garis Pantai" - 1)
  • Kumpulan data berisi 569 sampel, dan distribusi kelasnya adalah 212 sampel ganas dan 357 sampel jinak.
  • Kategori sasaran:
    • ganas
    • jinak

Impor perpustakaan yang diperlukan

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

Muat kumpulan data

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

Ikhtisar data

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

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

visualisasi data

Matriks sebar pasangan fitur
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
Bagan batang distribusi kategori
sns.countplot(x=df['target'], label="Count")
  • 1

Masukkan deskripsi gambar di sini

Plot sebar luas rata-rata versus kehalusan rata-rata
plt.figure(figsize=(10, 8))
sns.scatterplot(x='mean area', y='mean smoothness', hue='target', data=df)
  • 1
  • 2

Masukkan deskripsi gambar di sini

Peta panas korelasi antar variabel
plt.figure(figsize=(20,10))
sns.heatmap(df.corr(), annot=True)
  • 1
  • 2

Masukkan deskripsi gambar di sini

3. Pelatihan model (pemecahan masalah)

Dalam pembelajaran mesin, pelatihan model merupakan langkah penting dalam menemukan solusi terhadap masalah.Di bawah ini kami akan memperkenalkan cara menggunakannyascikit-learn Melaksanakan pelatihan model dan mendemonstrasikan kinerja mesin vektor dukungan (SVM) di bawah kernel yang berbeda.

Persiapan dan pra-pemrosesan data

Pertama, kita perlu menyiapkan dan memproses data terlebih dahulu. Berikut contoh kode untuk preprocessing data:

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

Dalam kode yang kami gunakan MinMaxScaler DanStandardScaler Skalakan datanya. Data dibagi menjadi set pelatihan dan pengujian, dengan 30% data digunakan untuk pengujian.

Evaluasi kinerja model

Untuk mengevaluasi kinerja model, kami mendefinisikan a print_score fungsi, yang dapat menampilkan akurasi, laporan klasifikasi, dan matriks kebingungan hasil pelatihan dan pengujian:

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

Mendukung mesin vektor (SVM)

Support vector machine (SVM) adalah algoritma klasifikasi canggih yang kinerjanya dipengaruhi oleh hyperparameter. Berikut ini akan diperkenalkan parameter utama SVM dan dampaknya terhadap kinerja model:

  • parameter C : Mengontrol trade-off antara mengklasifikasikan poin pelatihan dengan benar dan memiliki batasan keputusan yang mulus.lebih kecil Bahasa InggrisC(longgar) membuat biaya kesalahan klasifikasi (penalti) menjadi lebih rendah (margin lunak), sekaligus lebih besar Bahasa InggrisC(ketat) membuat kesalahan klasifikasi menjadi lebih mahal (margin keras), memaksa model untuk menafsirkan data masukan dengan lebih ketat.
  • parameter gamma : Mengontrol cakupan pengaruh satu set pelatihan.lebih besar sinar gammaγ Jadikan cakupan pengaruh lebih dekat (titik data yang lebih dekat memiliki bobot lebih tinggi), lebih kecil sinar gammaγ Memperluas jangkauannya (solusi yang lebih luas).
  • parameter derajat: Fungsi kernel polinomial ('poly' ), diabaikan oleh kernel lain. Nilai hyperparameter yang optimal dapat ditemukan melalui pencarian grid.

SVM Kernel Linier

SVM kernel linier cocok untuk sebagian besar situasi, terutama ketika kumpulan data memiliki banyak fitur. Berikut ini adalah contoh kode menggunakan SVM kernel linier:

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

Hasil pelatihan dan pengujian adalah sebagai berikut:

Hasil pelatihan:

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

Hasil tes:

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 Kernel Polinomial

SVM kernel polinomial cocok untuk data nonlinier. Berikut ini adalah contoh kode menggunakan kernel polinomial orde kedua:

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

Hasil pelatihan dan pengujian adalah sebagai berikut:

Hasil pelatihan:

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

Hasil tes:

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

Fungsi basis radial (RBF) kernel SVM

Kernel fungsi basis radial (RBF) cocok untuk memproses data nonlinier. Berikut contoh kode penggunaan inti 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

Hasil pelatihan dan pengujian adalah sebagai berikut:

Hasil pelatihan:

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

Hasil tes:

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

Meringkaskan

Melalui proses pelatihan dan evaluasi model di atas, kita dapat mengamati perbedaan kinerja berbagai kernel SVM. SVM kernel linier berkinerja baik dalam hal akurasi dan waktu pelatihan, dan cocok untuk situasi dengan dimensi data yang lebih tinggi. SVM kernel polinomial dan SVM kernel RBF memiliki performa lebih baik pada data nonlinier, namun dapat menyebabkan overfitting pada pengaturan parameter tertentu. Memilih kernel dan hyperparameter yang sesuai sangat penting untuk meningkatkan performa model.

4. Persiapan data SVM

masukan digital : SVM mengasumsikan bahwa data masukan berupa numerik. Jika data masukan berupa variabel kategori, Anda mungkin perlu mengubahnya menjadi variabel dummy biner (satu variabel per kategori).

klasifikasi biner :SVM dasar cocok untuk masalah klasifikasi biner. Meskipun SVM terutama digunakan untuk klasifikasi biner, ada juga versi yang diperluas untuk regresi dan klasifikasi kelas jamak.

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

Pelatihan dan evaluasi model

Berikut ini adalah hasil pelatihan dan pengujian kernel SVM yang berbeda:

SVM Kernel Linier

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

Hasil pelatihan:

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 Kernel Polinomial
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

Hasil pelatihan:

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
Kernel Fungsi Basis Radial 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

Hasil pelatihan:

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

Mendukung penyetelan hyperparameter mesin vektor

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

Hasil pelatihan:

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. Analisis komponen utama

Pengantar PCA

Analisis komponen utama (PCA) adalah teknik yang mencapai reduksi dimensi linier dengan memproyeksikan data ke dalam ruang berdimensi lebih rendah. Langkah-langkah spesifiknya adalah sebagai berikut:

  • Gunakan dekomposisi nilai tunggal: Memproyeksikan data ke dalam ruang berdimensi rendah melalui dekomposisi nilai tunggal.
  • pembelajaran tanpa pengawasan:PCA tidak memerlukan data berlabel untuk reduksi dimensi.
  • Transformasi fitur: Cobalah untuk menemukan fitur mana yang paling banyak menjelaskan varians dalam data.

Visualisasi PCA

Karena data berdimensi tinggi sulit untuk divisualisasikan secara langsung, kita dapat menggunakan PCA untuk menemukan dua komponen utama pertama dan memvisualisasikan data dalam ruang dua dimensi. Untuk mencapai hal tersebut, data perlu dinormalisasi terlebih dahulu agar varians setiap fitur menjadi varian satuan.

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

Masukkan deskripsi gambar di sini

Melalui dua komponen utama pertama, kita dapat dengan mudah memisahkan berbagai kategori titik data dalam ruang dua dimensi.

Jelaskan komponennya

Meskipun reduksi dimensi sangat efektif, makna komponen sulit untuk dipahami secara langsung. Setiap komponen berhubungan dengan kombinasi fitur asli, yang dapat diperoleh dengan memasang objek PCA.

Properti terkait komponen meliputi:

  • skor bahan: Nilai variabel yang diubah.
  • Beban (berat): Bobot kombinasi fitur.
  • Kompresi data dan pelestarian informasi: Mencapai kompresi data melalui PCA sambil mempertahankan informasi penting.
  • Penyaringan kebisingan: Kebisingan dapat disaring selama proses reduksi dimensi.
  • Ekstraksi dan rekayasa fitur: Digunakan untuk mengekstrak dan membuat fitur baru.

Penyesuaian parameter model support vector machine (SVM).

Saat menggunakan support vector machine (SVM) untuk pelatihan model, kita perlu menyesuaikan hyperparameter untuk mendapatkan model terbaik. Berikut contoh kode penyesuaian parameter SVM menggunakan grid search (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

Hasil pelatihan:

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. Ringkasan

Dalam artikel ini kita mempelajari hal berikut:

  • Mendukung mesin vektor (SVM): Memahami konsep dasar SVM dan implementasinya dengan Python.
  • Fungsi kernel SVM: Termasuk fungsi basis linier, radial (RBF) dan fungsi kernel polinomial.
  • persiapan data: Bagaimana menyiapkan data untuk algoritma SVM.
  • Penyetelan hiperparameter: Menyetel hyperparameter SVM melalui pencarian grid.
  • Analisis Komponen Utama (PCA): Cara menggunakan PCA untuk mengurangi kompleksitas data dan menggunakannya kembali di scikit-learn.

mengacu pada:Tutorial Support Vector Machine & PCA untuk Pemula
Rekomendasikan kolom terkait saya:


Masukkan deskripsi gambar di sini