Polynomial regression helps us find curved lines that fit data better than straight lines. It models relationships that are not just straight but can bend.
Polynomial regression in ML Python
from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression from sklearn.pipeline import make_pipeline degree = 2 model = make_pipeline(PolynomialFeatures(degree), LinearRegression()) model.fit(X_train, y_train) predictions = model.predict(X_test)
degree controls how curved the model is. Degree 1 means a straight line, degree 2 means a curve like a U or hill.
Using make_pipeline helps combine polynomial feature creation and linear regression in one step.
model = make_pipeline(PolynomialFeatures(2), LinearRegression())model = make_pipeline(PolynomialFeatures(3), LinearRegression())model.fit(X_train, y_train) predictions = model.predict(X_test)
This example fits a polynomial regression model to data that follows y = x². It trains on the first 7 points and tests on the last 3. It prints predictions and how well the model fits.
import numpy as np from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression from sklearn.pipeline import make_pipeline from sklearn.metrics import mean_squared_error, r2_score # Sample data: X is input, y is output with a curve X = np.array([[1], [2], [3], [4], [5], [6], [7], [8], [9], [10]]) y = np.array([1, 4, 9, 16, 25, 36, 49, 64, 81, 100]) # y = x^2 # Split data into training and testing X_train, X_test = X[:7], X[7:] y_train, y_test = y[:7], y[7:] # Create polynomial regression model with degree 2 model = make_pipeline(PolynomialFeatures(2), LinearRegression()) # Train the model model.fit(X_train, y_train) # Predict on test data predictions = model.predict(X_test) # Calculate metrics mse = mean_squared_error(y_test, predictions) r2 = r2_score(y_test, predictions) # Print results print("Predictions:", predictions) print(f"Mean Squared Error: {mse:.2f}") print(f"R2 Score: {r2:.2f}")
Choosing a very high degree can cause the model to fit noise, not just the pattern. This is called overfitting.
Polynomial regression is still a linear model but on transformed features (powers of inputs).
Always check model performance on test data to avoid overfitting.
Polynomial regression fits curved lines to data by adding powers of input features.
It is useful when data shows non-linear patterns like curves or hills.
Use PolynomialFeatures with LinearRegression to create the model easily.
Practice
Solution
Step 1: Understand the goal of polynomial regression
Polynomial regression extends linear regression by adding powers of input features to capture curves in data.Step 2: Compare options with this goal
Only To model non-linear relationships by adding powers of input features describes modeling non-linear relationships by adding powers of features, which matches polynomial regression.Final Answer:
To model non-linear relationships by adding powers of input features -> Option DQuick Check:
Polynomial regression = model curves [OK]
- Confusing polynomial regression with classification
- Thinking it reduces features instead of expanding them
- Mixing it up with clustering methods
Solution
Step 1: Check import and class usage
PolynomialFeatures is in sklearn.preprocessing, so import must be from there.Step 2: Verify method calls and degree
Degree=3 is correct. fit_transform(X) creates polynomial features properly. from sklearn.preprocessing import PolynomialFeatures poly = PolynomialFeatures(degree=3) X_poly = poly.fit_transform(X) matches all these.Final Answer:
from sklearn.preprocessing import PolynomialFeatures poly = PolynomialFeatures(degree=3) X_poly = poly.fit_transform(X) -> Option BQuick Check:
Correct import + degree + fit_transform = A [OK]
- Importing PolynomialFeatures from wrong module
- Using transform without fit first
- Setting wrong degree value
X_poly if X has shape (5, 1) and degree=2?
from sklearn.preprocessing import PolynomialFeatures poly = PolynomialFeatures(degree=2) X_poly = poly.fit_transform(X)
Solution
Step 1: Understand PolynomialFeatures output shape
For degree=2 and one feature, output includes [1, x, x^2], so 3 features total.Step 2: Calculate shape based on input rows and new features
Input has 5 rows, so output shape is (5, 3).Final Answer:
(5, 3) -> Option CQuick Check:
Degree 2 with 1 feature = 3 columns [OK]
- Forgetting the bias (constant 1) column
- Assuming output shape equals input shape
- Confusing degree with number of features
from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression poly = PolynomialFeatures(degree=2) X_poly = poly.transform(X) model = LinearRegression() model.fit(X_poly, y)
Solution
Step 1: Check usage of PolynomialFeatures methods
PolynomialFeatures must be fitted before transform; fit_transform fits and transforms in one step.Step 2: Identify the error in code
Code calls poly.transform(X) without fitting first, causing error. Correct is poly.fit_transform(X).Final Answer:
Using transform before fitting PolynomialFeatures -> Option AQuick Check:
fit_transform needed before transform [OK]
- Calling transform without fit first
- Thinking LinearRegression can't handle polynomial features
- Ignoring method order in preprocessing
Solution
Step 1: Understand the problem of low training but high test error
This indicates overfitting: model fits training data too closely but fails to generalize.Step 2: Choose a solution to reduce overfitting
Reducing polynomial degree simplifies the model, helping it generalize better on new data.Final Answer:
Reduce the polynomial degree to avoid overfitting -> Option AQuick Check:
Overfitting? Lower degree polynomial [OK]
- Increasing degree worsens overfitting
- Removing polynomial features loses curve fit
- Adding higher degree features increases complexity
Ready to prove it?
Pass the test and this pattern moves unknown
