Keras: Modeling A X1 + B X2 + C = Y
Jump to navigation
Jump to search
Prompt chatgpt
buat source code python menggunakan keras untuk analisa data A*X1 + B*X2 + C = Y. Plot loss, plot grafik model vs X1, X2, Y
Source code:
Berikut adalah source code Python lengkap menggunakan Keras untuk menganalisis data berbentuk persamaan linier `Y = A*X1 + B*X2 + C`. Kode ini melibatkan:
- Pembuatan data sintetis.
- Pembuatan model Keras.
- Pelatihan model dan visualisasi loss.
- Plot hasil prediksi terhadap nilai sebenarnya.
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam
# 1. Generate synthetic data: Y = A*X1 + B*X2 + C
np.random.seed(0)
A, B, C = 3.5, -2.2, 7.0 # ground truth parameters
num_samples = 500
X1 = np.random.uniform(-10, 10, num_samples)
X2 = np.random.uniform(-10, 10, num_samples)
noise = np.random.normal(0, 2, num_samples) # add some noise
Y = A * X1 + B * X2 + C + noise
# Prepare input features and output
X = np.stack((X1, X2), axis=1)
# 2. Build a simple Keras model
model = Sequential()
model.add(Dense(1, input_dim=2)) # linear regression model
model.compile(optimizer=Adam(learning_rate=0.01), loss='mse')
# 3. Train the model
history = model.fit(X, Y, epochs=100, verbose=0)
# 4. Plot training loss
plt.figure()
plt.plot(history.history['loss'])
plt.title("Training Loss Over Epochs")
plt.xlabel("Epoch")
plt.ylabel("MSE Loss")
plt.grid(True)
plt.show()
# 5. Predict using the model
Y_pred = model.predict(X).flatten()
# 6. Plot predicted Y vs true Y
plt.figure()
plt.scatter(Y, Y_pred, alpha=0.5)
plt.xlabel("True Y")
plt.ylabel("Predicted Y")
plt.title("Model Prediction vs True Values")
plt.plot([Y.min(), Y.max()], [Y.min(), Y.max()], 'r--') # ideal line
plt.grid(True)
plt.show()
# 7. Plot 3D surface of predictions
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X1, X2, Y, label='True Y', alpha=0.4)
ax.scatter(X1, X2, Y_pred, label='Predicted Y', alpha=0.4)
ax.set_xlabel("X1")
ax.set_ylabel("X2")
ax.set_zlabel("Y / Y_pred")
plt.title("3D Plot: X1, X2 vs Y and Predicted Y")
plt.legend()
plt.show()
Penjelasan Singkat:
- **Model**: Ini adalah model regresi linier sederhana (`Dense(1)` tanpa aktivasi).
- **Data**: Dibuat menggunakan persamaan linear dengan sedikit noise untuk menyerupai data dunia nyata.
- **Visualisasi**:
- Plot **loss** untuk melihat konvergensi.
- Plot **prediksi vs nilai asli**.
- Plot **3D** untuk melihat bagaimana model mendekati permukaan sebenarnya.
Jika kamu ingin menguji apakah model mempelajari nilai A, B, dan C yang benar, kamu bisa melihat bobot model:
weights = model.get_weights()
print("Learned weights (A, B):", weights[0].flatten())
print("Learned bias (C):", weights[1])
Ingin saya ubah agar model ini bisa memprediksi dari file data CSV atau ingin visualisasi lain?