رگرسیون خطی با استفاده از PyTorch

بفرست برای دوستت
Telegram
WhatsApp
رگرسیون خطی با استفاده از PyTorch

فهرست مطالب

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

اولاً، شما باید PyTorch را در محیط پایتون خود نصب کنید. آسان‌ترین راه برای انجام این کار استفاده از ابزار pip یا conda است. به وب‌سایت pytorch.org مراجعه کنید و نسخه‌ای از Python interpreter و package manager که می‌خواهید استفاده کنید را نصب نمایید.

 

# We can run this Python code on a Jupyter notebook
# to automatically install the correct version of 
# PyTorch.

# http://pytorch.org / from os import path
from wheel.pep425tags import get_abbr_impl, get_impl_ver, get_abi_tag
platform = '{}{}-{}'.format(get_abbr_impl(), get_impl_ver(), get_abi_tag())

accelerator = 'cu80' if path.exists('/opt / bin / nvidia-smi') else 'cpu'

! pip install -q http://download.pytorch.org / whl/{accelerator}/torch-1.3.1.post4-{platform}-linux_x86_64.whl torchvision

 

با نصب PyTorch، حالا بیایید به کد نگاهی بیندازیم.

  رگرسیون لجستیک با استفاده از پایتون

دو خط زیر را بنویسید تا توابع و اشیاء ضروری کتابخانه را وارد کنید.

 

import torch
from torch.autograd import Variable

 

همچنین ما برخی داده‌ها را تعریف می‌کنیم و آنها را به متغیرهای x_data و y_data طبق کد زیر اختصاص می‌دهیم:

 

x_data = Variable(torch.Tensor([[1.0], [2.0], [3.0]]))
y_data = Variable(torch.Tensor([[2.0], [4.0], [6.0]]))

 

در اینجا، x_data متغیر مستقل ما و y_data متغیر وابسته ما است. اینها برای حال حاضر مجموعه داده‌های ما خواهند بود. بعد، ما باید مدل خود را تعریف کنیم. دو مرحله اصلی با تعریف مدل ما مرتبط هستند. آنها عبارتند از:

۱. مقداردهی اولیه مدل ما.

۲. اعلام مرحله رو به جلو (forward pass).

ما از کلاس زیر استفاده می‌کنیم:

 

class LinearRegressionModel(torch.nn.Module):

	def __init__(self):
		super(LinearRegressionModel, self).__init__()
		self.linear = torch.nn.Linear(1, 1) # One in and one out

	def forward(self, x):
		y_pred = self.linear(x)
		return y_pred

 

مطابق آنچه مشاهده می‌کنید، کلاس مدل ما زیرمجموعه‌ای از torch.nn.module است. چون در این مورد تنها یک ورودی و خروجی داریم، از مدل خطی با اندازه ورودی و خروجی ۱ استفاده می‌کنیم. بعد، یک نمونه از این مدل را ایجاد خواهیم کرد.

  استفاده از رگرسیون درخت تصمیم با استفاده از sklearn

 

# our model
our_model = LinearRegressionModel()

 

پس از این، ما به انتخاب بهینه‌ساز و معیار ضرر (loss) می‌پردازیم. در اینجا، ما از خطای مربع میانگین (MSE) به عنوان تابع ضرر خود و گرادیان کاهشی تصادفی (SGD) به عنوان بهینه‌سازمان استفاده می‌کنیم. همچنین، به صورت اختیاری نرخ یادگیری را ۰.۰۱ تنظیم می‌کنیم.

 

criterion = torch.nn.MSELoss(size_average = False)
optimizer = torch.optim.SGD(our_model.parameters(), lr = 0.01)

 

حالا به قسمت آموزش رسیده‌ایم. در این مرحله، این کارها را ۵۰۰ بار تکرار می‌کنیم:

۱. یک مرحله forward pass انجام می‌دهیم، داده‌ها را عبور می‌دهیم و مقدار پیش‌بینی شده برای y را می‌یابیم.

۲. ضرر را با استفاده از MSE محاسبه می‌کنیم.

۳. تمام گرادیان‌ها را به صفر ریست می‌کنیم، یک عقب‌گرد انجام می‌دهیم و بعد وزن‌ها را به‌روز می‌کنیم.

 

for epoch in range(500):

	# Forward pass: Compute predicted y by passing 
	# x to the model
	pred_y = our_model(x_data)

	# Compute and print loss
	loss = criterion(pred_y, y_data)

	# Zero gradients, perform a backward pass, 
	# and update the weights.
	optimizer.zero_grad()
	loss.backward()
	optimizer.step()
	print('epoch {}, loss {}'.format(epoch, loss.item()))

 

پس از اتمام دوره آموزش، مدل تعریف شده خود را با یک مقدار ناشناخته از x_data آزمایش می‌کنیم تا ببینیم نتایج درستی به دست می‌آید یا خیر. در این مورد، x_data را ۴.۰ در نظر می‌گیریم.

  رگرسیون خطی چندگانه در پایتون

 

new_var = Variable(torch.Tensor([[4.0]]))
pred_y = our_model(new_var)
print("predict (after training)", 4, our_model(new_var).item())

 

 اگر تمام مراحل را درست انجام داده باشید، خواهید دید که برای ورودی ۴.۰، یک مقدار نزدیک به ۸.۰ دریافت می‌کنید، مثل این:

پیش‌بینی (بعد از آموزش) ۴: ۷.۹۶۶۴۳۸۲۹۳۴۵۷۰۳۱

برای راهنمایی، کد کامل این مقاله را می‌توانید در پایین پیدا کنید:

 

import torch
from torch.autograd import Variable

x_data = Variable(torch.Tensor([[1.0], [2.0], [3.0]]))
y_data = Variable(torch.Tensor([[2.0], [4.0], [6.0]]))


class LinearRegressionModel(torch.nn.Module):

	def __init__(self):
		super(LinearRegressionModel, self).__init__()
		self.linear = torch.nn.Linear(1, 1) # One in and one out

	def forward(self, x):
		y_pred = self.linear(x)
		return y_pred

# our model
our_model = LinearRegressionModel()

criterion = torch.nn.MSELoss(size_average = False)
optimizer = torch.optim.SGD(our_model.parameters(), lr = 0.01)

for epoch in range(500):

	# Forward pass: Compute predicted y by passing 
	# x to the model
	pred_y = our_model(x_data)

	# Compute and print loss
	loss = criterion(pred_y, y_data)

	# Zero gradients, perform a backward pass, 
	# and update the weights.
	optimizer.zero_grad()
	loss.backward()
	optimizer.step()
	print('epoch {}, loss {}'.format(epoch, loss.item()))

new_var = Variable(torch.Tensor([[4.0]]))
pred_y = our_model(new_var)
print("predict (after training)", 4, our_model(new_var).item())

 

منابع

 

Rating 5.00 from 2 votes

لیست دروس دوره

آموزش پیشنهادی و مکمل

اگر سوالی در مورد این درس دارید، در کادر زیر بنویسید.

guest
0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
سبد خرید

دوره جامع متخصص علم داده و یادگیری ماشین

برای دیدن نوشته هایی که دنبال آن هستید تایپ کنید.
×