1. Giới thiệu về Linear Regression

Với mình và đa số các bạn sinh viên chuyên ngành khoa học máy tính nói chung, Hồi quy tuyến tính (hay Linear Regression) là một thuật toán gối đầu giường, hay nói cách khác là cực kỳ quen thuộc, phổ biến, thậm chí là "đẻ" ra là đã phải biết thuật toán này. Nên trong nội dung bài báo này mình chỉ tóm tắt sơ qua những gì đã quá quen thuộc với các bạn

Ta có một bảng dữ liệu như sau

Kinh nghiệm (tháng) Lương (USD)
1 120
6 200
12 450
24 923
Ở đây có Rất nhiều dòng như vậy

Note: Thật ra thì lương không thấp z đâu mấy bạn ơi

Việc của ta là đi tìm mức lương cho các mức kinh nghiệm tiếp theo dựa vào đống dữ liệu cho sẵn.

Trên thực tế, ai cũng biết bài toán này giải như nào. Để mình tóm tắt lại nhé. Đặt

X là ma trận đã thêm bias
1
vào cột Kinh nghiệm
Y
sẽ là cột Lương.

Ta sẽ có bài toán đi tìm bộ tham số

β sao cho

L=E(x,y)D(βxy)2

là nhỏ nhất. Trong đó,

D(X,Y) là bộ dữ liệu huấn luyện được cho trước của chúng ta, ở đây là
X,Y

Cách làm thông thường của chúng ta sẽ là biến nó về dạng đại số tuyến tính rồi dùng giải tích tuyến tính tính đạo hàm rồi cho đạo hàm bằng

0 để giải quyết bài toán. Các bạn sẽ kết thúc với một công thức như thế này:

β^=(XTX)1XTY

Cách này đúng, đúng mạnh luôn. Không thể nói là cách này sai hay sao đó và thậm chí mình thừa nhận luôn, lúc đi làm đi học mình code công thức này cho nhanh chứ Gradient Descent cái quái gì? (sẽ có một bài về bạn này sau, bạn này khá hay nhưng mà để hiểu nó phải từ từ mình coi lại sách của Prof. Boyd)

2. Một vấn đề sẽ đề cập trong bài viết này

Giờ ví dụ như mình không chỉ có

1 thuộc tính là số tháng làm việc chuyên nghiệp, mà mình có
15000
thuộc tính khác nhau, có thể ví dụ như số căn nhà, tuổi tác, số người bạn, ngôn ngữ sử dụng, điện thoại bạn xài,. Vậy để đoán lương, đôi lúc ta không thật sự dùng đến
15000
mà chỉ dùng
15
cái hoặc những cái mà chúng ta cho rằng liên quan nhất thì ta phải bỏ cái nào? Nhắc đến đây các bạn nghĩ ngay tới Principal Component Analysis? No, nó là đổi trục toạ độ so với những thuộc tính ban đầu, chúng ta sẽ bàn về vấn đề này sau (ý tôi là những bài blogpost khác). Ta sẽ bỏ thẳng các đặc trưng mà ta nghĩ là không cần thiết bằng một cách nào đó.

3. Bài toán cực đại hoá điều hợp lý (Maximum Likelihood Estimator)

Đây là bài toán cũng khá nổi trong giới học máy. Nói nôm na là như thế này: Bạn có một mô hình (gọi là

f) được định nghĩa bằng tham số
θ
và một đống dữ liệu
d
. Ta sẽ GIẢ SỬ DỮ LIỆU ĐÃ ĐÚNG RỒI vậy thì chúng ta sẽ cố gắng tìm ra bộ tham số
θ
tốt nhất cho mô hình kia HỢP LÝ NHẤT. Ta sẽ gọi
p(d|θ)
là xác suất điểm dữ liệu
d
đúng với mô hình
f
. Gọi
D
là tất cả các điểm dữ liệu
d1,d2,...dm
vậy thì ta sẽ muốn xác xuất của các điểm dữ liệu đều đúng

p(d1,d2,d3,...,dm|θ)

là cao nhất.

Một ví dụ trực quan hơn liên kết trực tiếp đến bài toán hồi quy tuyến tính.

Trong bài toán hồi quy tuyến tính ta cũng có tập dữ liệu

D và các điểm dữ liệu
di=(xi,yi)
, hơn nữa chúng ta đặt giả thiết là
yi
có mối quan hệ tuyến tính với các thuộc tính của
xi
, tức là
f=βx+β0
. Vậy ta có thể nhìn bài toán này dưới góc nhìn bài toán Maximum Likelihood vì lúc này
θ
nói trên chính là bộ tham số
β
của mô hình tuyến tính

4. Góc nhìn xác suất của hồi quy tuyến tính

Ta định hình bài toán lại như sau. Giả sử ta có

k+1 biến ngẫu nhiên
βi|i=1,k+1
. Với mỗi cặp
(x,y)D
,
y
sẽ có quan hệ tuyến tính với các công thuộc tính
xi
của
x
. Công thức xấp xỉ
y
dựa vào
x
sẽ là:

y^=β0+β1x1+β1x1+β2x2+...+βkxk+ϵ

Sau đó ta sẽ lấy mẫu ngẫu nhiên

(x,y)D và ta sẽ được rất nhiều quan sát khác nhau. Lúc này tập dữ liệu ta có sẽ là
D={(xi,1,xi,2,xi,3,...xi,k,yi)|i=1,m}

Vậy, nhiệm vụ lúc này của ta là ước lượng các

β^i sao cho các số này gần
βi
tương ứng.

Lúc này ta sẽ cần cực đại hoá

p(di=(xi,yi)|β). Ta sẽ giả sử với một
xi
cho trước thì
yi^
sẽ luôn có giá trị nằm xung quanh
yi
và phân phối của độ lệch này sẽ là một phân phối chuẩn với độ lệch chuẩn
σ
. Điều này tức là:

ϵN(0,σ2)

Dựa vào phương trình trên ta có được

Yp(y)=N(β0+β1x1+β1x1+β2x2+...+βkxk,σ2)

Vì lương của mấy ông kia không liên quan đến nhau (ta giả sử không có trường hợp chia lương nhé :D, chơi z kỳ lắm). Nên các

dii.i.dp(y). Vậy cho nên ta có

p(d1,d2,d3,...,dm|β)=j=1mp(dj|β)=j=1m12πσ2exp{(yjβ0β1xj,1β2xj,2βnxj,k)22σ2}exp{j=1m(yjβ0β1xj,1β2xj,2βnxj,k)22σ2}

Và tất nhiên, bài toán chúng ta là Maximum Likelihood và hàm log là hàm đồng biến trên đoạn

(0,+) nên ta hoàn toàn có thể dùng Maximum Log Likehood và đưa bài toán về dạng tổng các Squared Error. Đây cũng chính là Mean Square Error. Nghiệm của bài toán tất nhiên là vẫn giữ nguyên:
β^=(XTX)1XTY
.

Ta chứng minh 2 ý sau đây:

  • E[β^]=β
  • V[β^]=σ2(XTX)1

Ý đầu tiên

E[β^]=E[(XTX)1XTY]=(XTX)1XTE[Y]=(XTX)1XTXE[β]=(XTX)1XTXβ=β

Ý thứ hai

V[β^]=V[(XTX)1XTY]=(XTX)1XTV[Y]((XTX)1XT)T=(XTX)1XTσ2((XTX)1XT)T=σ2(XTX)1XT((XTX)1XT)T=(XTX)1XT(X(X1)TX1)=σ2(XTX)1

Ta thừa nhận hai quan sát sau (1 cái chứng minh ròi, cái sau dùng nhiều kỹ thuật khá phức tạp nên chưa dám nhắc đến ở đây):

  • β^N(β,σ2(XTX)1)
  • Đặt
    S=||yxβ^||22
    thì
    Sσ2Xmk12

Vì quan sát đầu tiên, khi đặt

A=(XTX)1 thì
β^iN(βi,σ2Aii)
ta có:
βi^βiAii×Smk1Tmn1

Giờ ta sẽ thực hiện kiểm định giả thuyết thống kê cho từng

β^i với cặp giả thuyết sau:

  • Giả thuyết rỗng:
    H0:β^i=0
    . Điều này đồng nghĩa với thuộc tính
    i
    không liên quan đến
    y
  • Giả thuyết thay thế
    H1:β^i0
    . Điều này đồng nghĩa với thuộc tính
    i
    có liên quan đến
    y

Lúc này, với độ tin cậy là

1α thì nếu

  • |β^i|>tα/2,mn1Aii×Smn1
    . Lúc này ta bác bỏ giả thuyết rỗng tức là thuộc tính có liên quan đến nhãn
    y
  • |β^i|tα/2,mn1Aii×Smn1
    . Lúc này ta chấp nhận giả thuyết rỗng tức là thuộc tính không liên quan đến nhãn
    y
    . Và ta hoàn toàn có thể bỏ đi thuộc tính này vì thuộc tính này hoàn toàn có thể làm cho nhãn chúng ta bị nhiễu khi học bài toán Linear Regression.

5. Kết luận

Bài viết dùng những biến đổi đơn giản và những bổ đề mệnh đề lấy từ trong sách ra để đưa ra cho các bạn một góc nhìn khác về một thuật toán tưởng chừng quá quen thuộc. Khi nhìn bài toán dưới dạng thống kê, ta hoàn toàn có thể khai thác thêm nhiều khía cạnh của môn toán này trong ứng dụng thực tiễn. Trong khuôn khổ bài viết, mình cũng chưa thử bất kỳ thí nghiệm nào về việc chọn/bỏ các đặc trưng dựa trên kiểm định giả thuyết thống kê. Hãy thực hiện nó và cho mình biết kết quả nếu có thể nhé.

6. Lời nhắn

Mình đọc bài này cũng lâu rồi, trong blog nào đấy mình không nhớ, nay mình đọc lại mấy quyền sách Statiscal Learning thì thấy được họ có phân tích khá hay nên viết với chứng minh lại mấy công thức cho nó quen tay dần, tất nhiên sau tầm

1.5 năm không đụng gì tới toàn thì biến đổi của mình có thể bị lỗi và trình bày có thể sai nên mong được bỏ qua. Bài này kickstart lại cái quá trình học toán sắp tới của mình. Nếu được hy vọng có thể viết thêm vài bài về các thuật toán khác.