رگرسیون یکی از پرکاربردترین تکنیکهای تحلیل داده و یادگیری ماشین است که در پیشبینی و مدلسازی روابط بین متغیرها استفاده میشود. بیش از 70 درصد از تحلیلهای داده در دنیای واقعی از انواع مختلف رگرسیون استفاده میکنند. این تکنیکها به کسب و کارها کمک میکنند تا روندها را پیشبینی کنند، ارتباطات را درک کنند و تصمیمات داده-محور بگیرند. در این مقاله، انواع مختلف رگرسیون، کاربردهای آنها و نحوه انتخاب مدل مناسب برای مسائل مختلف را بررسی میکنیم. شما میتوانید از فهرست مطالب برای دسترسی به بخشهای مختلف استفاده کنید و برای یادگیری بیشتر از ویدیوی آموزشی در انتهای صفحه بهره ببرید.
یکی از مهمترین مفاهیم در تحلیل دادهها و یادگیری ماشین، (رگرسیون) است. تصور کنید میخواهید قیمت خانهها را بر اساس متراژ آنها پیشبینی کنید. این یک مثال ساده از (تشخیص الگو) است که در آن رابطه بین دو متغیر (متغیر وابسته) و (متغیر مستقل) را بررسی میکنیم.
در این مثال، با استفاده از تکنیکهای (رگرسیون خطی) میتوانیم خط یا منحنیای را پیدا کنیم که بهترین برازش را با دادههای ما داشته باشد. این خط به ما کمک میکند تا (پیشبینیهای) دقیقتری انجام دهیم.
لینک توضیحات تکمیلی مفاهیم ذکر شده در متن بالا با رنگ آبی مشخص شده است. با کلیک بر روی این کلمات میتوانید به منابع اصلی دسترسی پیدا کنید.
تحلیل رگرسیون یک روش قدرتمند آماری است که به ما کمک میکند روابط بین متغیرها را کشف و پیشبینی کنیم. مانند یک کارآگاه که از سرنخهای مختلف برای حل معما استفاده میکند، رگرسیون از (متغیرهای پیشبینیکننده) برای یافتن الگوها و پیشبینی نتایج استفاده میکند.
تصور کنید مدیر یک ساختمان هوشمند هستید. با استفاده از فاکتورهای زیر میتوانید مصرف برق ساختمان را پیشبینی کنید:
یک آژانس تبلیغاتی با بررسی فاکتورهای زیر، میزان بازگشت سرمایه را پیشبینی میکند:
Y = β₀ + β₁X
β₁ = Σ((x - x̄)(y - ȳ)) / Σ((x - x̄)²)
β₀ = ȳ - β₁x̄
با دادههای نمونه:
β₁ = 1.75
β₀ = 500
برای بودجه 1000 تومان:
Y = 500 + 1.75(1000) = 2250 تومان
R² = 0.92
این مقدار نشان میدهد که 92% از تغییرات در بازگشت سرمایه توسط تغییرات در بودجه تبلیغات قابل توضیح است.
درونیابی فرآیند تخمین مقادیر ناشناخته بین نقاط دادههای موجود است. این تکنیک زمانی کاربرد دارد که میخواهیم مقادیر گمشده را در محدوده دادههای موجود پیدا کنیم.
برونیابی روشی برای پیشبینی مقادیر خارج از محدوده دادههای موجود است. این تکنیک برای پیشبینی روندهای آینده بر اساس الگوهای گذشته استفاده میشود.
رگرسیون خطی یکی از پایهایترین و پرکاربردترین روشهای تحلیل رگرسیون است که رابطه خطی بین متغیرها را مدل میکند. این روش درscikit-learnو دیگر کتابخانههای یادگیری ماشین به طور گسترده پشتیبانی میشود.
متراژ (X) | قیمت (Y) |
---|---|
80 | 800 |
120 | 1200 |
160 | 1600 |
Y = β₀ + β₁X + ε
β₁ = Σ((x - x̄)(y - ȳ)) / Σ((x - x̄)²)
β₀ = ȳ - β₁x̄
رگرسیون چندجملهای یک تکنیک قدرتمند برای مدلسازی روابط غیرخطی است که در آن متغیر وابسته به صورت چندجملهای با متغیر مستقل ارتباط دارد. برای مثال، در مطالعه رشد گیاهان، رابطه بین ارتفاع گیاه و زمان معمولاً خطی نیست - گیاه در ابتدا سریع رشد میکند، سپس رشد آن کند میشود و در نهایت به یک حد مشخص میرسد. همچنین در فیزیک، حرکت پرتابهها را در نظر بگیرید: مسیر یک توپ بسکتبال در هوا به شکل سهمی است که با معادله درجه دوم توصیف میشود. در اقتصاد نیز، رابطه بین قیمت و تقاضا اغلب غیرخطی است - با افزایش قیمت، کاهش تقاضا به صورت تدریجی شدت میگیرد. این نوع رگرسیون با اضافه کردن توانهای بالاتر متغیر مستقل (مثل x², x³) میتواند این الگوهای پیچیده را به خوبی مدل کند.مستندات scikit-learnروشهای پیشرفتهای برای ایجاد و بهینهسازی این مدلها ارائه میدهد.
زمان (X) | تعداد باکتری (Y) |
---|---|
0 | 100 |
2 | 400 |
4 | 1600 |
Y = β₀ + β₁X + β₂X² + β₃X³ + ... + βₙXⁿ + ε
توضیح اجزای فرمول:
β = (Z'Z)⁻¹Z'y
توضیح اجزای فرمول:
این فرمولها به ما امکان میدهند روابط غیرخطی پیچیده را با دقت بالا مدلسازی کنیم. درجه چندجملهای (n) باید با توجه به پیچیدگی دادهها و خطر بیشبرازش انتخاب شود.
from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression # Create polynomial features poly = PolynomialFeatures(degree=2) X_poly = poly.fit_transform(X) # Fit polynomial regression model = LinearRegression() model.fit(X_poly, y)
رگرسیون ریج یک تکنیک پیشرفته برای بهبود دقت پیشبینی در شرایط پیچیده است. تصور کنید میخواهید قیمت خانه را بر اساس ویژگیهای متعدد پیشبینی کنید: متراژ، تعداد اتاقها، سن ساختمان، فاصله تا مرکز شهر و کیفیت مصالح. این ویژگیها اغلب با هم همبستگی دارند - مثلاً خانههای بزرگتر معمولاً تعداد اتاق بیشتری دارند. در چنین شرایطی، رگرسیون خطی ساده ممکن است ضرایب بسیار بزرگی به برخی ویژگیها اختصاص دهد و دچار (overfitting)بیشبرازش شود. رگرسیون ریج با اضافه کردن یک جریمه (λ||β||²) به تابع هزینه، از این مشکل جلوگیری میکند. در مثال قیمت خانه، اگر λ = 1000 باشد، مدل از اختصاص وزن بیش از حد به متراژ یا تعداد اتاقها خودداری میکند و تمام ویژگیها را به طور متعادل در نظر میگیرد. این روش در صنعت داروسازی نیز کاربرد گستردهای دارد - برای پیشبینی اثربخشی داروها بر اساس صدها ویژگی مولکولی، که بسیاری از آنها همبستگی بالایی دارند.مستندات scikit-learnابزارهای قدرتمندی برای پیادهسازی و تنظیم این مدل ارائه میدهد.
L = ||y - Xβ||² + λ||β||²
توضیح اجزای فرمول:
β = (X'X + λI)⁻¹X'y
توضیح اجزای فرمول:
این فرمول ضرایبی را محاسبه میکند که هم خطای پیشبینی را کمینه میکنند و هم از بزرگ شدن بیش از حد ضرایب جلوگیری میکنند.
from sklearn.linear_model import Ridge from sklearn.preprocessing import StandardScaler # Scale features scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # Fit Ridge regression ridge = Ridge(alpha=1.0) # alpha is the regularization strength ridge.fit(X_scaled, y)
رگرسیون LASSO یک تکنیک پیشرفته در یادگیری ماشین است که برای حل دو چالش اصلی طراحی شده است: انتخاب ویژگیهای مهم و جلوگیری از بیشبرازش. این روش بهویژه در شرایطی که تعداد متغیرهای پیشبینیکننده زیاد است، بسیار کارآمد عمل میکند.
برخلاف رگرسیون ریج که فقط ضرایب را کوچک میکند، LASSO میتواند برخی ضرایب را دقیقاً صفر کند. این ویژگی باعث میشود LASSO علاوه بر منظمسازی، یک ابزار قدرتمند برای انتخاب ویژگی نیز باشد.
L = ||y - Xβ||² + λ||β||₁
تشریح ریاضی فرمول:
• مشتقپذیری: تابع در β = 0 مشتقپذیر نیست
• محدب بودن: تابع هزینه محدب است و حداقل سراسری دارد
• صفر شدن ضرایب: وقتی |∂L/∂βⱼ| λ باشد، βⱼ = 0 میشود
عبارت λ||β||₁ باعث میشود برخی ضرایب دقیقاً صفر شوند، زیرا مشتق نُرم L1 در صفر ناپیوسته است. این ویژگی منحصر به فرد LASSO است که آن را از Ridge متمایز میکند.
from sklearn.linear_model import Lasso from sklearn.preprocessing import StandardScaler # Scale features scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # Fit LASSO regression lasso = Lasso(alpha=0.1) # alpha is the regularization parameter lasso.fit(X_scaled, y) # Check which features were selected selected_features = [f for f, c in zip(feature_names, lasso.coef_) if c != 0]
رگرسیون الاستیک نت یک روش قدرتمند و انعطافپذیر است که مزایای رگرسیونهای Ridge و LASSO را ترکیب میکند. این روش بهویژه در شرایطی که با دادههای پیچیده و همبسته روبرو هستیم، بسیار کارآمد است. برای مثال، در صنعت دارویی، محققان از الاستیک نت برای پیشبینی اثربخشی داروها با استفاده از هزاران ویژگی مولکولی استفاده میکنند. در بازارهای مالی، تحلیلگران از این روش برای پیشبینی قیمت سهام با در نظر گرفتن صدها شاخص اقتصادی و مالی بهره میبرند. در تشخیص پزشکی، الاستیک نت به پزشکان کمک میکند تا از بین هزاران نشانگر زیستی، موثرترین عوامل در تشخیص بیماری را شناسایی کنند. این روش با تنظیم خودکار اهمیت متغیرها و حفظ گروههای همبسته، مدلهایی پایدار و قابل تفسیر ارائه میدهد.مستندات scikit-learnابزارهای کارآمدی برای پیادهسازی این روش فراهم میکند.
L = ||y - Xβ||² + λ₁||β||₁ + λ₂||β||²
تشریح اجزای فرمول:
• ترکیب منظمسازی L1 و L2
• انعطافپذیری در انتخاب ویژگی
• مدیریت همبستگی بین متغیرها
با تنظیم نسبت ρ میتوان بین خاصیت انتخاب ویژگی LASSO و مدیریت همبستگی Ridge تعادل برقرار کرد.
from sklearn.linear_model import ElasticNet from sklearn.preprocessing import StandardScaler # Scale features scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # Fit ElasticNet regression elastic_net = ElasticNet(alpha=1.0, l1_ratio=0.5) elastic_net.fit(X_scaled, y) # Get selected features selected_features = [f for f, c in zip(feature_names, elastic_net.coef_) if c != 0]
رگرسیون بیزی یک رویکرد قدرتمند در تحلیل داده است که با ترکیب دانش قبلی و دادههای جدید، تخمینهای دقیقتری ارائه میدهد. در صنعت خودروسازی، مهندسان از این روش برای پیشبینی عمر قطعات خودرو استفاده میکنند - با ترکیب دانش تاریخی درباره عملکرد قطعات مشابه و دادههای جدید تستهای استرس. در پزشکی شخصیسازی شده، پزشکان از رگرسیون بیزی برای تنظیم دوز دارو استفاده میکنند - با در نظر گرفتن اطلاعات جمعیتی و پاسخهای فردی بیمار به درمان. در هواشناسی، این روش برای پیشبینی دقیقتر آب و هوا به کار میرود - با ترکیب مدلهای اقلیمی موجود و دادههای لحظهای سنسورها. مزیت اصلی رگرسیون بیزی، توانایی آن در کمیسازی عدم قطعیت و بهروزرسانی مداوم پیشبینیها با دریافت دادههای جدید است. این ویژگی بهویژه در تصمیمگیریهای حساس مانند مدیریت ریسک در بانکداری یا کنترل کیفیت در خط تولید بسیار ارزشمند است.
P(β|D) ∝ P(D|β)P(β)
تشریح اجزای فرمول در تنظیم دوز دارو:
مثال: در تنظیم دوز داروی دیابت، پزشک از اطلاعات جمعیتی (توزیع پیشین) و پاسخ فردی بیمار به دوزهای قبلی (درستنمایی) برای تعیین دوز بهینه استفاده میکند.
y ~ N(Xβ, σ²I)
این مدل به پزشک اجازه میدهد عدم قطعیت در پاسخ بیمار را در نظر گرفته و با دریافت دادههای جدید، پیشبینیهای خود را بهروز کند.
با استفاده از دانش قبلی درباره الگوهای مصرف انرژی و دادههای جدید، مدل بیزی میتواند عدم قطعیت در پیشبینیها را بهتر مدیریت کند.
import pymc3 as pm with pm.Model() as model: # Prior distributions β = pm.Normal('β', mu=0, sd=10, shape=X.shape[1]) σ = pm.HalfNormal('σ', sd=1) # Linear regression μ = pm.math.dot(X, β) # Likelihood y_obs = pm.Normal('y_obs', mu=μ, sd=σ, observed=y) # Inference trace = pm.sample(2000, tune=1000)
رگرسیون لجستیک یک روش قدرتمند برای مسائل طبقهبندی دودویی است که در آن متغیر وابسته فقط دو حالت دارد (مثلاً بله/خیر، موفق/ناموفق). این روش با استفاده از تابع سیگموئید، احتمال تعلق یک نمونه به کلاس مثبت را محاسبه میکند. در پزشکی برای تشخیص بیماری، در بانکداری برای ارزیابی ریسک اعتباری، و در بازاریابی برای پیشبینی رفتار مشتری کاربرد گستردهای دارد.
P(خرید|ویژگیها) = 1 / (1 + e^(-z))
z = β₀ + β₁(سن) + β₂(درآمد) + β₃(بازدیدها) + β₄(خریدهایقبلی)
کاربرد در فروشگاه آنلاین:
مثال: برای مشتری ۳۵ ساله با درآمد ۱۰ میلیون و ۵ بازدید اخیر، احتمال خرید ۷۵٪ محاسبه میشود.
J(θ) = -1/m Σ[y log(h(x)) + (1-y)log(1-h(x))]
با کمینه کردن این تابع هزینه، مدل میتواند دقیقترین پیشبینی را برای رفتار خرید مشتریان ارائه دهد و کمپینهای هدفمند طراحی کند.
خروجی: احتمال وجود بیماری قلبی (0 تا 1)
from sklearn.linear_model import LogisticRegression from sklearn.preprocessing import StandardScaler # Scale features scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # Fit logistic regression model = LogisticRegression(penalty='l2', C=1.0) model.fit(X_scaled, y) # Get predictions probabilities = model.predict_proba(X_scaled) predictions = model.predict(X_scaled) # Feature importance coefficients = pd.DataFrame({ 'Feature': feature_names, 'Coefficient': model.coef_[0] })
پیادهسازی عملی انواع رگرسیون در Python
پیادهسازی شبکههای عصبی و رگرسیون
لایههای خطی در یادگیری عمیق
Hastie, Tibshirani, and Friedman
دانلود رایگانChristopher Bishop
James, Witten, Hastie, and Tibshirani
دانلود رایگاندورههای عملی با دادههای واقعی
یادگیری تعاملی با تمرینهای عملی
منبع آزاد برای یادگیری ماشین
مقایسه جامع روشهای رگرسیون خطی
روشهای بهینهسازی در مسائل دادههای بزرگ