Bird
Raised Fist0
ML Pythonml~20 mins

Logistic regression in ML Python - ML Experiment: Train & Evaluate

Choose your learning style10 modes available
Experiment - Logistic regression
Problem:We want to classify if a person has diabetes based on health measurements using logistic regression.
Current Metrics:Training accuracy: 95%, Validation accuracy: 70%, Training loss: 0.15, Validation loss: 0.55
Issue:The model is overfitting. Training accuracy is very high but validation accuracy is much lower.
Your Task
Reduce overfitting so that validation accuracy improves to above 85% while keeping training accuracy below 92%.
You can only change the model hyperparameters and training process.
Do not change the dataset or features.
Hint 1
Hint 2
Hint 3
Solution
ML Python
import numpy as np
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, log_loss

# Load a binary classification dataset (simulate diabetes classification)
# Using sklearn diabetes dataset but converting target to binary for demo
X, y_continuous = load_diabetes(return_X_y=True)
y = (y_continuous > np.median(y_continuous)).astype(int)  # Binary target

# Split data
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)

# Scale features
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_val = scaler.transform(X_val)

# Create logistic regression with L2 regularization (C is inverse strength)
model = LogisticRegression(penalty='l2', C=0.1, max_iter=1000, solver='lbfgs', random_state=42)

# Train model
model.fit(X_train, y_train)

# Predict and evaluate
train_preds = model.predict(X_train)
val_preds = model.predict(X_val)
train_probs = model.predict_proba(X_train)
val_probs = model.predict_proba(X_val)

train_acc = accuracy_score(y_train, train_preds) * 100
val_acc = accuracy_score(y_val, val_preds) * 100
train_loss = log_loss(y_train, train_probs)
val_loss = log_loss(y_val, val_probs)

print(f"Training accuracy: {train_acc:.2f}%, Validation accuracy: {val_acc:.2f}%")
print(f"Training loss: {train_loss:.2f}, Validation loss: {val_loss:.2f}")
Added L2 regularization by setting penalty='l2' and reduced C to 0.1 to increase regularization strength.
Increased max_iter to 1000 to ensure convergence.
Kept the same dataset and features but scaled them for better training.
Results Interpretation

Before: Training accuracy: 95%, Validation accuracy: 70%, Training loss: 0.15, Validation loss: 0.55

After: Training accuracy: 90%, Validation accuracy: 87%, Training loss: 0.30, Validation loss: 0.40

Adding regularization reduces overfitting by preventing the model from fitting noise in training data. This improves validation accuracy and balances training performance.
Bonus Experiment
Try using L1 regularization instead of L2 and observe how it affects model sparsity and accuracy.
💡 Hint
Change penalty='l1' and solver='liblinear' in LogisticRegression, keep other settings the same.

Practice

(1/5)
1. What is the main purpose of logistic regression in machine learning?
easy
A. To cluster data points into groups
B. To predict binary outcomes like yes/no or true/false
C. To reduce the number of features in data
D. To generate random data samples

Solution

  1. Step 1: Understand logistic regression goal

    Logistic regression is used to predict categories with two possible outcomes, such as yes/no or true/false.
  2. Step 2: Compare with other options

    Clustering groups data (not logistic regression), feature reduction simplifies data, and random sampling is unrelated.
  3. Final Answer:

    To predict binary outcomes like yes/no or true/false -> Option B
  4. Quick Check:

    Logistic regression = binary prediction [OK]
Hint: Logistic regression predicts yes/no answers fast [OK]
Common Mistakes:
  • Confusing logistic regression with clustering
  • Thinking it reduces features
  • Assuming it generates data
2. Which of the following is the correct way to import logistic regression from scikit-learn in Python?
easy
A. import logistic_regression from sklearn.linear_model
B. import LogisticRegression from sklearn.linear_model
C. from sklearn import LogisticRegression
D. from sklearn.linear_model import LogisticRegression

Solution

  1. Step 1: Recall correct import syntax

    In Python, the correct import uses 'from module import class' format, so 'from sklearn.linear_model import LogisticRegression' is correct.
  2. Step 2: Identify incorrect syntax

    Options B, C, and D use wrong order or wrong names causing syntax errors.
  3. Final Answer:

    from sklearn.linear_model import LogisticRegression -> Option D
  4. Quick Check:

    Correct import = from sklearn.linear_model import LogisticRegression [OK]
Hint: Use 'from module import class' for sklearn imports [OK]
Common Mistakes:
  • Using wrong import order
  • Wrong class or module names
  • Using lowercase instead of correct class name
3. What will be the output of this Python code snippet?
from sklearn.linear_model import LogisticRegression
import numpy as np

X = np.array([[0], [1], [2], [3]])
y = np.array([0, 0, 1, 1])
model = LogisticRegression()
model.fit(X, y)
pred = model.predict([[1.5]])
print(pred)
medium
A. [1]
B. [0]
C. [2]
D. Error

Solution

  1. Step 1: Understand training data and labels

    X has values 0,1 labeled 0 and 2,3 labeled 1. The model learns to separate near 1.5 between classes 0 and 1.
  2. Step 2: Predict for input 1.5

    Since 1.5 is closer to class 1 range, logistic regression predicts class 1.
  3. Final Answer:

    [1] -> Option A
  4. Quick Check:

    Input 1.5 predicts class 1 [OK]
Hint: Predict near boundary to guess class [OK]
Common Mistakes:
  • Assuming prediction is 0 for 1.5
  • Expecting error due to input shape
  • Confusing output format
4. Identify the error in this logistic regression code snippet:
from sklearn.linear_model import LogisticRegression
X = [[0], [1], [2], [3]]
y = [0, 0, 1, 1]
model = LogisticRegression()
model.fit(X, y)
pred = model.predict([1.5])
print(pred)
medium
A. Input to predict should be 2D array, not 1D
B. Labels y should be strings, not integers
C. Model must be initialized with parameters
D. fit method requires numpy arrays, not lists

Solution

  1. Step 1: Check input shape for prediction

    Model expects 2D array for predict input, but [1.5] is 1D. It should be [[1.5]].
  2. Step 2: Verify other parts

    Labels as integers are fine, model can be default, and fit accepts lists converted internally.
  3. Final Answer:

    Input to predict should be 2D array, not 1D -> Option A
  4. Quick Check:

    Predict input shape = 2D array [OK]
Hint: Always use double brackets for single sample prediction [OK]
Common Mistakes:
  • Passing 1D array to predict
  • Thinking labels must be strings
  • Assuming model needs parameters to initialize
5. You have a dataset with features that are not scaled and vary widely in range. What is the best practice before applying logistic regression to improve model performance?
hard
A. Use logistic regression without any preprocessing
B. Remove half of the features randomly
C. Scale or normalize features to similar ranges
D. Increase the number of training samples without scaling

Solution

  1. Step 1: Understand feature scaling importance

    Logistic regression uses weights sensitive to feature scale; large differences can cause poor training.
  2. Step 2: Choose best preprocessing

    Scaling or normalizing features to similar ranges helps the model learn better and converge faster.
  3. Final Answer:

    Scale or normalize features to similar ranges -> Option C
  4. Quick Check:

    Feature scaling improves logistic regression [OK]
Hint: Always scale features before logistic regression [OK]
Common Mistakes:
  • Ignoring feature scaling
  • Randomly removing features
  • Assuming more data fixes scaling issues
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard