SVM Margin Lembut dan Parameter C
Pelajar akan memerhatikan cara peningkatan C mengurangkan lebar margin dan menghukum salah pengelasan, manakala C kecil membenarkan lebih banyak pelanggaran untuk margin yang lebih lebar dan teguh.
SVM Margin Lembut dan Parameter C ialah pelajaran Machine Learning Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Machine Learning Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Machine Learning Academy merangkumi sejumlah 4 pelajaran.
Masalah dengan Margin Keras
SVM margin keras memerlukan setiap contoh latihan dikelaskan dengan betul dengan margin sekurang-kurangnya 1, tanpa memberi ruang untuk ralat. Dalam amalan, set data sebenar hampir tidak pernah terpisah secara linear dengan sempurna. Hingar, contoh yang dilabel secara salah dan pertindihan kelas yang sebenar bermakna margin keras sama ada mustahil dipenuhi atau menghasilkan sempadan yang terlalu berliku untuk mengelakkan setiap pelanggaran sehingga terlebih padan dengan data latihan. Kita memerlukan kaedah berprinsip untuk membenarkan beberapa kesilapan sambil masih memaksimumkan margin.
Pemboleh Ubah Longgar: Membenarkan Pelanggaran
SVM margin lembut memperkenalkan pemboleh ubah longgar ξᵢ ≥ 0 (xi, disebut 'ksi'), satu untuk setiap contoh latihan, yang mengukur sejauh mana sesuatu titik melanggar margin. Jika ξᵢ = 0, titik itu dikelaskan dengan betul di luar margin. Jika 0 < ξᵢ < 1, titik itu berada di dalam margin tetapi masih dikelaskan dengan betul. Jika ξᵢ > 1, titik itu dikelaskan secara salah. Objektif baharu meminimumkan ||w||²/2 + C × Σξᵢ, dengan mengimbangi lebar margin terhadap jumlah pelanggaran.
Parameter C: Penalti untuk Pelanggaran
C ialah penalti pengregularan: ia mengawal sejauh mana SVM mengenakan penalti terhadap setiap pelanggaran margin. C yang besar mengenakan penalti yang berat, memaksa model meminimumkan bilangan titik yang dikelaskan secara salah dengan mengorbankan margin yang lebih sempit — ini menghasilkan bias rendah, varians tinggi (risiko terlebih padan). C yang kecil menerima lebih banyak pelanggaran sebagai pertukaran untuk margin yang lebih lebar dan licin — ini menghasilkan bias lebih tinggi, varians lebih rendah (lebih kukuh terhadap hingar). Penentuan C yang sesuai memerlukan pengesahan silang.
Memvisualkan Kesan C
Dengan C yang sangat kecil (contohnya 0.001), SVM menghasilkan margin yang lebar dengan banyak titik latihan yang dikelaskan secara salah — sempadannya licin dan membuat generalisasi dengan baik, tetapi kurang padan jika data boleh dipisahkan dengan jelas. Dengan C yang sangat besar (contohnya 1000), sempadan membengkok untuk mengelaskan hampir setiap titik latihan dengan betul, lalu menghasilkan margin sempit yang mungkin terlebih padan. C yang optimum berada di antara dua keterlaluan ini. Pertukaran ini mencerminkan pertukaran bias-varians yang terdapat dalam semua model yang menggunakan pengregularan.
from sklearn.svm import SVC
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
import numpy as np
X, y = load_breast_cancer(return_X_y=True)
for C in [0.001, 0.01, 0.1, 1, 10, 100]:
model = make_pipeline(StandardScaler(), SVC(kernel='linear', C=C))
score = cross_val_score(model, X, y, cv=5).mean()
print(f'C={C:6}: CV accuracy={score:.4f}')Bilangan Vektor Sokongan berbanding C
Apabila C berkurang (lebih banyak pengregularan, margin lebih lebar), lebih banyak contoh latihan melanggar margin dan menjadi vektor sokongan. Apabila C bertambah (kurang pengregularan, margin lebih sempit), lebih sedikit contoh berada pada atau di dalam margin, maka lebih sedikit vektor sokongan diperlukan. Anda boleh memerhatikannya dengan memeriksa svm.n_support_. Model dengan banyak vektor sokongan bergantung pada lebih banyak contoh latihan untuk menentukan sempadannya — model ini cenderung lebih kukuh tetapi juga lebih kompleks.
from sklearn.svm import SVC
from sklearn.datasets import load_breast_cancer
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
import numpy as np
X, y = load_breast_cancer(return_X_y=True)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
for C in [0.01, 0.1, 1, 10, 100]:
svm = SVC(kernel='linear', C=C).fit(X_scaled, y)
print(f'C={C:5}: support vectors = {svm.n_support_}, total = {sum(svm.n_support_)}')Kehilangan Engsel: Fungsi Kehilangan SVM
SVM margin lembut meminimumkan kehilangan engsel: max(0, 1 - y × (w·x + b)) bagi setiap contoh latihan, ditambah dengan istilah pengregularan L2 ||w||²/(2C). Kehilangan engsel ialah sifar apabila sesuatu titik dikelaskan dengan betul di luar margin (titik itu 'tidak mengalami kehilangan'). Apabila titik bergerak ke arah atau merentasi sempadan, kehilangan meningkat secara linear. Hal ini menjadikan SVM kurang sensitif terhadap pencilan berbanding kehilangan ralat kuasa dua, yang akan mengenakan penalti kuadratik terhadap ramalan yang jauh tersasar.
import numpy as np
# Hinge loss for a single example: y in {-1, +1}, score = decision function value
def hinge_loss(y, score):
return max(0, 1 - y * score)
# Correctly classified, far beyond margin
print('Correct, margin=2:', hinge_loss(1, 3)) # 0
# Inside margin, still correct
print('Inside margin:', hinge_loss(1, 0.5)) # 0.5
# Misclassified
print('Misclassified:', hinge_loss(1, -1)) # 2LinearSVC untuk Set Data Besar
scikit-learn menyediakan LinearSVC sebagai alternatif yang lebih pantas kepada SVC(kernel='linear') untuk set data besar. Ia menggunakan pengoptimum LIBLINEAR (penurunan koordinat primal atau dwi) dan bukannya penyelesai pengaturcaraan kuadratik LIBSVM. Untuk set data dengan puluhan ribu contoh, LinearSVC boleh menjadi 10–100 kali lebih pantas sambil menghasilkan keputusan yang hampir serupa. Ia tidak menyokong predict_proba() secara terbina dalam, tetapi anda boleh menggunakan penskalaan Platt melalui CalibratedClassifierCV.
from sklearn.svm import LinearSVC
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
X, y = load_breast_cancer(return_X_y=True)
model = make_pipeline(StandardScaler(), LinearSVC(C=1.0, max_iter=5000))
scores = cross_val_score(model, X, y, cv=5)
print('LinearSVC CV:', scores.mean().round(4), '+/-', scores.std().round(4))Memilih C: Strategi Carian Grid
Nilai C yang optimum merangkumi banyak tertib magnitud, jadi sentiasa cari pada skala logaritma: [0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000]. Jarak linear terlepas julat penting bagi nilai kecil. Gunakan GridSearchCV dengan CV 5 lipatan untuk menilai setiap C. Bagi SVM secara khusus, carian ini adalah satu dimensi (atau dua dimensi dengan gamma untuk kernel RBF), menjadikannya boleh dilaksanakan secara pengiraan walaupun dengan grid yang terperinci.
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
from sklearn.datasets import load_breast_cancer
import numpy as np
X, y = load_breast_cancer(return_X_y=True)
model = make_pipeline(StandardScaler(), SVC(kernel='linear'))
param_grid = {'svc__C': np.logspace(-3, 3, 7)}
grid = GridSearchCV(model, param_grid, cv=5)
grid.fit(X, y)
print('Best C:', grid.best_params_['svc__C'])
print('Best CV score:', round(grid.best_score_, 4))Margin Lembut dengan Kernel Bukan Linear
Konsep margin lembut turut terpakai pada kernel bukan linear (RBF, polinomial). Apabila anda menggunakan kernel RBF, C masih mengawal toleransi terhadap pelanggaran margin, tetapi kini sempadan boleh menjadi permukaan melengkung dalam ruang input asal. C yang kecil dengan kernel RBF menghasilkan sempadan yang sangat licin dan hampir bulat. C yang besar dengan gamma yang kecil menghasilkan sempadan yang amat kompleks dan membalut rapat setiap kelompok latihan. Kedua-dua keterlaluan ini menyebabkan terlebih padan dengan cara masing-masing.
Ringkasan dan Intuisi Margin Lembut
Anggap SVM margin lembut sebagai dail pertukaran. Naikkan C: model menjadi lebih agresif, mengenakan penalti terhadap setiap pelanggaran dan mengecilkan margin untuk memadankan data latihan. Turunkan C: model menjadi lebih bertolak ansur, menerima pelanggaran, melebarkan margin dan mengutamakan generalisasi. C yang betul ialah nilai yang mencapai keseimbangan yang diperlukan oleh set data khusus anda. Ini bukan ciri unik SVM — pengregularan juga terdapat dalam regresi rabung (alpha), regresi logistik (C) dan rangkaian neural (susutan pemberat), yang sentiasa menukar ganti bias dengan varians.
Membandingkan SVM dengan Regresi Logistik
Regresi logistik dan SVM margin lembut kedua-duanya mencari sempadan keputusan linear, tetapi mengoptimumkan fungsi kehilangan yang berbeza. Regresi logistik meminimumkan kehilangan log, yang mengenakan penalti secara berterusan terhadap semua pengelasan salah. SVM meminimumkan kehilangan engsel, yang sifar bagi titik yang dikelaskan dengan betul di luar margin dan linear bagi pelanggaran. Dalam amalan: SVM sering mengatasi regresi logistik pada set data berdimensi rendah dengan margin yang jelas, manakala regresi logistik lebih disukai apabila anggaran kebarangkalian yang ditentukur dengan baik diperlukan atau apabila set data sangat besar (berjuta-juta contoh), yang membolehkannya dilatih dengan lebih pantas.
from sklearn.svm import SVC
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
X, y = load_breast_cancer(return_X_y=True)
for name, model in [('SVM', SVC(kernel='linear', C=1.0)), ('LogReg', LogisticRegression(max_iter=1000))]:
pipe = make_pipeline(StandardScaler(), model)
score = cross_val_score(pipe, X, y, cv=5).mean()
print(f'{name}: CV accuracy={score:.4f}')Semakan Pantas
Uji pemahaman anda tentang SVM Margin Lembut dan parameter C daripada pelajaran ini.
Ulang Kaji Pelajaran
Dalam pelajaran ini, Anda telah mempelajari: SVM margin lembut membenarkan pelanggaran margin yang terkawal melalui pemboleh ubah longgar, C ialah penalti regularisasi yang mengimbangi lebar margin dengan ralat latihan, dan sentiasa cari C pada skala logaritma menggunakan pengesahan silang. Seterusnya, kita akan meneroka helah kernel yang memanjangkan SVM kepada sempadan bukan linear.
Pelajari Python dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Soalan Lazim
Adakah pelajaran “SVM Margin Lembut dan Parameter C” percuma?
Ya — teks penuh “SVM Margin Lembut dan Parameter C” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Machine Learning Academy, tingkat taraf kepada CoddyKit PRO. Kursus Machine Learning Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “SVM Margin Lembut dan Parameter C”?
Pelajar akan memerhatikan cara peningkatan C mengurangkan lebar margin dan menghukum salah pengelasan, manakala C kecil membenarkan lebih banyak pelanggaran untuk margin yang lebih lebar dan teguh. Anda berlatih Machine Learning Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Machine Learning Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Machine Learning Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “SVM Margin Lembut dan Parameter C” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Machine Learning Academy ini?
Ya. Setiap pelajaran Machine Learning Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Pengelas Margin Maksimum: Vektor Sokongan dan Satah Hiper
- SVM Margin Lembut dan Parameter C
- Helah Kernel: Kernel RBF, Polinomial dan Sigmoid
- Melaraskan C dan Gamma dengan Carian Grid