Online AI & Machine Learning Model Trainer
Initializing AI Environment... (this may take a moment)
Select a Dataset
Select a Model
Ready to Train
Click the button below to train the selected model on the chosen dataset.
Train a model to see the results here.
Performance Metrics
Result Visualization
Generating PDF...
This model has no parameters to configure.
'; return; } Object.keys(params).forEach(paramKey => { const param = params[paramKey]; const div = document.createElement('div'); div.innerHTML = ` `; hyperparametersDiv.appendChild(div); }); } function log(message) { trainingLog.textContent += `> ${message}\n`; trainingLog.scrollTop = trainingLog.scrollHeight; } // --- TRAINING LOGIC (PYTHON IN JS) --- async function handleTrain() { if (!pyodide) { alert("AI Environment is not ready. Please wait."); return; } trainingLog.textContent = ''; trainingLog.classList.remove('hidden'); log('Starting training process...'); const dataset = datasetSelect.value; const modelKey = modelSelect.value; const hyperparams = {}; const paramsConfig = models[datasets[dataset].type][modelKey].params; Object.keys(paramsConfig).forEach(key => { hyperparams[key] = parseFloat(document.getElementById(`param-${key}`).value); }); pyodide.globals.set('dataset_name', dataset); pyodide.globals.set('model_key', modelKey); pyodide.globals.set('hyperparams_js', pyodide.toPy(hyperparams)); try { const pythonCode = ` import numpy as np from sklearn.model_selection import train_test_split from sklearn.datasets import load_iris, load_diabetes from sklearn.neighbors import KNeighborsClassifier from sklearn.svm import SVC from sklearn.linear_model import LinearRegression, Ridge from sklearn.metrics import accuracy_score, mean_squared_error import json # Get variables from JS dataset_name = dataset_name model_key = model_key hyperparams = hyperparams_js.to_dict() # Load data if dataset_name == 'iris': data = load_iris() X, y = data.data, data.target problem_type = 'classification' elif dataset_name == 'diabetes': data = load_diabetes() X, y = data.data, data.target problem_type = 'regression' # Split data X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # Instantiate model if problem_type == 'classification': if model_key == 'knn': model = KNeighborsClassifier(n_neighbors=int(hyperparams.get('n_neighbors', 5))) elif model_key == 'svc': model = SVC(C=hyperparams.get('C', 1.0)) else: # regression if model_key == 'linear': model = LinearRegression() elif model_key == 'ridge': model = Ridge(alpha=hyperparams.get('alpha', 1.0)) # Train model model.fit(X_train, y_train) # Make predictions y_pred = model.predict(X_test) # Evaluate if problem_type == 'classification': metric_name = 'Accuracy' metric_value = accuracy_score(y_test, y_pred) # For chart: use first two features chart_data = {'y_test': y_test.tolist(), 'y_pred': y_pred.tolist(), 'X_test_0': X_test[:, 0].tolist(), 'X_test_1': X_test[:, 1].tolist()} else: metric_name = 'Mean Squared Error' metric_value = mean_squared_error(y_test, y_pred) # For chart: predictions vs actuals chart_data = {'y_test': y_test.tolist(), 'y_pred': y_pred.tolist()} results = { 'metric_name': metric_name, 'metric_value': metric_value, 'problem_type': problem_type, 'chart_data': chart_data } json.dumps(results) `; log('Executing Python code with scikit-learn...'); const resultsJson = await pyodide.runPythonAsync(pythonCode); log('Training complete!'); const results = JSON.parse(resultsJson); displayResults(results); document.getElementById('next-btn-2').classList.remove('hidden'); } catch (error) { log(`An error occurred: ${error}`); } } function displayResults(results) { metricsOutput.innerHTML = `${results.metric_name}
${results.metric_value.toFixed(4)}
