Spaces:
Running
Running
| #LogisticRegression | |
| import streamlit as st | |
| import torch | |
| import torch.nn as nn | |
| import torch.optim as optim | |
| import numpy as np | |
| import matplotlib.pyplot as plt | |
| # Define the Logistic Regression Model | |
| class LogisticRegressionModel(nn.Module): | |
| def __init__(self): | |
| super(LogisticRegressionModel, self).__init__() | |
| self.linear = nn.Linear(1, 1) | |
| def forward(self, x): | |
| return torch.sigmoid(self.linear(x)) | |
| # Generate synthetic data | |
| np.random.seed(0) | |
| torch.manual_seed(0) | |
| n_samples = 100 | |
| X = np.random.rand(n_samples, 1) * 10 # Random hours between 0 and 10 | |
| y = (X > 5).astype(int).flatten() # Pass if study hours > 5, otherwise fail | |
| # Convert to torch tensors | |
| X_tensor = torch.tensor(X, dtype=torch.float32) | |
| y_tensor = torch.tensor(y, dtype=torch.float32) | |
| # Streamlit interface | |
| st.title('Logistic Regression with PyTorch') | |
| # User inputs | |
| num_epochs = st.number_input('Number of Epochs', min_value=100, max_value=5000, step=100, value=1000) | |
| learning_rate = st.number_input('Learning Rate', min_value=0.0001, max_value=0.1, step=0.0001, format="%.4f", value=0.01) | |
| test_hours = st.text_input('Test Study Hours (comma separated)', '4.0, 6.0, 9.0') | |
| # Initialize the model | |
| model = LogisticRegressionModel() | |
| # Binary Cross Entropy Loss | |
| criterion = nn.BCELoss() | |
| # Stochastic Gradient Descent Optimizer | |
| optimizer = optim.SGD(model.parameters(), lr=learning_rate) | |
| # Training the model | |
| loss_values = [] | |
| for epoch in range(num_epochs): | |
| outputs = model(X_tensor) | |
| loss = criterion(outputs, y_tensor.view(-1, 1)) | |
| optimizer.zero_grad() | |
| loss.backward() | |
| optimizer.step() | |
| loss_values.append(loss.item()) | |
| # Plot the loss curve | |
| fig, ax = plt.subplots() | |
| ax.plot(range(num_epochs), loss_values) | |
| ax.set_xlabel('Epoch') | |
| ax.set_ylabel('Loss') | |
| ax.set_title('Loss Curve') | |
| st.pyplot(fig) | |
| # Evaluation | |
| model.eval() | |
| test_hours = [float(hour.strip()) for hour in test_hours.split(',')] | |
| test_tensor = torch.tensor(test_hours, dtype=torch.float32).view(-1, 1) | |
| predictions = model(test_tensor).detach().numpy() | |
| # Display predictions | |
| st.write('## Predictions') | |
| for i, test_hour in enumerate(test_hours): | |
| st.write(f"Study hours: {test_hour}, Predicted pass probability: {predictions[i][0]:.4f}") | |