کمترین مربعات

بندانگشتی|برازش سهمی بر مجموعه‌ای از داده‌ها در نرم‌افزار اکسل

روش **حداقل مربعات** (به انگلیسی: method of least squares) روشی در تحلیل رگرسیون است که برای حل دستگاه معادلاتی به کار می‌رود که تعداد معادله‌هایش بیش از تعداد مجهول‌هایش است. مهم‌ترین کاربرد روش کمترین مربعات در برازش منحنی بر داده‌ها است. مدل برازش شده بر داده‌ها، مدلی است که در آن کمیت \chi^2 کمینه باشد.

\chi^2 = \sum_{i=1}^{N} \frac{(y_i-f(\vec{x_i}, \vec{\beta}))^2}{\sigma_{y,i}^2}

روش حداقل مربعات در زبان برنامهٔ نویسی R، بیشتر نرم‌افزارهای آماری و ریاضی (مانند Excel, SPSS, MATLAB و …) و ماشین حساب‌های مهندسی وجود دارد.

## تاریخچه
منشأ روش حداقل مربعات از نجوم و یافتن موقعیت ستارگان بوده‌است.

## ساختار ریاضی
برای برازش منحنی y = f(\vec{x}) بر داده‌ها، فرض می‌کنیم اندازه‌گیری‌ها مستقل از هم انجام شده‌اند و خطای \vec{x} نیز در مقابل خطای y قابل صرف نظر است (مقادیر \vec{x} بدون خطا هستند). تابع f علاوه بر \vec{x}، به ثوابتی که آن‌ها را با بردار \vec{\beta} نشان می‌دهیم بستگی دارند. هدف، پیدا کردن مقادیر \vec{\beta} است، به گونه‌ای که تابع f(\vec{x}, \vec{\beta}) دقیق‌ترین پیش‌بینی را از y ارائه دهد. به این منظور، کمیت باقی مانده را به صورت

d_i = y_i - f(\vec{x}_i,\vec{\beta})

تعریف می‌کنیم. اگر هر y_i از توزیع نرمال حول مقدار واقعی f(\vec{x}_i, \vec{\beta}) با پهنای \sigma_{y, i} پیروی کند، احتمال به دست آوردن y_i متناسب است با:

Prob_\vec{\beta}(y_i) \propto \frac{1}{\sigma_{y,i}^2}  e^{-d_i^2/2/\sigma_{y,i}^2} 

است. احتمال مشاهدهٔ تمام مقادیر y این‌طور به دست می‌آید:

 Prob_\vec{\beta}(y_1, y_2, ..., y_N) = Prob_\vec{\beta}(y_1) \times Prob_\vec{\beta}(y_2) \times ... \times Prob_\vec{\beta}(y_N) 

 \propto \frac{1}{\prod_{i=1}^{N} \sigma_{y,i}} e^{-\chi^2/2} 

کمیت \chi^2 که در نما قرار دارد به صورت

\chi^2 = \sum_{i=1}^{N} \frac{(y_i-f(\vec{x_i}, \vec{\beta}))^2}{\sigma_{y,i}^2} = \sum_{i=1}^{N} \frac{d_i^2}{\sigma_{y,i}^2}

تعریف می‌شود. پس هدف، پیدا کردن \vec{\beta} است؛ به گونه‌ای که \chi^2 کمینه شود.

\hat{\vec{\beta}} = argmin_{\vec{\beta}} \,\,\chi^2

برای بدست پارامتر بهینه باید از تابع مربعات گرادیان گرفته و آن را برابر با صفر قرار دهیم:

\frac{\partial \chi^2}{\partial \beta_j} = 0, \ j=1,\ldots,m,

### حداقل مربعات بدون وزن
اگر فرض کنیم \sigma_{y,i}ها برای همهٔ داده‌ها برابر است، خواهیم داشت:

2\sum_i d_i\frac{\partial d_i}{\partial \beta_j} = -2\sum_i d_i\frac{\partial f\left(\vec x_i,\vec \beta\right)}{\partial \beta_j} = 0, \ j=0,\ldots,m

### سایر روش‌ها
سایر انواع روش حداقل مربعات، عبارت‌اند از کمترین مربعات دارای قید (Constrained)، کمترین مربعات وزن‌دار (Weighted) و کمترین مربعات مجموع (Total)

## نمونه‌ها
بندانگشتی|مرتبط

### برازش خط
برای خط،

\chi^2 = \sum_{i=1}^{N} \frac{(y_i-A-Bx_i)^2}{\sigma_{y}^2}

با مشتق‌گیری جزئی، خواهیم داشت:

 \frac{\partial\chi^2}{\partial A}=\frac{-2}{\sigma_y^2}\sum_{i=1}^{N}{(y_i-A-Bx_i)}=0\Rightarrow\ AN+B\sum\ x_i=\sum\ y_i 

 \frac{\partial\chi^2}{\partial B}=\frac{-2}{\sigma_y^2}\sum_{i=1}^{N}{x_i(y_i-A-Bx_i)}=0\Rightarrow\ A\sum\ x_i+B\sum\ x_i^2=\sum\ x_iy_i 

در نتیجه:

A=\bar{y}-B\bar{x}  ,     B=\frac{\sum_{i=1}^{N}{y_i\ \left(x_i-\bar{x}\right)}}{\sum_{i=1}^{N}\left(x_i-\bar{x}\right)^2}

### برازش خط مبدأ گذر
با انجام محاسبات بالا برای خط مبدأ گذر خواهیم داشت:

 B=\frac{\sum_{i=1}^{N}{x_iy_i}}{\sum_{i=1}^{N}x_i^2}

### برازش سهمی
برای سهمی،

\chi^2 = \sum_{i=1}^{N} \frac{(y_i-A-Bx_i-Cx_i^2)^2}{\sigma_{y}^2}

در نهایت، دستگاه معادلات برازش چنین به دست می‌آید:

AN + B\sum x + C\sum x^2 = \sum y

A\sum x + B\sum x^2 + C\sum x^3 = \sum xy

A\sum x^2 + B\sum x^3 + C\sum x^4 = \sum x^2y

### کمترین مربعات خطی
اگر فرض کنیم بُعد ورودی m است، یعنی \vec{x} = [x_1, x_2, \dots, x_m] و تابع f(\,\cdot\,,\vec{\beta}) یک تابع خطی است، مسئله رگرسیون به یک مسئله بهینه‌سازی برای پیداکردن m+1 پارامتر تبدیل می‌شود. به این معنی که ما یک پارامتر چند متغیره به اسم \vec{\beta} = [\beta_0, \beta_1, \cdots, \beta_m] داریم و سعی می‌کنیم y را با ترکیبی خطی از **<math>\vec{x}</math>**تخمین بزنیم یعنی f\left(\vec{x}, \vec{\beta}\right) = \beta_0 + \sum_{i=1}^m \beta_i\times x_i. حال اگر یک بعد دیگر به متغیر **<math>\vec{x}</math>** اضافه کنیم و مقدارش را همیشه عدد ثابت 1
 در نظر بگیریم (x_0 = 1) و **<math>\vec{x}</math>** را به صورتِ \vec{x} = [1, x_1, x_2, \dots, x_m] تغییر دهیم، تخمینی که از **<math>y</math>** داریم در واقع ضرب نقطه ای بردار ورودی و بردار پارامترهای ماست یعنی f\left(\vec{x},\vec{\beta}\right)  = \sum_{i=0}^ m \beta_i \times x_i = \vec{\beta} \,\,.\, \vec{x}. حال فرض کنیم که تعداد مثالهایی که قرار است برای تخمین پارامترها استفاده کنیم

n
 است و این مثالها را به این شکل نمایش دهیم D = (\vec{x_{1}}, y_1), \cdots (\vec{x_{n}}, y_n). همان‌طور که در مقدمه گفتیم پارامتر بهینه پارامتری است که تابع S(\vec{\beta}) را به حداقل برساند یعنی تابع پایین را:

S(\vec{\beta}) = \sum_{i=1}^{n} r_i^2 = \sum_{i=1}^{n} \left(y_i-f\left(\vec x_i, \vec \beta\right)\right)^2= \sum_{i=1}^{n} (\vec{\beta} \, . \, \vec{x_{i}} - y_i)^2

از آنجا که تابع S\left(\vec{\beta}\right) نسبت به \vec{\beta} تابعی کاملاً محدب است، در نقطه مینیمم گرادیان ما صفر خواهد بود و این روش پارامتر بهینه را بدست می‌دهد. برای تسهیل کار شکل تابع را با بکارگیری چند ماتریس ساده می‌کنیم. دو ماتریس برای این کار نیاز داردیم ماتریس X و ماتریس Y. ماتریس X ماتریس ورودهای چندمتغیره ماست. هر سطر معادل یک نمونه از داده ماست، سطر iام برابر است با iامین نمونه ورودی ما یعنی بردار \vec{x_{i}}، از اینرو X یک ماتریس n\times (m+1) خواهد بود. ماتریس Y از طرف دیگر برابر است با مجموعه متغیرهای وابسته داده ما. سطر iام این ماتریس برابر است با متغیر وابسته برای iامین نمونه داده ما یا همان y_i. ماتریس Y یک ماتریس n\times 1 است. با کمک این دو ماتریس می‌توان تابع ضرر را به شکل ذیل تعریف کرد:

L(D, \vec{\beta})= ||X\vec{\beta} - Y||^2 = (X\vec{\beta} - Y)^T (X\vec{\beta} - Y) = Y^{T}Y- Y^{T}X\vec{\beta}- \vec{\beta}^{T}X^TY+\vec{\beta}^{T}X^TX\vec{\beta}

حال گرادیان این تابع را نسبت به \vec{\beta} پیدا می‌کنیم که می‌شود:

\frac{\partial L(D, \vec{\beta})}{\partial \vec{\beta}}= \frac{\partial \left(Y^{T}Y- Y^{T}X\vec{\beta}- \vec{\beta}^{T}X^TY+\vec{\beta}^{T}X^TX\vec{\beta}\right)}{\partial \vec{\beta}} = -2X^TY + 2X^TX\vec{\beta}

با برابر قرار دادن گرادیان با صفر پارامتر بهینه بدست می‌آید:

-2X^TY + 2X^TX\vec{\beta} = 0 \Rightarrow X^TY  = X^TX\vec{\beta} \Rightarrow \vec{\hat{\beta}} = (X^TX)^{-1}X^TY

پس پارامتر بهینه ما برابر است با:

{\bf \vec{\hat{\beta}} = (X^TX)^{-1}X^TY}

## خطای روش حداقل مربعات
### خطای برازش خط
خطای شیب و عرض از مبدأ خط برازش شده برابر است با ( d_i=y_i-(A+Bx_i) ):

\left(\Delta A\right)^2\approx\left(\frac{1}{N}+\frac^2}{\sum_{i=1}^{N}\left(x_i-\bar{x}\right)^2}\right)\frac{\sum_{i=1}^{N}d_i^2}{N-2}  ,     \left(\Delta B\right)^2\approx\frac{1}{\sum_{i=1}^{N}\left(x_i-\bar{x}\right)^2}\frac{\sum_{i=1}^{N}d_i^2}{N-2}

برای خط مبدأ گذر

 \left(\Delta B\right)^2\approx\frac{1}{\sum_{i=1}^{N}x_i^2} 

## پیاده‌سازی روش حداقل مربعات
### زبان R
در زبان R، برازش تابع خطی به فرم

y = m_nx_n + m_{n-1}x_{n-1} + ... + m_2x_2 + m_1x_1 + b

بر داده‌ها به کمک تابع lsfit انجام می‌شود. قطعه کدهای زیر، نحوهٔ پیاده‌سازی و خروجی را برای یک تابع ۲ متغیره نشان می‌دهد.


```r
x = matrix(c(1.19, 1.08, 2.45, 2.53, 3.30, 2.97, 1.65, 0.58, 0.26, 4.39, 4.06, 0.55, 1.80, 1.68, 3.24, 2.23, 3.80, 4.63, 3.78, 4.84, # x_1 values
           1.60, 5.88, 1.55, 1.86, 1.06, 3.85, 9.29, 13.04, 14.52, 0.50, 2.89, 16.99, 15.42, 17.36, 11.82, 16.38, 11.06, 9.08, 17.75, 15.17), # x_2 values
           ncol = 2)
y = c(23.59, 31.95, 33.15, 34.00, 37.80, 41.07, 42.38, 43.76, 44.10, 44.16, 46.83, 50.52, 56.81, 59.04, 60.12, 61.84, 62.16, 64.18, 75.45, 76.77)
lsfit(x, y, intercept = TRUE)
```


### نرم‌افزار Excel
در نرم‌افزار اکسل، برازش تابع خطی به فرم

y = m_nx_n + m_{n-1}x_{n-1} + ... + m_2x_2 + m_1x_1 + b

بر داده‌ها به کمک تابع LINEST انجام می‌شود. این تابع جزو توابع آرایه‌ای است و با فشردن Ctrl+Enter اجرا می‌شود. ورودی تابع به شکل


```text
LINEST(known_y's, [known_x's], [const], [stats])
```


است که در آن به ترتیب مقادیر y، مقادیر x و سپس دو مقدار بولی وارد می‌شوند که اولی برای مبدأ گذر نبودن و دومی برای بازگرداندن مقادیر خطا، رگرسیون و … است. خروجی تابع در جدولی به صورت زیر برگردانده می‌شود:

منظور از {se} خطا است. خانه‌های ردیف دوم به بعد، در صورتی نشان داده می‌شوند که stats=TRUE باشد.

### ماشین حساب CASIO fx-82ES
بندانگشتی|آموزش ویژگی‌های بخش تحلیل داده ماشین حساب
اکثر ماشین حساب‌های مهندسی مجهز به ویژگی برازش منحنی به روش کمترین مربعات هستند. در ماشین حساب‌های کاسیو این ویژگی در بخش STAT قرار دارد.

## لاسو (LASSO)
لاسو یک مدل تنظیم شده  از مدل کمترین مربعات است. تنظیم به این صورت است که \|\beta\|^1 یا نرم L<sup>1</sup>-norm کمتر از مقدار مشخصی باشد. این معادل این است که در هنگام بهینه‌سازی هزینهٔ کمترین مربعات \alpha\|\beta\|^1 را نیز اضافه کرده باشیم. معادل بیزی این مدل این است که توزیع پیشین توزیع لاپلاس را برای پارامترهای مدل خطی استفاده کرده باشیم.

تفاوت اساسی بین مدل ridge regression و لاسو این است که در اولی علی‌رغم افزایش جریمه، ضرایب در عین غیرصفر بودن کوچکتر می‌شوند، علی‌رغم اینکه صفر نمی‌شوند، در صورتی که در لاسو با افزایش جریمه، تعداد بسیار بیشتری از ضرایب به سمت صفر میل می‌کنند. می‌توان بهینه‌سازی مربوط به لاسو را با روش‌های بهینه‌سازی درجه دوم یا در حالت کلی بهینه‌سازی محدب انجام داد. به دلیل ایجاد ضرایب کم، لاسو در بسیاری از کاربردها مانند سنجش فشرده  مورد استفاده قرار می‌گیرد.

### لاسو در رگرسیون خطی
پیچیدگی مدلهای پارامتری با تعداد پارامترهای مدل و مقادیر آن‌ها سنجیده می‌شود. هرچه این پیچیدگی بیشتر باشد خطر بیش‌برازش (Overfitting) برای مدل بیشتر است. پدیده بیش‌برازش زمانی رخ می‌دهد که مدل بجای یادگیری الگوهای داده، داده را را حفظ می‌کند و در عمل یادگیری به خوبی انجام نمی‌شود. برای جلوگیری از بیش‌برازش در مدلهای خطی مانند رگرسیون خطی جریمه‌ای به تابع هزینه اضافه می‌شود تا از افزایش زیاد پارامترها جلوگیری شود. به این کار تنظیم مدل یا Regularization گفته می‌شود. یکی از این روشهای تنظیم مدل روش لاسو است که در آن ضریبی از نُرمِ L_1به تابع هزینه اضافه می‌شود، در رگرسیون خطی تابع هزینه به شکل پایین تغییر می‌کند:

 L_r(D, \vec{\beta}) = L(D, \vec{\beta}) + \lambda ||\vec{\beta}||_1= \sum_{i=1}^{n} (\vec{\beta} \, . \, \vec{x_{i}} - y_i)^2 + \lambda\sum_{k=0}^m |\beta_k|

این روش تنظیم مدل باعث می‌شود که بسیاری از پارامترهای مدل نهائی صفر شوند و مدل به اصلاح خلوت (Sparse) شود.

## جستارهای وابسته
* کمینه مربعات خطی
* رگرسیون خطی
* رگرسیون لجیستیک
* رگرسیون پواسون

## پانویس

رده:کمترین مربعات
رده:آمار
رده:بهینه‌سازی ریاضی
رده:تحلیل رگرسیون
رده:روش‌های بهینه‌سازی
رده:روش‌های کمی و ریاضی (اقتصاد)
رده:محاسبات عددی
رده:مقاله‌های دارای ویدئو
رده:ویکی‌سازی رباتیک