Logistic Regression


ЁЯФ╖ рдкрд░рд┐рдЪрдп:

Logistic Regression рдПрдХ Supervised Learning Algorithm рд╣реИ рдЬреЛ Binary Classification рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред
рдпрд╣ Continuous Output (рдЬреИрд╕реЗ Linear Regression) рдирд╣реАрдВ рджреЗрддрд╛, рдмрд▓реНрдХрд┐ Probability (0 рд╕реЗ 1 рдХреЗ рдмреАрдЪ) рджреЗрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг:
рдИрдореЗрд▓ рд╕реНрдкреИрдо рд╣реИ рдпрд╛ рдирд╣реАрдВ? (Spam / Not Spam)
рдорд░реАрдЬ рдХреЛ рдмреАрдорд╛рд░реА рд╣реИ рдпрд╛ рдирд╣реАрдВ? (Yes / No)


ЁЯФ╢ рдХреНрдпреЛрдВ Logistic?

Linear Regression рдореЗрдВ output рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: тИТтИЮ рд╕реЗ +тИЮ
рд▓реЗрдХрд┐рди Classification рдореЗрдВ рд╣рдореЗрдВ output рдХреЛ Probability рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрддрд╛ рд╣реИ тАФ рдЗрд╕рд▓рд┐рдП рд╣рдо Sigmoid Function рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред


ЁЯФв рдлреЙрд░реНрдореВрд▓рд╛:

ЁЯОп Prediction Function:


ЁЯОп Decision Rule:

  • рдпрджрд┐ y^0.5 тЖТ Class 1
  • рдЕрдиреНрдпрдерд╛ тЖТ Class 0

ЁЯФз рдЙрдкрдпреЛрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░:

рдХреНрд╖реЗрддреНрд░рдЙрдкрдпреЛрдЧ
Email FilterSpam vs Not Spam
рд╣реЗрд▓реНрдердмреАрдорд╛рд░реА рд╣реИ рдпрд╛ рдирд╣реАрдВ
FinanceLoan Approve рдпрд╛ Reject

ЁЯФм Logistic Regression in PyTorch

import torch
import torch.nn as nn

# Dummy data for AND logic gate
X = torch.tensor([[0.,0.],[0.,1.],[1.,0.],[1.,1.]], dtype=torch.float32)
y = torch.tensor([[0.],[0.],[0.],[1.]], dtype=torch.float32)

# Logistic Regression Model
class LogisticRegression(nn.Module):
def __init__(self):
super().__init__()
self.linear = nn.Linear(2, 1)

def forward(self, x):
return torch.sigmoid(self.linear(x))

model = LogisticRegression()

# Loss and Optimizer
criterion = nn.BCELoss() # Binary Cross Entropy Loss
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)

# Training
for epoch in range(1000):
y_pred = model(X)
loss = criterion(y_pred, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()

if epoch % 100 == 0:
print(f"Epoch {epoch}, Loss: {loss.item():.4f}")

# Prediction
with torch.no_grad():
print("Prediction for [1, 1]:", model(torch.tensor([[1., 1.]])).item())

ЁЯУК Summary Table:

ElementDescription
TypeClassification
InputContinuous (Features)
OutputProbability (0 to 1)
ActivationSigmoid
Loss FunctionBinary Cross Entropy (BCELoss)
PyTorch Layernn.Linear() + torch.sigmoid()

Logistic Regression with Visualization (AND Gate)

import torch
import torch.nn as nn
import matplotlib.pyplot as plt
import numpy as np

# Dummy data (AND gate)
X = torch.tensor([[0.,0.],[0.,1.],[1.,0.],[1.,1.]], dtype=torch.float32)
y = torch.tensor([[0.],[0.],[0.],[1.]], dtype=torch.float32)

# Logistic Regression Model
class LogisticRegression(nn.Module):
def __init__(self):
super().__init__()
self.linear = nn.Linear(2, 1)

def forward(self, x):
return torch.sigmoid(self.linear(x))

model = LogisticRegression()
criterion = nn.BCELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)

# Training
for epoch in range(1000):
y_pred = model(X)
loss = criterion(y_pred, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()

if epoch % 100 == 0:
print(f"Epoch {epoch}, Loss: {loss.item():.4f}")

# Prediction test
with torch.no_grad():
test_input = torch.tensor([[1., 1.]])
pred = model(test_input)
print("Prediction for [1, 1]:", pred.item())

# тЬЕ Visualization Code Starts Here

# Convert to numpy for plotting
X_np = X.numpy()
y_np = y.numpy()

# Create a mesh grid
xx, yy = np.meshgrid(np.linspace(-0.2, 1.2, 100), np.linspace(-0.2, 1.2, 100))
grid = torch.tensor(np.c_[xx.ravel(), yy.ravel()], dtype=torch.float32)

with torch.no_grad():
probs = model(grid).reshape(xx.shape)

# Plot decision boundary
plt.figure(figsize=(6,5))
plt.contourf(xx, yy, probs, levels=[0, 0.5, 1], alpha=0.4, colors=['lightblue','lightgreen'])
plt.scatter(X_np[:,0], X_np[:,1], c=y_np[:,0], cmap='bwr', edgecolor='k', s=100)
plt.title("Logistic Regression - Decision Boundary (AND Gate)")
plt.xlabel("Input 1")
plt.ylabel("Input 2")
plt.colorbar(label='Predicted Probability')
plt.grid(True)
plt.show()

Output:

ЁЯУЭ Practice Questions:

  1. Logistic Regression рдХреЛ Classification рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ?
  2. Sigmoid Function рдХрд╛ role рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?
  3. Linear Regression рдФрд░ Logistic Regression рдореЗрдВ рдХреНрдпрд╛ рдореБрдЦреНрдп рдЕрдВрддрд░ рд╣реИ?
  4. Binary Cross Entropy Loss рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?
  5. PyTorch рдореЗрдВ model.parameters() рдХрд╛ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рд╣реИ?