Machine Learning – 2.1 – Multiple Features

Tuần 2 trong course Machine Learning của giáo sư Andrew Ng trên Coursera. Trong phần này, bạn sẽ thấy linear regression được mở rộng thành multiple input features, và những best practices để thực hiện linear regression.

Xem các bài viết khác tại Machine Learning Course Structure

1. Mutiple Features

Linear Regression với multiple features còn được biết đến với cái tên multivariate linear regression.

1.1. Ký hiệu

  • x^{(i)}_j = giá trị của feature j trong training example thứ i.
  • x^{(i)} = input (feature) thứ i của training example.
  • m = số training example
  • n = số features

1.2. Hypothesis

Như vậy, hàm hypothesis của chúng ta được viết lại như sau:

h_0(x) = \theta_0x_0 + \theta_1x_1 + ... + \theta_nx_n

với x_0 = 1.

1.3. Trick

Áp dụng các kiến thức về phép nhân matrix đã học ở bài trước, ta có như sau

h_0(x) = \begin{bmatrix} \theta_0 & \theta_1 & ... & \theta_n \end{bmatrix} \begin{bmatrix} x_0 \\ x_1 \\ ... \\ x_n \end{bmatrix} = \theta^Tx

Trên đây là công thức của hàm hypothesis được rút gọn thành phép nhân matrix với vector.

2. Gradient Descent cho Multiple Variables

Công thức cho thuật toán Gradient Descent thì y hệt như cũ. Ta chỉ lặp lại nó cho n features mà thôi.

Lặp lại cho tới khi hội tụ:

\theta_0 := \theta_0 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_0^{(i)} \\ \theta_1 := \theta_1 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_1^{(i)} \\ \theta_2 := \theta_2 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_2^{(i)} \\ ...

hoặc diễn giải theo một cách khác:

\theta_j := \theta_j - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_j^{(i)}

với j:= 0...n

Đối với \theta_0, x^i_0 = 1

3. Gradient Descent in Practice

3.1. Feature Scaling và Mean Normalization

Khi các features có giá trị giao động trong các khoảng cách xa nhau, thì thuật toán Gradient Descent thường tốn nhiều thơi gian để tìm ra kết quả.

Ví dụ ta có 2 feature là diện tích nhàsố phòng ngủ:

200 < Diện tích nhà < 2000
1 < Số phòng ngủ < 5

Nếu vẽ đồ thị cho hàm hypothesis dự đoán giá nhà, bạn sẽ thấy nó là một dạng đồ thị hình cái tô với đáy rất nhọn, nhưng dẹp. Điều này làm cho mỗi step của gradient descent trải dài về bề ngang, nhưng không đi nhanh về điểm hội tụ, làm tổng thời gian chạy thuật toán gradient descent tăng lên.

plot
hình ảnh chỉ mang tính chất minh họa 😉

Ta có thể tăng tốc gradient descent bằng cách biến đổi các giá trị của feature cho nó nằm trong một khoảng gần giống nhau. Lý do là \theta sẽ di chuyển nhanh hơn trong vùng bé hơn và ngược lại, chậm hơn trong vùng lớn hơn.

Nhìn chung, ta sẽ biến đổi sao cho:

-1 \leq x_{(i)} \leq 1

hoặc

-0.5 \leq x_{(i)} \leq 0.5

Trên đây chỉ là ví dụ, mục tiêu là làm cho vùng giá trị của các feature càng gần nhau càng tốt.

2 kỹ thuật để làm chuyện này là Feature ScalingMean Normalization.

Feature Scaling là chia input với khoảng giá trị (max – min).

Mean Normalization là input – giá trị trung bình của input.

x_i := \frac{x_i - \mu_i}{\delta_i}

với:

  • \mu_i: trung bình của feature i
  • \delta_i: Max – min hoặc độ lệch chuẩn

Max – min sẽ cho ra kết quả rất khác với độ lệch chuẩn.

3.2. Learning Rate

Để xác định tham số \alpha, ta có thể áp dụng 1 số kỹ thuật:

  • Vẽ đồ thị với trục x = số bước lặp của gradient descent, trục y = giá trị của J(\theta). Nếu J(\theta) tăng, thì bạn phải giảm giá trị \alpha xuống và làm lại từ đầu.
  • Automatic convergence test: Xác định điểm hội tụ khi giá trị J(\theta) không vượt quá E trong một lần lặp, với E là một giá trị rất nhỏ nào đó. Tuy nhiên trong thực tế, thường rất khó xác định giá trị E này.

Người ta đã chứng minh được rằng, nếu learning rate \alpha đủ nhỏ, thì giá trị J(\theta) sẽ giảm sau mỗi lần lặp.

Túm lại:
* Nếu \alpha quá nhỏ: gradient descent chạy lâu.
* Nếu \alpha quá lớn: J(\theta) có thể sẽ không giảm sau mỗi lần lặp -> không hội tụ.

4. Features và Polynomial Regression

Ta có thể cải thiện features và dạng của hàm hypothesis bằng nhiều cách.

Một trong số những cách đó là kết hợp các feature lại với nhau. Ví dụ như khi ta có 2 feature là dàirộng, ta có thể kết hợp chúng thành diện tích = dài * rộng.

Ngoài ra, không phải lúc nào ta cũng có thể sử dụng được hàm hypothesis là một đường thẳng, nhất là khi nó không “vừa” với bộ data. Lúc này, có thể biến đổi nó một chút, hoặc bẻ cong nó bằng cách nâng lũy thừa, hoặc lấy căn của các features (hoặc bất cứ dạng nào khác đều được).

Ví dụ:

h_{\theta}(x) = \theta_0 + \theta_1x_1

Ta có thể thêm 1 feature mới bằng cách lũy thừa x lên:

h_{\theta}(x) = \theta_0 + \theta_1x_1 + \theta_2x_1^2

hoặc lấy căn của nó:

h_{\theta}(x) = \theta_0 + \theta_1x_1 + \theta_2\sqrt{x_1}

Một điều quan trọng là khi bạn biến đổi các feature như thế này, vùng giá trị của nó sẽ trở nên cách biệt so với feature gốc. Lúc này, bạn sẽ phải áp dụng những cách tối ưu như Feature ScalingMean Normalization đã nói ở trên để tối ưu thuật toán Gradient Descent.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.