Teknologian jakaminen

[Machine Learning] Tukivektorikoneiden ja pääkomponenttianalyysin soveltaminen koneoppimiseen

2024-07-12

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

Tukivektorikone (SVM) on tehokas ja monipuolinen koneoppimismalli, joka sopii lineaariseen ja epälineaariseen luokitteluun, regressioon ja poikkeamien havaitsemiseen. Tässä artikkelissa esitellään tukivektorikonealgoritmi ja sen toteutus scikit-learnissä sekä tarkastellaan lyhyesti pääkomponenttianalyysiä ja sen käyttöä scikit-learnissä.

1. Yleiskatsaus tukivektorikoneisiin

Tukivektorikone (SVM) on koneoppimisen alalla laajalti käytetty algoritmi, jota suositaan sen ominaisuuden vuoksi, että se tarjoaa merkittävän tarkkuuden pienemmillä laskentaresursseilla. SVM:ää voidaan käyttää sekä luokitus- että regressiotehtäviin, mutta yleisimmin sitä käytetään luokitusongelmissa.

Mikä on tukivektorikone?

Tukivektorikoneiden tavoitteena on NNN mittatila ( NNN on ominaisuuksien lukumäärä) löytääksesi hypertason, joka erottaa datapisteet selvästi. Tämä hypertaso mahdollistaa eri luokkien datapisteiden erottamisen ja mahdollisimman kauas hypertasosta luokituksen kestävyyden varmistamiseksi.

Lisää kuvan kuvaus tähän

Tietopisteiden tehokkaan erottamisen saavuttamiseksi voi olla useita hypertasoja. Tavoitteenamme on valita hypertaso, jolla on maksimimarginaali, eli maksimietäisyys kahden luokan välillä. Marginaalien maksimointi parantaa luokittelun tarkkuutta.

Hypertasot ja tukivektorit

Lisää kuvan kuvaus tähän

Hypertaso on päätösraja, joka jakaa datapisteet. Hypertason molemmilla puolilla sijaitsevat datapisteet voidaan luokitella eri luokkiin. Hypertason mitat riippuvat piirteiden lukumäärästä: jos syöteominaisuuksia on 2, hypertaso on suora, jos piirteitä on 3, hypertaso on kaksiulotteinen taso. Kun piirteiden määrä ylittää 3, hypertasoa on vaikea ymmärtää intuitiivisesti.

Lisää kuvan kuvaus tähän

Tukivektorit viittaavat hypertasoa lähinnä oleviin pisteisiin, jotka vaikuttavat hypertason sijaintiin ja suuntaan. Näillä tukivektoreilla voimme maksimoida luokittelijan marginaalin. Tukivektorien poistaminen muuttaa hypertason sijaintia, joten ne ovat tärkeitä SVM:n rakentamisessa.

Suuri marginaali intuitio

Logistisessa regressiossa käytämme sigmoidifunktiota tiivistämään lineaarifunktion lähtöarvo alueelle [0,1] ja määrittämään tunnisteet kynnyksen (0,5) perusteella. SVM:ssä käytetään lineaarifunktion lähtöarvoa luokituksen päättämiseen: jos tulos on suurempi kuin 1, se kuuluu yhteen luokkaan, jos lähtö on -1, se kuuluu toiseen luokkaan. SVM muodostaa marginaalialueen [-1,1] asettamalla lähtöarvon kynnysarvoksi 1 ja -1.

2. Tietojen esikäsittely ja visualisointi

Hyvä- ja pahanlaatuisten syöpien diagnoosien ennustaminen tukivektorikoneilla.

Perustiedot tietojoukosta

  • Ominaisuuksia on 30, esim.
    • Säde (keskimääräinen etäisyys keskustasta kehäpisteisiin)
    • Tekstuuri (harmaasävyarvojen keskihajonta)
    • ympärysmitta
    • alueella
    • Tasaisuus (paikallinen vaihtelu säteen pituudessa)
    • Kompakti (kehä^2 / pinta-ala - 1,0)
    • Koveruus (ääriviivan painuneen osan vakavuus)
    • Dimples (ääriviivan koverien osien lukumäärä)
    • symmetria
    • Fraktaalimitta ("rannikkoviivan likiarvo" - 1)
  • Aineisto sisältää 569 näytettä, ja luokkajakauma on 212 pahanlaatuista näytettä ja 357 hyvänlaatuista näytettä.
  • Kohdeluokka:
    • pahanlaatuinen
    • hyvänlaatuinen

Tuo tarvittavat kirjastot

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

Lataa tietojoukko

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

Tietojen yleiskatsaus

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

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

tietojen visualisointi

Piirreparien sirontamatriisi
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
Luokkajakauman pylväskaavio
sns.countplot(x=df['target'], label="Count")
  • 1

Lisää kuvan kuvaus tähän

Keskimääräisen pinta-alan sirontakuvaus keskimääräisen sileyden funktiona
plt.figure(figsize=(10, 8))
sns.scatterplot(x='mean area', y='mean smoothness', hue='target', data=df)
  • 1
  • 2

Lisää kuvan kuvaus tähän

Muuttujien välisten korrelaatioiden lämpökartta
plt.figure(figsize=(20,10))
sns.heatmap(df.corr(), annot=True)
  • 1
  • 2

Lisää kuvan kuvaus tähän

3. Mallikoulutus (ongelmanratkaisu)

Koneoppimisessa mallikoulutus on kriittinen askel ratkaisujen löytämisessä ongelmiin.Alla esittelemme kuinka sitä käytetäänscikit-learn Suorita mallikoulutusta ja esittele tukivektorikoneen (SVM) suorituskykyä eri ytimissä.

Tietojen valmistelu ja esikäsittely

Ensin meidän on valmisteltava ja esikäsiteltävä tiedot. Seuraava on koodiesimerkki tietojen esikäsittelyä varten:

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

Käyttämässämme koodissa MinMaxScaler jaStandardScaler Skaalaa tiedot. Tiedot on jaettu harjoitus- ja testisarjoihin, joista 30 % käytetään testaukseen.

Arvioi mallin suorituskykyä

Mallin suorituskyvyn arvioimiseksi määrittelemme a print_score toiminto, joka voi tulostaa koulutus- ja testitulosten tarkkuuden, luokitteluraportin ja sekavuusmatriisin:

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

Tukivektorikone (SVM)

Tukivektorikone (SVM) on tehokas luokitusalgoritmi, jonka suorituskykyyn vaikuttavat hyperparametrit. Seuraavassa esitellään SVM:n pääparametrit ja niiden vaikutus mallin suorituskykyyn:

  • C-parametrit : Hallitsee kompromissia harjoituspisteiden oikein luokittelun ja sujuvan päätösrajojen välillä.pienempi CCC(löysä) tekee virheellisestä luokittelusta aiheutuvat kustannukset (rangaistukset) pienemmät (pehmeät marginaalit) ja suurempia CCC(tiukka) tekee väärin luokittelusta kalliimman (kova marginaali), pakottaa mallin tulkitsemaan syöttödataa tiukemmin.
  • gamma-parametri : Hallitse yhden harjoitussarjan vaikutusalaa.suurempi γ gammaγ Tee vaikutusalue lähemmäksi (lähempänä olevilla datapisteillä on suurempi paino), pienempi γ gammaγ Laajenna kattavuutta (laajemmat ratkaisut).
  • asteen parametri: Polynominen ydinfunktio ('poly' ), muut ytimet jättävät huomioimatta. Optimaaliset hyperparametriarvot löytyvät ruudukkohaulla.

Lineaarinen ydin SVM

Lineaarinen ytimen SVM sopii useimpiin tilanteisiin, varsinkin kun tietojoukossa on paljon ominaisuuksia. Seuraavassa on esimerkki koodista, jossa käytetään lineaarisen ytimen 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

Koulutus- ja testitulokset ovat seuraavat:

Treenitulokset:

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

Testitulokset:

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

Polynomiytimen SVM

Polynomiytimen SVM sopii epälineaariselle datalle. Seuraavassa on esimerkki koodista, jossa käytetään toisen asteen polynomiydintä:

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

Koulutus- ja testitulokset ovat seuraavat:

Treenitulokset:

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

Testitulokset:

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

Radial Base Function (RBF) -ytimen SVM

Radial Base Function (RBF) -ytimet soveltuvat epälineaarisen datan käsittelyyn. Seuraavassa on esimerkki koodista, jossa käytetään RBF-ydintä:

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

Koulutus- ja testitulokset ovat seuraavat:

Treenitulokset:

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

Testitulokset:

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

Tee yhteenveto

Yllä olevan mallin koulutus- ja arviointiprosessin avulla voimme havaita eri SVM-ytimien suorituskykyerot. Lineaarisen ytimen SVM toimii hyvin tarkkuuden ja harjoitusajan suhteen, ja se sopii tilanteisiin, joissa datamitat ovat korkeammat. Polynomiytimen SVM ja RBF-ytimen SVM toimivat paremmin epälineaarisissa tiedoissa, mutta ne voivat johtaa ylisovitukseen tietyissä parametriasetuksissa. Sopivien ytimien ja hyperparametrien valitseminen on ratkaisevan tärkeää mallin suorituskyvyn parantamiseksi.

4. SVM-tietojen valmistelu

digitaalinen tulo : SVM olettaa, että syötetiedot ovat numeerisia. Jos syötetiedot ovat kategoriallisia muuttujia, saatat joutua muuttamaan ne binäärimuuttujiksi (yksi muuttuja luokkaa kohden).

binääriluokitus :Basic SVM sopii binääriluokitteluongelmiin. Vaikka SVM:ää käytetään pääasiassa binääriluokitukseen, on olemassa myös laajennettuja versioita regressiolle ja moniluokkaluokittelulle.

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

Mallin koulutus ja arviointi

Seuraavassa näkyy eri SVM-ytimien koulutus- ja testaustulokset:

Lineaarinen ydin 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

Treenitulokset:

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
Polynomiytimen 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

Treenitulokset:

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

Treenitulokset:

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

Tuki vektorikoneen hyperparametrien viritystä

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

Treenitulokset:

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. Pääkomponenttianalyysi

Johdatus PCA:han

Pääkomponenttianalyysi (PCA) on tekniikka, jolla saavutetaan lineaarisen ulottuvuuden vähentäminen projisoimalla tiedot alemman ulottuvuuden tilaan.

  • Käytä singulaariarvojakelua: Projisoi tiedot pieniulotteiseen tilaan singulaariarvon hajotuksen avulla.
  • ohjaamatonta oppimista: PCA ei vaadi merkittyjä tietoja ulottuvuuden vähentämiseen.
  • Ominaisuuden muunnos: Yritä selvittää, mitkä ominaisuudet selittävät suurimman vaihtelun tiedoissa.

PCA:n visualisointi

Koska korkeadimensionaalista dataa on vaikea visualisoida suoraan, voimme käyttää PCA:ta löytääksemme kaksi ensimmäistä pääkomponenttia ja visualisoidaksemme tiedot kaksiulotteisessa avaruudessa. Tämän saavuttamiseksi tiedot on ensin normalisoitava siten, että kunkin ominaisuuden varianssi on yksikkövarianssi.

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

Lisää kuvan kuvaus tähän

Kahden ensimmäisen pääkomponentin avulla voimme helposti erottaa eri tietopisteluokat kaksiulotteisessa avaruudessa.

Selitä komponentit

Vaikka ulottuvuuden vähentäminen on voimakasta, komponenttien merkitystä on vaikea ymmärtää suoraan. Jokainen komponentti vastaa alkuperäisten ominaisuuksien yhdistelmää, joka voidaan saada sovittamalla PCA-objekti.

Komponentteihin liittyviä ominaisuuksia ovat:

  • ainesosapisteet: Muunnetun muuttujan arvo.
  • Kuorma (paino): Ominaisuuksien yhdistelmäpaino.
  • Tietojen pakkaus ja tietojen säilyttäminen: Pakkaa tiedot PCA:n avulla säilyttäen samalla keskeiset tiedot.
  • Melun suodatus: Melu voidaan suodattaa pois ulottuvuuden vähentämisprosessin aikana.
  • Ominaisuuden poiminta ja suunnittelu: Käytetään uusien ominaisuuksien poimimiseen ja rakentamiseen.

Tukivektorikoneen (SVM) mallin parametrien säätö

Kun käytämme tukivektorikoneita (SVM) mallikoulutukseen, meidän on säädettävä hyperparametreja parhaan mallin saamiseksi. Seuraava on esimerkkikoodi SVM-parametrien säätämiseen ruudukkohaun (GridSearchCV) avulla:

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

Treenitulokset:

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

Tässä artikkelissa opimme seuraavaa:

  • Tukivektorikone (SVM): Ymmärtää SVM:n peruskäsitteet ja sen toteutuksen Pythonissa.
  • SVM-ytimen toiminto: Sisältää lineaariset, radiaaliset kantafunktiot (RBF) ja polynomiydinfunktiot.
  • tietojen valmistelu: Kuinka valmistella tietoja SVM-algoritmia varten.
  • Hyperparametrien viritys: SVM-hyperparametrien virittäminen ruudukkohaun avulla.
  • Pääkomponenttianalyysi (PCA): PCA:n käyttäminen tietojen monimutkaisuuden vähentämiseen ja sen uudelleenkäyttö scikit-learnissä.

viitata:Tuki Vector Machine & PCA Tutorial aloittelijoille
Suosittele aiheeseen liittyviä sarakkeitani:


Lisää kuvan kuvaus tähän