eaglelandsonce commited on
Commit
9f3e74e
1 Parent(s): bc94e08

Update pages/42_regression.py

Browse files
Files changed (1) hide show
  1. pages/42_regression.py +67 -77
pages/42_regression.py CHANGED
@@ -1,79 +1,69 @@
 
1
  import numpy as np
2
  import matplotlib.pyplot as plt
3
- import torch
4
- import torch.nn as nn
5
- import torch.optim as optim
6
- from sklearn.model_selection import train_test_split
7
-
8
- # Step 1: Create Synthetic Data
9
- np.random.seed(42)
10
- X = np.linspace(-10, 10, 1000)
11
- y = 2.5 * X + np.random.normal(0, 2, X.shape) # Linear relation with noise
12
-
13
- # Split into training and test sets
14
- X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
15
-
16
- # Convert to PyTorch tensors
17
- X_train = torch.tensor(X_train, dtype=torch.float32).view(-1, 1)
18
- y_train = torch.tensor(y_train, dtype=torch.float32).view(-1, 1)
19
- X_test = torch.tensor(X_test, dtype=torch.float32).view(-1, 1)
20
- y_test = torch.tensor(y_test, dtype=torch.float32).view(-1, 1)
21
-
22
- # Step 2: Define and Train a Neural Network Model
23
- class SimpleNN(nn.Module):
24
- def __init__(self):
25
- super(SimpleNN, self).__init__()
26
- self.fc1 = nn.Linear(1, 10)
27
- self.fc2 = nn.Linear(10, 1)
28
-
29
- def forward(self, x):
30
- x = torch.relu(self.fc1(x))
31
- x = self.fc2(x)
32
- return x
33
-
34
- # Initialize model, loss function, and optimizer
35
- model = SimpleNN()
36
- criterion = nn.MSELoss()
37
- optimizer = optim.Adam(model.parameters(), lr=0.01)
38
-
39
- # Training loop
40
- epochs = 500
41
- losses = []
42
-
43
- for epoch in range(epochs):
44
- model.train()
45
- optimizer.zero_grad()
46
- outputs = model(X_train)
47
- loss = criterion(outputs, y_train)
48
- loss.backward()
49
- optimizer.step()
50
- losses.append(loss.item())
51
- if (epoch + 1) % 50 == 0:
52
- print(f'Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}')
53
-
54
- # Step 3: Plot the Results
55
- # Plot the synthetic data and the model's predictions
56
- model.eval()
57
- with torch.no_grad():
58
- predicted = model(X_test).numpy()
59
-
60
- plt.figure(figsize=(12, 6))
61
-
62
- # Plot data and predictions
63
- plt.subplot(1, 2, 1)
64
- plt.scatter(X_test, y_test, label='Original data', alpha=0.5)
65
- plt.scatter(X_test, predicted, label='Fitted line', alpha=0.5)
66
- plt.title('Regression Results')
67
- plt.xlabel('X')
68
- plt.ylabel('y')
69
- plt.legend()
70
-
71
- # Plot training loss
72
- plt.subplot(1, 2, 2)
73
- plt.plot(losses)
74
- plt.title('Training Loss')
75
- plt.xlabel('Epoch')
76
- plt.ylabel('Loss')
77
-
78
- plt.tight_layout()
79
- plt.show()
 
1
+ import streamlit as st
2
  import numpy as np
3
  import matplotlib.pyplot as plt
4
+ import tensorflow as tf
5
+ from tensorflow.keras.models import Sequential
6
+ from tensorflow.keras.layers import Dense
7
+
8
+ # Title
9
+ st.title("Neural Network Line Fitting")
10
+
11
+ # Sidebar sliders for generating synthetic data
12
+ st.sidebar.header("Synthetic Data Controls")
13
+ true_w = st.sidebar.slider('True W (slope)', min_value=-10.0, max_value=10.0, value=2.0, step=0.1)
14
+ true_b = st.sidebar.slider('True B (intercept)', min_value=-10.0, max_value=10.0, value=1.0, step=0.1)
15
+ num_points = st.sidebar.slider('Number of data points', min_value=10, max_value=1000, value=100, step=10)
16
+
17
+ # Generate synthetic data
18
+ np.random.seed(0)
19
+ x_data = np.random.uniform(-100, 100, num_points)
20
+ noise = np.random.normal(0, 10, num_points)
21
+ y_data = true_w * x_data + true_b + noise
22
+
23
+ # Neural network model
24
+ model = Sequential([
25
+ Dense(1, input_dim=1)
26
+ ])
27
+
28
+ model.compile(optimizer='adam', loss='mean_squared_error')
29
+
30
+ # Train the model
31
+ model.fit(x_data, y_data, epochs=100, verbose=0)
32
+
33
+ # Get the trained parameters
34
+ trained_w = model.layers[0].get_weights()[0][0][0]
35
+ trained_b = model.layers[0].get_weights()[1][0]
36
+
37
+ # Make predictions
38
+ x_pred = np.linspace(-100, 100, 200)
39
+ y_pred = model.predict(x_pred)
40
+
41
+ # Plot the results
42
+ fig, ax = plt.subplots(figsize=(10, 5))
43
+
44
+ # Plot for the x-axis (bottom line)
45
+ ax.hlines(-1, -100, 100, color='blue', linestyle='--') # X-axis
46
+
47
+ # Plot for the y-axis (top line)
48
+ ax.hlines(1, -100, 100, color='blue', linestyle='--') # Y-axis
49
+
50
+ # Plot the synthetic data points
51
+ ax.scatter(x_data, y_data, color='gray', alpha=0.5, label='Data points')
52
+
53
+ # Plot the prediction line
54
+ ax.plot(x_pred, y_pred, color='red', label=f'Fitted line: y = {trained_w:.2f}x + {trained_b:.2f}')
55
+
56
+ # Update the layout
57
+ ax.set_xlim(-100, 100)
58
+ ax.set_ylim(-2, 2)
59
+ ax.set_xlabel('X-axis and Y-axis')
60
+ ax.set_yticks([]) # Hide y-axis ticks
61
+ ax.set_title('Neural Network Line Fitting')
62
+ ax.legend()
63
+ ax.grid(True)
64
+
65
+ # Display the plot in Streamlit
66
+ st.pyplot(fig)
67
+
68
+ # Display the trained parameters
69
+ st.write(f'Trained parameters: w = {trained_w:.2f}, b = {trained_b:.2f}')