import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
# Create synthetic dataset
np.random.seed(0)
n_samples = 100
X = np.random.rand(n_samples, 3) # 3 features
y = 3 * X[:, 0] + 2 * X[:, 1] + 5 * X[:, 2] + np.random.randn(n_samples) # Linear equation with noise
data = pd.DataFrame({'Feature1': X[:, 0], 'Feature2': X[:, 1], 'Feature3': X[:, 2], 'Price': y})
# Split data into features (X) and target variable (y)
X = data[['Feature1', 'Feature2', 'Feature3']]
y = data['Price']
# Split data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Create and train the multi-linear regression model
model = LinearRegression()
model.fit(X_train, y_train)
# Make predictions
y_pred = model.predict(X_test)
# Calculate Mean Squared Error (MSE)
mse = mean_squared_error(y_test, y_pred)
# Calculate R-squared (R2) score
r2 = r2_score(y_test, y_pred)
print(f"Mean Squared Error (MSE): {mse}")
print(f"R-squared (R2) Score: {r2}")
# Scatter plot of actual vs. predicted prices
plt.scatter(y_test, y_pred)
plt.xlabel("Actual Prices")
plt.ylabel("Predicted Prices")
plt.title("Actual Prices vs. Predicted Prices")
plt.show()
# Display model coefficients (feature importance)
coefficients = pd.DataFrame({'Feature': X.columns, 'Coefficient': model.coef_})
print(coefficients)
aW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBwYW5kYXMgYXMgcGQKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdApmcm9tIHNrbGVhcm4ubW9kZWxfc2VsZWN0aW9uIGltcG9ydCB0cmFpbl90ZXN0X3NwbGl0CmZyb20gc2tsZWFybi5saW5lYXJfbW9kZWwgaW1wb3J0IExpbmVhclJlZ3Jlc3Npb24KZnJvbSBza2xlYXJuLm1ldHJpY3MgaW1wb3J0IG1lYW5fc3F1YXJlZF9lcnJvciwgcjJfc2NvcmUKCiMgQ3JlYXRlIHN5bnRoZXRpYyBkYXRhc2V0Cm5wLnJhbmRvbS5zZWVkKDApCm5fc2FtcGxlcyA9IDEwMApYID0gbnAucmFuZG9tLnJhbmQobl9zYW1wbGVzLCAzKSAgIyAzIGZlYXR1cmVzCnkgPSAzICogWFs6LCAwXSArIDIgKiBYWzosIDFdICsgNSAqIFhbOiwgMl0gKyBucC5yYW5kb20ucmFuZG4obl9zYW1wbGVzKSAgIyBMaW5lYXIgZXF1YXRpb24gd2l0aCBub2lzZQpkYXRhID0gcGQuRGF0YUZyYW1lKHsnRmVhdHVyZTEnOiBYWzosIDBdLCAnRmVhdHVyZTInOiBYWzosIDFdLCAnRmVhdHVyZTMnOiBYWzosIDJdLCAnUHJpY2UnOiB5fSkKCiMgU3BsaXQgZGF0YSBpbnRvIGZlYXR1cmVzIChYKSBhbmQgdGFyZ2V0IHZhcmlhYmxlICh5KQpYID0gZGF0YVtbJ0ZlYXR1cmUxJywgJ0ZlYXR1cmUyJywgJ0ZlYXR1cmUzJ11dCnkgPSBkYXRhWydQcmljZSddCgojIFNwbGl0IGRhdGEgaW50byB0cmFpbmluZyBhbmQgdGVzdGluZyBzZXRzClhfdHJhaW4sIFhfdGVzdCwgeV90cmFpbiwgeV90ZXN0ID0gdHJhaW5fdGVzdF9zcGxpdChYLCB5LCB0ZXN0X3NpemU9MC4yLCByYW5kb21fc3RhdGU9NDIpCgojIENyZWF0ZSBhbmQgdHJhaW4gdGhlIG11bHRpLWxpbmVhciByZWdyZXNzaW9uIG1vZGVsCm1vZGVsID0gTGluZWFyUmVncmVzc2lvbigpCm1vZGVsLmZpdChYX3RyYWluLCB5X3RyYWluKQoKIyBNYWtlIHByZWRpY3Rpb25zCnlfcHJlZCA9IG1vZGVsLnByZWRpY3QoWF90ZXN0KQoKIyBDYWxjdWxhdGUgTWVhbiBTcXVhcmVkIEVycm9yIChNU0UpCm1zZSA9IG1lYW5fc3F1YXJlZF9lcnJvcih5X3Rlc3QsIHlfcHJlZCkKCiMgQ2FsY3VsYXRlIFItc3F1YXJlZCAoUjIpIHNjb3JlCnIyID0gcjJfc2NvcmUoeV90ZXN0LCB5X3ByZWQpCgpwcmludChmIk1lYW4gU3F1YXJlZCBFcnJvciAoTVNFKToge21zZX0iKQpwcmludChmIlItc3F1YXJlZCAoUjIpIFNjb3JlOiB7cjJ9IikKCiMgU2NhdHRlciBwbG90IG9mIGFjdHVhbCB2cy4gcHJlZGljdGVkIHByaWNlcwpwbHQuc2NhdHRlcih5X3Rlc3QsIHlfcHJlZCkKcGx0LnhsYWJlbCgiQWN0dWFsIFByaWNlcyIpCnBsdC55bGFiZWwoIlByZWRpY3RlZCBQcmljZXMiKQpwbHQudGl0bGUoIkFjdHVhbCBQcmljZXMgdnMuIFByZWRpY3RlZCBQcmljZXMiKQpwbHQuc2hvdygpCgojIERpc3BsYXkgbW9kZWwgY29lZmZpY2llbnRzIChmZWF0dXJlIGltcG9ydGFuY2UpCmNvZWZmaWNpZW50cyA9IHBkLkRhdGFGcmFtZSh7J0ZlYXR1cmUnOiBYLmNvbHVtbnMsICdDb2VmZmljaWVudCc6IG1vZGVsLmNvZWZffSkKcHJpbnQoY29lZmZpY2llbnRzKQo=