Naam me 'regression' hai, par Logistic Regression ek classification model hai. Ye Yes/No wale sawaalon ke liye hai: email spam hai ya nahi? customer churn karega ya nahi? tumor malignant hai ya benign?
Sigmoid function
Linear Regression koi bhi number de sakta hai (−∞ se +∞). Par probability 0 aur 1 ke beech honi chahiye. Sigmoid function kisi bhi number ko 0-1 ke beech daba deta hai:
Example
import numpy as np
def sigmoid(z):
return 1 / (1 + np.exp(-z))
z = np.array([-5, -2, 0, 2, 5])
print(sigmoid(z).round(3))
Output
[0.007 0.119 0.5 0.881 0.993]
Model pehle features ka weighted sum nikaalta hai, phir sigmoid se probability banata hai. Default rule: probability ≥ 0.5 to class 1, warna class 0.
Breast cancer dataset
scikit-learn ka breast cancer dataset — 569 tumors, 30 measurements. Target: 0 = malignant (cancer), 1 = benign (cancer nahi).
Example
import numpy as np
import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
cancer = load_breast_cancer(as_frame=True)
X, y = cancer.data, cancer.target # 0 = malignant, 1 = benign
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
print(X.shape)
print(y.value_counts())
print("Classes:", cancer.target_names.tolist())
Output
(569, 30)
target
1 357
0 212
Name: count, dtype: int64
Classes: ['malignant', 'benign']
Pipeline: scaling + model ek saath
Pipeline preprocessing aur model ko ek object me jod deta hai. Isse data leakage ka khatra khatam ho jaata hai aur code saaf rehta hai:
Example
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
clf = make_pipeline(StandardScaler(), LogisticRegression(max_iter=1000))
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print("Accuracy:", round(accuracy_score(y_test, y_pred), 4))
Output
Accuracy: 0.9825
Probabilities dekhna: predict_proba
Sirf class nahi, model ye bhi batata hai ki use kitna bharosa hai:
Example
proba = clf.predict_proba(X_test)[:5]
print(pd.DataFrame(proba, columns=["P(malignant)", "P(benign)"]).round(3))
print("Predictions:", y_pred[:5])
Output
P(malignant) P(benign)
0 1.000 0.000
1 0.000 1.000
2 0.994 0.006
3 0.466 0.534
4 1.000 0.000
Predictions: [0 1 0 1 0]
Threshold badalna
Medical case me cancer miss karna (malignant ko benign bolna) bahut khatarnak hai. To hum tabhi 'benign' bolenge jab model ko kaafi bharosa ho — threshold 0.5 se badha ke dekhte hain:
Example
p_benign = clf.predict_proba(X_test)[:, 1]
is_malignant = y_test.values == 0
results = {}
for threshold in [0.5, 0.9, 0.99]:
pred = (p_benign >= threshold).astype(int)
missed = int(((pred == 1) & is_malignant).sum()) # cancer ko benign bola
false_alarms = int(((pred == 0) & ~is_malignant).sum()) # benign ko cancer bola
results[threshold] = (missed, false_alarms)
print(f"Threshold {threshold}: accuracy={accuracy_score(y_test, pred):.3f}, "
f"cancer miss={missed}, false alarms={false_alarms}")
Output
Threshold 0.5: accuracy=0.982, cancer miss=1, false alarms=1
Threshold 0.9: accuracy=0.895, cancer miss=1, false alarms=11
Threshold 0.99: accuracy=0.737, cancer miss=0, false alarms=30
Threshold 0.5 pe 1 cancer miss hua aur 1 false alarm aaya; 0.99 pe 0 miss aur 30 false alarms. Ye hi trade-off hai: threshold badhane se misses kabhi badhte nahi (sirf ghat-te ya same rehte hain), par false alarms badhte hain — yaani zyada healthy logon ko aage ki jaanch ke liye bhejna padega. Medical case me ye mehenga zaroor hai, par cancer miss karne se kahin behtar. Iske metrics (precision, recall) hum model evaluation wale lesson me detail me dekhenge.
Coefficients ka matlab
Example
model = clf.named_steps["logisticregression"]
coefs = pd.Series(model.coef_[0], index=X.columns).sort_values()
print("Malignant ki taraf sabse zyada dhakelne wale features:")
print(coefs.head(3).round(2))
Output
Malignant ki taraf sabse zyada dhakelne wale features:
worst texture -1.26
radius error -1.08
worst concave points -0.95
dtype: float64
Negative coefficient ka matlab — ye feature badhe to benign (class 1) ki probability ghat-ti hai, yaani malignant ki badhti hai.
Logistic Regression kab use karein?
- Binary classification (2 classes) — multiclass bhi support karta hai
- Jab samajhna ho ki kaunsa feature result ko kis taraf dhakelta hai
- Ek fast, strong baseline model ke taur pe — complex model se pehle hamesha ise try kariye
Aur detail me: Logistic Regression — The Superhero of Classification.