چیتشیت
مقایسهی مدلهای کلاسیک
Classical Models Compared
رگرسیون خطی و لجستیک، درختها و جنگلها، SVM، KNN و بیز ساده در کنار هم، همراه با زمان استفاده از هرکدام.
فهرست مطالب
مقایسهی مدلها کنار هم
مقایسه| مدل | آموزش با | مرز، هزینهی پیشبینی و حافظه |
|---|---|---|
| Linear regression | گرادیان کاهشی | یک ابرصفحه. معادلهی نرمال از مرتبهی $O(n^3)$ بر حسب ویژگیهاست |
| Logistic regression | آنتروپی متقاطع دودویی | همیشه خطی. مرز تصمیم در p = 0.5 |
| Decision tree | ناخالصی جینی | نواحی مستطیلی حاصل از برشهای حریصانه. واریانس بالا |
| Random forest | بگینگ (Bagging) | رأی اکثریت یا میانگین چندین درخت |
| SVM | زیان لولا | بیشینهی حاشیه. ذخیرهی تنها بردارهای پشتیبان |
| KNN | تنبَل (Lazy) | بدون آموزش. $O(n \cdot d)$ به ازای هر پرسوجو، ذخیرهی تمام دادهها |
| Naive Bayes | شمارش فراوانیها | خطی. پیشبینی تنها یک ضرب ماتریسی است |
مقیاسبندی و دادهی بهینه
مقایسه| مدل | مقیاسبندی ویژگیها | بهترین عملکرد در |
|---|---|---|
| Linear regression | بله | خط مبنا برای هر وظیفهی رگرسیون |
| درختها و جنگلها | خیر | دادههای جدولی، انواع دادهی ترکیبی، زیر 10 هزار سطر |
| SVM | بله | دادههای کوچک یا تنکِ با ابعاد بالا |
| KNN | بله | دادههای کوچک، حداکثر تا حدود 20-50 ویژگی |
| Multinomial NB | خیر | متن با نمونههای آموزشی اندک |
| Gaussian NB | خیر | ویژگیهای پیوسته نزدیک به منحنی زنگولهای |
چه زمانی از هر مدل استفاده کنیم؟
نکتهها- از رگرسیون خطی به عنوان خط مبنا برای هر وظیفهی رگرسیون استفاده کنید.
- از رگرسیون لجستیک برای پاسخهای بله/خیر همراه با احتمالات و مرز خطی استفاده کنید.
- از جنگل تصادفی برای دادههای جدولی استفاده کنید. تقریباً نیازی به تنظیم ابرپارامترها ندارد.
- از SVM برای دادههای کم یا متنهای تنک با ویژگیهای TF-IDF استفاده کنید.
- وقتی دادهها مرتباً تغییر میکنند و زمان آموزش صفر میخواهید، از KNN استفاده کنید.
- برای متنهایی با کمتر از 10,000 نمونهی آموزشی، از TF-IDF با MultinomialNB استفاده کنید.
- برای متنهای کوتاه از BernoulliNB استفاده کنید. پارامتر
binary=Trueرا در CountVectorizer قرار دهید.
توابع زیان و فرمولها
مفهومها- MSE
- $\frac{1}{n} \sum (\hat{y} - y)^2$. گرادیان برحسب w برابر است با $\frac{2}{n} \sum (\hat{y} - y) x$.
- R squared
- $1 - SS_{\text{res}} / SS_{\text{tot}}$. مقدار 1.0 عالی است. 0.0 معادل میانگین است.
- Sigmoid
- $\sigma(z) = 1 / (1 + e^{-z})$. در $z = 0$ خروجی 0.5 میدهد.
- آنتروپی متقاطع دودویی
- $-\frac{1}{n} \sum (y \log p + (1-y) \log(1-p))$. گرادیان $\frac{1}{n} \sum (p - y) x$.
- جینی
- $1 - \sum_k p_k^2$. مقدار آن برای 6 گربه و 4 سگ برابر 0.48 است.
- لولا
- $\max(0, 1 - y f(x))$. فراتر از حاشیه برابر صفر است.
- کرنل RBF
- $\exp(-\gamma \lVert x - z \rVert^2)$. برای نقاط نزدیک، نزدیک به 1 است.
- Multinomial NB
- $(\text{count} + \alpha) / (\text{total} + \alpha \cdot V)$، جمعشده در فضای لگاریتمی.
ابتدا مقیاسبندی، سپس برازش
کدpython
clf = Pipeline([
("scaler", StandardScaler()), # SVM و KNN به آن نیاز دارند
("svm", SVC(kernel="rbf", C=1.0, gamma="scale")), # فرم دوگان، کرنلها
])
clf.fit(X_train, y_train)
clf.score(X_test, y_test) # دقت
clf['svm'].n_support_ # بردارهای پشتیبان
("svm", LinearSVC(C=1.0, max_iter=10000)) # دادههای بزرگ، فرم اولیه
("knn", KNeighborsClassifier(n_neighbors=5, metric="euclidean"))
mnb = MultinomialNB(alpha=1.0) # شمارشها، بدون مقیاسبندی
mnb.fit(X_train_counts, y_train)
ساخت جنگل تصادفی
گامبهگام- بوتاسترپنمونهگیری سطرها با جایگذاری. حدود 63٪ از سطرها انتخاب میشوند.
- خارج از کیسهباقی سطرها میتوانند درخت را ارزیابی کنند.
- زیرمجموعهی ویژگیهاهر برش در دستهبندی $\sqrt{n_{\text{features}}}$ ویژگی را میبیند.
- برش حریصانهانتخاب ویژگی و آستانه با بیشترین بهرهی اطلاعات.
- توقفیک گره خالص یا حد پیشهرس، شاخه (branch) را پایان میدهد.
- تکرارساخت
n_treesدرخت. مقدار پیشفرض 100 است. - تجمیعرأی اکثریت برای دستهها، میانگینگیری برای رگرسیون.
اهرمهای تعادل بین بایاس و واریانس
دستورها| دستور | کارکرد |
|---|---|
Large `C` | حاشیهی باریکتر، خطای دستهبندی کمتر. بیشبرازش (Overfit) |
Small `C` | حاشیهی عریضتر، نقض قانون بیشتر. کمبرازش (Underfit) |
K = 1 | خطای آموزش صفر. واریانس بالا |
K = N | پیشبینی دستهی اکثریت. بیشینهی بایاس |
Max depth | توقف زودهنگام درخت. پیشهرس |
NB `alpha` | آلفای بزرگتر هموارسازی قویتری میدهد |
Ridge $\lambda$ | مقدار بزرگتر وزنهای کوچکتری تولید میکند |
SVR $\epsilon$ | تیوب عریضتر، بردارهای پشتیبان کمتر |
مقادیر پیشفرض در کد درس
پیشفرضها| تنظیم | پیشفرض | نکته |
|---|---|---|
Tree `max_depth` | None | رشد میکند تا تمام برگها خالص شوند |
Tree `min_samples_split` | 2 | یک کنترل پیشهرس |
Tree `criterion` | "gini" | جینی و آنتروپی تقریباً برشهای یکسانی میدهند |
Forest `n_trees` | 100 | کتابخانهی scikit-learn از n_estimators=100 استفاده میکند |
Forest `max_features` | "sqrt" | رگرسیون از n_features/3 استفاده میکند |
KNN `k` | 5 | شروع از حوالی sqrt(N). عدد فرد برای K در حالت دودویی |
SVM `rbf_kernel` gamma | 0.5 | درجهی 3 برای polynomial_kernel |
GaussianNB `var_smoothing` | 1e-9 | جلوگیری از تقسیم بر واریانسِ صفر |
مشکلات و راهحلها
عیبیابیشکست لجستیک روی مرزهای دایرهای
- علت
- مرز تصمیم همیشه خطی است
- راهحل
- افزودن ویژگیهای چندجملهای
دقت پایین SVM
- علت
- ویژگیهای مقیاسبندینشده حاشیه را به هم میریزند
- راهحل
- استفاده از
StandardScalerدرون یکPipeline
SVCبیش از حد کند است- علت
- فرم دوگان از مرتبهی $O(n^2)$ تا $O(n^3)$ است
- راهحل
- فرم اولیهی
LinearSVC
افت عملکرد KNN با افزایش تعداد ویژگیها
- علت
- نفرین ابعاد
- راهحل
- ابتدا اجرای PCA یا UMAP
تغییر شدید تکدرخت با تغییر دادهها
- علت
- یک تکدرخت دارای واریانس بالایی است
- راهحل
- استفاده از جنگل تصادفی
رتبهی بالای MDI برای یک ویژگی نوفه (نویز)
- علت
- بایاس به سمت کاردینالیتی بالا
- راهحل
- اهمیت جایگشتی
تولید احتمال 0 توسط NB
- علت
- کلمهی دیدهنشده در یک دسته
- راهحل
- هموارسازی لاپلاس، آلفا برابر 1
خطای MultinomialNB روی ویژگیها
- علت
- مقادیر منفی ویژگیها
- راهحل
- GaussianNB یا شیفت دادن مقادیر
پرسشها
پرسش و پاسخ- چرا MSE برای رگرسیون لجستیک مناسب نیست؟
- همراه با سیگموئید، تابع زیان MSE غیرمحدب میشود. آنتروپی متقاطع دودویی محدب است.
- چرا بیز ساده با وجود فرض غلط کار میکند؟
- دستهبندی به رتبهبندی صحیح نیاز دارد، نه احتمالات دقیق.
- چرا جنگل بهتر از یک درخت عمل میکند؟
- میانگینگیری از درختهای ناهمبسته، واریانس را بدون افزایش بایاس کاهش میدهد.
- چرا فقط بردارهای پشتیبان اهمیت دارند؟
- نقاط فراتر از حاشیه، زیان لولای صفر دارند.
- بیز ساده یا رگرسیون لجستیک؟
- با NB شروع کنید؛ با بزرگ شدن داده و رسیدن NB به حالت یکنواخت (Plateau)، سوییچ کنید.
- معادلهی نرمال یا گرادیان کاهشی؟
- معادلهی نرمال برای دادههای کوچک، گرادیان کاهشی برای دادههای بزرگ.
- آیا به احتمالات بیز ساده اعتماد کنیم؟
- خیر؛ از
CalibratedClassifierCVباcv=5استفاده کنید.
کلاسهای پیادهسازی از صفر
کار و کد| وظیفه | کد |
|---|---|
| خط برازش فرم بسته | LinearRegressionNormal() |
| ناخالصی گره | gini_impurity(labels) |
| مقدار کرنل | rbf_kernel(x, z, gamma=0.5) |
| زیان لولای دستهای | hinge_loss(X, y, w, b) |
| دستهبند متن | MultinomialNB(alpha=1.0) |