Rate this post

Linear Regression là một cách để tìm mối quan hệ tuyến tính giữa biến phụ thuộc và biến độc lập bằng cách giảm thiểu khoảng cách.

Linear Regression là một phương pháp học máy có giám sát. Cách tiếp cận này được sử dụng để phân loại theo thứ tự của danh mục rời rạc. Trong phần này, chúng ta sẽ hiểu cách xây dựng một mô hình mà qua đó người dùng có thể dự đoán mối quan hệ giữa biến phụ thuộc và biến độc lập.

Định nghĩa và Ứng dụng của Linear Regression

Linear Regression, hay Hồi quy tuyến tính, là một trong những kỹ thuật thống kê cơ bản và phổ biến nhất trong lĩnh vực học máy. Nó là một phương pháp để mô hình hóa mối quan hệ tuyến tính giữa một biến phụ thuộc (dependent variable) và một hoặc nhiều biến độc lập (independent variables). Mục tiêu của Linear Regression là tìm ra đường thẳng (trong trường hợp một biến độc lập) hoặc mặt phẳng (trong trường hợp nhiều biến độc lập) sao cho tổng bình phương khoảng cách từ các điểm dữ liệu đến đường thẳng/mặt phẳng này là nhỏ nhất.

Ứng dụng của Linear Regression rất đa dạng và phong phú. Nó được sử dụng rộng rãi trong các lĩnh vực như kinh tế học để dự đoán GDP, thống kê y tế để ước lượng tác động của các điều kiện sức khỏe, trong tài chính để giá cổ phiếu, và nhiều ngành công nghiệp khác.

Nói một cách dễ hiểu, chúng ta có thể nói mối quan hệ giữa cả biến, tức là độc lập hoặc phụ thuộc, được gọi là tuyến tính. Giả sử Y là biến phụ thuộc và X là biến độc lập thì mối quan hệ Linear Regression của hai biến này là

Y = AX + b

  • A là hệ số góc.
  • b là giao điểm y.

Trạng thái ban đầu

Trạng thái cuối cùng

Có ba khái niệm cơ bản cần thiết để hiểu để tạo hoặc học mô hình tuyến tính cơ bản.

Giới thiệu về PyTorch và Lý do Chọn PyTorch để Xây Dựng Mô Hình Linear Regression

PyTorch là một thư viện máy học phổ biến, được phát triển bởi Facebook’s AI Research lab (FAIR). Nó nổi bật với khả năng cung cấp một API trực quan, cho phép các nhà phát triển và nhà nghiên cứu xây dựng các mô hình học máy một cách nhanh chóng và hiệu quả. PyTorch hỗ trợ tính toán tensor mạnh mẽ và tích hợp chặt chẽ với hệ thống tính toán đồ thị, điều này làm cho việc thực hiện các thuật toán học sâu trở nên thuận tiện hơn.

Lựa chọn PyTorch để xây dựng mô hình Linear Regression mang lại một số lợi ích đáng kể. Đầu tiên, PyTorch cung cấp một cách tiếp cận đơn giản nhưng mạnh mẽ để xây dựng và huấn luyện mô hình, giúp tiết kiệm thời gian và công sức. Thứ hai, nó hỗ trợ tính năng tự động tính đạo hàm (automatic differentiation) qua mô-đun autograd, làm cho việc tính toán gradient trở nên dễ dàng, đặc biệt quan trọng trong quá trình tối ưu hóa mô hình. Cuối cùng, cộng đồng sử dụng PyTorch rất lớn và đa dạng, từ đó cung cấp nguồn tài nguyên học tập và hỗ trợ tốt cho người mới bắt đầu.

Trong phần tiếp theo của bài viết, chúng ta sẽ đi sâu vào cách Linear Regression hoạt động và làm thế nào để triển khai nó một cách hiệu quả bằng PyTorch.

Model class

Việc viết mã mọi thứ và viết tất cả các chức năng khi được yêu cầu là rất điển hình và đó không phải là động cơ của chúng tôi.

Viết thư viện tối ưu hóa dạng số luôn tốt hơn là viết tất cả mã và hàm, nhưng giá trị kinh doanh cũng có thể tăng lên nếu chúng ta xây dựng nó trên đầu các thư viện viết sẵn để hoàn thành công việc. Với mục đích này, chúng tôi sử dụng việc triển khai gói nn của PyTorch. Đối với điều này, trước tiên chúng ta phải tạo một lớp duy nhất.

Sử dụng lớp tuyến tính

Mỗi mô-đun tuyến tính tính toán đầu ra từ đầu vào, và đối với trọng lượng và độ lệch, nó giữ Tensor bên trong của nó.

Có một số mô-đun tiêu chuẩn khác. Chúng tôi sẽ sử dụng định dạng lớp mô hình, có hai phương thức chính, như sau:

  • Init: Được sử dụng để xác định một mô-đun tuyến tính.
  • Forward: Với sự trợ giúp của phương pháp chuyển tiếp, các dự đoán được thực hiện trên cơ sở đó chúng tôi sẽ đào tạo mô hình Linear Regression của mình

Optimizer

Trình tối ưu hóa là một trong những khái niệm quan trọng trong PyTorch. Nó được sử dụng để tối ưu hóa trọng lượng của chúng tôi để đưa mô hình của chúng tôi vào tập dữ liệu. Có một số thuật toán tối ưu hóa như giảm độ dốc và lan truyền ngược giúp tối ưu hóa giá trị trọng lượng của chúng tôi và phù hợp nhất với mô hình của chúng tôi.

Các thuật toán tối ưu hóa khác nhau được thực hiện bởi gói torch.optim. Để sử dụng torch.optim, bạn phải xây dựng một đối tượng tối ưu hóa sẽ cập nhật tham số dựa trên gradient máy tính và sẽ giữ trạng thái hiện tại. Đối tượng được tạo như sau:

Optimizer=optim.SGD(model.parameters(), lr=0.01, momentum=0.9)  
Optimizer=optim.Adam([var1, var2], lr=0.0001))  

Phương thức step () được thực hiện bởi tất cả trình tối ưu hóa, phương thức này cập nhật các tham số. Có hai cách để sử dụng nó

1) Optimizer.step ()

Đây là phương pháp rất đơn giản và được hỗ trợ bởi nhiều trình tối ưu hóa. Sau khi tính toán độ dốc bằng phương thức back (), chúng ta có thể gọi hàm Optimizer.step ().

Ví dụ:

for input, target in dataset:  
    optimizer.zero_grad()  
    output=model(input)  
    loss=loss_fn(output, target)  
    loss.backward()       
    optimizer.step()  

2) Optimizer.step (đóng)

Có một số thuật toán tối ưu hóa như LBFGS và Conjugate Gradient cần đánh giá lại hàm nhiều lần, vì vậy chúng tôi phải chuyển nó trong một lần đóng để cho phép chúng tính toán lại mô hình của bạn.

Ví dụ:

for input, target in dataset:  
def closure():  
    optimizer.zero_grad()  
    output = model(input)  
    loss = loss_fn(output, target)  
    loss.backward()  
    return loss  
    optimizer.step(closure)  

Criterion

Tiêu chí là hàm tổn thất của chúng tôi, được sử dụng để tìm tổn thất. Chức năng này được sử dụng từ mô-đun nn torch.

Ví dụ:

criterion = torch.nn.MSELoss(size_average = False)   

Các chức năng và đối tượng được yêu cầu

  1. mport torch
  2. From torch.autagrad import Variable

Và chúng ta cần xác định một số dữ liệu và gán chúng cho các biến theo cách sau

xdata=Variable(torch.Tensor([[1.0],[2.0],[3.0]]))  
ydata=Variable(torch.Tensor([[2.0],[4.0],[6.0]]))  

Sau đây là đoạn mã cung cấp cho chúng tôi dự đoán để đào tạo một mô hình hồi quy hoàn chỉnh. Nó chỉ để hiểu cách chúng tôi triển khai mã và chức năng nào chúng tôi đã sử dụng để đào tạo một mô hình hồi quy.

import torch   
from torch.autograd import Variable   
xdata = Variable(torch.Tensor([[1.0], [2.0], [3.0]]))  
ydata = Variable(torch.Tensor([[2.0], [4.0], [6.0]]))   
class LRM(torch.nn.Module):  
    def __init__(self):   
        super(LRM, self).__init__()    
        self.linear = torch.nn.Linear(1, 1)  
    def forward(self, x):   
        ypred = self.linear(x)    
        return ypred    
ourmodel = LRM()  
criterion = torch.nn.MSELoss(size_average = False)   
optimizer = torch.optim.SGD(ourmodel.parameters(), lr = 0.01)   
for epoch in range(500):   
    predy = our_model(xdata)   
    loss = criterion(predy, ydata)    
    optimizer.zero_grad()   
    loss.backward()       
    optimizer.step()   
    print('epoch {}, loss {}'.format(epoch, loss.item()))  
newvar = Variable(torch.Tensor([[4.0]]))  
predy = ourmodel(newvar)  
print("predict (after training)", 4, our_model(newvar).data[0][0])  

Đầu ra:

Có những khái niệm sau được sử dụng để đào tạo một mô hình hồi quy hoàn chỉnh

  • Đưa ra dự đoán
  • Lớp tuyến tính
  • Mô-đun tùy chỉnh
  • Tạo tập dữ liệu
  • Thiếu chức năng
  • Xuống dốc
  • Có nghĩa là lỗi bình phương
  • Tập huấn

Tất cả những điểm trên đây là điều cần thiết để hiểu cách đào tạo một mô hình hồi quy.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now