#Linear Regression
-----------------------------------------
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
        
# Sample DataFrame
data = pd.read_csv('advertising.csv')
        
# Correlation Heatmap
plt.figure(figsize=(8,6))
sns.heatmap(data.corr(), annot=True, cmap="coolwarm", fmt=".2f")
plt.title("Feature Correlation Heatmap")
plt.show()
        
# Pairplot
sns.pairplot(data)
plt.show()
        
# Defining X and y
X = data[['TV', 'Radio', 'Newspaper']]
y = data['Sales']
        
# Splitting Data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
        
# Model Training
model = LinearRegression()
model.fit(X_train, y_train)
        
# Predictions
y_pred = model.predict(X_test)
        
# Regression Metrics
print(f"R² Score: {r2_score(y_test, y_pred):.4f}")
print(f"MAE: {mean_absolute_error(y_test, y_pred):.4f}")
print(f"RMSE: {np.sqrt(mean_squared_error(y_test, y_pred)):.4f}")
        
# Scatter Plot with Regression Line (for TV vs Sales)
plt.figure(figsize=(8,6))
plt.scatter(y_test, y_pred, color='blue', alpha=0.5, label='Predicted vs Actual')  
plt.plot([y.min(), y.max()], [y.min(), y.max()], color='red', linewidth=2, label='Perfect Prediction')  
plt.xlabel("Actual")
plt.ylabel("Predicted")
plt.title("with Regression Line")
plt.legend()
plt.show()
    