SVM وSVR وKNN
“الهامش الأقصى هو الجواب — كلما اتسع الشارع، زادت ثقة المصنّف”
آلات المتجهات الداعمة: مستوى الهامش الأقصى وحيلة النواة (RBF) وSVR للانحدار بأنبوب ε. KNN: مقاييس المسافة واختيار k ولعنة الأبعاد.
المتطلبات الأساسية
المفاهيم المغطاة
∑الصيغ الرئيسية
هدف SVM
تعظيم الهامش 2/||w|| مع التصنيف الصحيح — هامش أكبر = تعميم أفضل
الثنائي (النواة)
حيلة النواة: استبدال x·x بـK(x,x) للحدود غير الخطية — O(n²) في الذاكرة، ليس في فضاء الميزات
نواة RBF
دالة القاعدة الشعاعية — تعيين غاوسي لانهائي الأبعاد؛ γ يتحكم في عرض النواة
▶محاكاة تفاعلية
⬡هندسة النموذج
الفكرة الرئيسية: الهامش الأقصى
تخيل التصنيف الثنائي بمستوى فاصل. يمكن لعدد لا نهائي من المستويات الفاصلة أن تفصل الفئات — لكن أيها يعمم بشكل أفضل؟ تجيب SVMs: ذلك الذي يملك الهامش الأقصى — أكبر 'شارع' ممكن بين الفئتين. النقاط على حدود الهامش هي متجهات الدعم. فقط هذه النقاط تحدد الحدود؛ يمكن إزالة الباقي دون تغييرها.
حيلة النواة: أبعاد لانهائية مجاناً
العديد من مجموعات البيانات ليست قابلة للفصل الخطي في فضائها الأصلي. حيلة النواة تُعيّن البيانات ضمنياً إلى فضاء عالي الأبعاد حيث تكون قابلة للفصل — دون حساب التعيين صراحة. K(x,x') = φ(x)·φ(x') تحسب الضرب النقطي في الفضاء عالي الأبعاد مباشرة. نواة RBF تعيّن إلى فضاء هيلبرت لانهائي الأبعاد، مما يجعل SVMs قوية بشكل استثنائي.
SVMs هي الخوارزمية الوحيدة التي يمكنها إثبات العمل في فضاءات الميزات لانهائية الأبعاد (RKHS). لا توجد خوارزمية أخرى لديها هذه الخاصية.
الهامش اللين: التعامل مع الضوضاء بالترخيص
بالنسبة للبيانات الصاخبة، لن يعمل SVM ذو الهامش الصلب الذي يتطلب فصلاً مثالياً. يُقدم SVM ذو الهامش اللين متغيرات الترخيص ξᵢ ≥ 0 للسماح ببعض الأخطاء، معاقَبة بالمعامل الفائق C. C كبير = هامش ضيق، تحمل منخفض للأخطاء (قد يُفرط في الملاءمة). C صغير = هامش واسع، تحمل عالٍ (قد يُقصّر في الملاءمة).
SVM في بيئة الإنتاج
from sklearn.svm import SVC, SVR from sklearn.preprocessing import StandardScaler from sklearn.pipeline import Pipeline from sklearn.model_selection import GridSearchCV, train_test_split from sklearn.datasets import make_classification class="tok-comment"># ── Sample data ──────────────────────────────────────────────────────── X, y = make_classification(n_samples=class="tok-num">300, n_features=class="tok-num">10, random_state=class="tok-num">42) X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=class="tok-num">0.2, random_state=class="tok-num">42) class="tok-comment"># CRITICAL: SVM requires feature scaling svm_pipeline = Pipeline([ (class="tok-str">'scaler', StandardScaler()), (class="tok-str">'svm', SVC(kernel=class="tok-str">'rbf', probability=True)) ]) class="tok-comment"># Tune C and gamma param_grid = { class="tok-str">'svm__C': [class="tok-num">0.01, class="tok-num">0.1, class="tok-num">1, class="tok-num">10, class="tok-num">100], class="tok-str">'svm__gamma': [class="tok-str">'scale', class="tok-str">'auto', class="tok-num">0.001, class="tok-num">0.01, class="tok-num">0.1] } grid_search = GridSearchCV( svm_pipeline, param_grid, cv=class="tok-num">5, scoring=class="tok-str">'roc_auc', n_jobs=-class="tok-num">1 ) grid_search.fit(X_train, y_train) print(fclass="tok-str">"Best AUC: {grid_search.best_score_:.4f}") print(fclass="tok-str">"Best params: {grid_search.best_params_}") class="tok-comment"># SVR for regression svr = Pipeline([ (class="tok-str">'scaler', StandardScaler()), (class="tok-str">'svr', SVR(kernel=class="tok-str">'rbf', C=class="tok-num">100, epsilon=class="tok-num">0.1)) ])
مزالق SVM
غياب التحجيم = نتائج كارثية. SVM هو الخوارزمية الأكثر حساسية للتحجيم. StandardScaler ليس اختيارياً.
بطء على البيانات الكبيرة: تدريب SVM بـO(n²) إلى O(n³). استخدم SGDClassifier (خسارة المفصل) لـn > 50K.
ضبط C: C كبير جداً = إفراط في الملاءمة؛ صغير جداً = قصور. دائماً التحقق التقاطعي على شبكة لوغاريتمية.
لعنة البُعد في KNN: مقاييس المسافة تفقد معناها في الأبعاد العالية. استخدم PCA أولاً، أو انتقل إلى ball-tree/KD-tree مع k=√n.
?اختبار المعرفة
يتم حفظ التقدم في متصفحك — لا حاجة لحساب.