from sklearn.datasets import fetch_openml
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
boston = fetch_openml(name='boston', version=1, as_frame=True)
X = boston.data[['RM']]
y = boston.target.astype(float)
poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(X)
model = LinearRegression()
model.fit(X_poly, y)
print("Coefficients:", model.coef_)
print("Intercept:", model.intercept_)
from sklearn.datasets import fetch_openml
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
boston = fetch_openml(name='boston', version=1, as_frame=True)
X = boston.data[['RM']]
y = boston.target.astype(float)
poly = PolynomialFeatures(degree=3)
X_poly = poly.fit_transform(X)
model = LinearRegression()
model.fit(X_poly, y)
print("Coefficients:", model.coef_)
print("Intercept:", model.intercept_)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_openml
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures, StandardScaler
from sklearn.metrics import r2_score
boston = fetch_openml(name="boston", version=1, as_frame=True)
df = boston.frame
df["MEDV"] = df["MEDV"].astype(float)
X = df[["RM"]]
y = df["MEDV"]
X_plot = np.linspace(X.min(), X.max(), 200).reshape(-1, 1)
degree2_model = make_pipeline(
    PolynomialFeatures(degree=2, include_bias=False),
    StandardScaler(),
    LinearRegression()
    )
degree2_model.fit(X, y)
y_pred2 = degree2_model.predict(X)
curve2 = degree2_model.predict(X_plot)
degree3_model = make_pipeline(
    PolynomialFeatures(degree=3, include_bias=False),
    StandardScaler(),
    LinearRegression()
    )
degree3_model.fit(X, y)
y_pred3 = degree3_model.predict(X)
curve3 = degree3_model.predict(X_plot)
print("Degree 2 R² Score:", r2_score(y, y_pred2))
print("Degree 3 R² Score:", r2_score(y, y_pred3))
plt.figure(figsize=(8,5))
plt.scatter(X, y, color="blue", alpha=0.6, label="Data Points")
plt.plot(X_plot, curve2, color="red", linewidth=2, label="Degree 2 Curve")
plt.title("Polynomial Regression (Degree 2)")
plt.xlabel("Average Number of Rooms (RM)")
plt.ylabel("Median House Value (MEDV)")
plt.legend()
plt.grid(True)
plt.show()
plt.figure(figsize=(8,5))
plt.scatter(X, y, color="blue", alpha=0.6, label="Data Points")
plt.plot(X_plot, curve3, color="green", linewidth=2, label="Degree 3 Curve")
plt.title("Polynomial Regression (Degree 3)")
plt.xlabel("Average Number of Rooms (RM)")
plt.ylabel("Median House Value (MEDV)")
plt.legend()
plt.grid(True)
plt.show()
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_openml
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, mean_absolute_error
X, y = fetch_openml(name="boston", version=1, as_frame=True, return_X_y=True)
y = y.astype(float)
X = X[['LSTAT']]
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)
for degree in [6]:
    poly = PolynomialFeatures(degree=degree, include_bias=False)
    X_train_poly = poly.fit_transform(X_train)
    X_test_poly = poly.transform(X_test)
    model = LinearRegression()
    model.fit(X_train_poly, y_train)
    y_pred = model.predict(X_test_poly)
    ss_total = np.sum((y_test - np.mean(y_test))**2)
    ss_res = np.sum((y_test - y_pred)**2)
    r_square = 1 - (ss_res / ss_total)
    print("\nDegree:", degree)
    print("R Square:", r_square)
    print("MSE:", mean_squared_error(y_test, y_pred))
    print("MAE:", mean_absolute_error(y_test, y_pred))
    plt.scatter(X_test, y_test, label="Actual")
    x_line = np.linspace(
        X_test.min(),
        X_test.max(),
        100
    ).reshape(-1,1)
    plt.plot(
        x_line,
        model.predict(poly.transform(x_line)),
        color="red",
        label=f"Degree {degree}"
    )
    plt.xlabel("LSTAT")
    plt.ylabel("MEDV")
    plt.title(f"Polynomial Degree {degree}")
    plt.legend()
    plt.show()
