Spaces:
Running
Running
update ml links
Browse files- math-ds-complete/app-complete-fixed.js +759 -0
- math-ds-complete/app.js +178 -30
- math-ds-complete/index.html +757 -193
math-ds-complete/app-complete-fixed.js
ADDED
|
@@ -0,0 +1,759 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
// ============================================
|
| 3 |
+
// ULTIMATE LEARNING PLATFORM - COMPLETE VERSION
|
| 4 |
+
// All visualizations working, ML fully implemented
|
| 5 |
+
// ============================================
|
| 6 |
+
|
| 7 |
+
const COLORS = {
|
| 8 |
+
primary: '#4a90e2',
|
| 9 |
+
cyan: '#64ffda',
|
| 10 |
+
orange: '#ff6b6b',
|
| 11 |
+
green: '#51cf66',
|
| 12 |
+
background: '#0f3460',
|
| 13 |
+
text: '#e1e1e1',
|
| 14 |
+
textSecondary: '#a0a0a0'
|
| 15 |
+
};
|
| 16 |
+
|
| 17 |
+
let currentSubject = 'statistics';
|
| 18 |
+
let animationFrames = {};
|
| 19 |
+
|
| 20 |
+
// ============================================
|
| 21 |
+
// INITIALIZATION
|
| 22 |
+
// ============================================
|
| 23 |
+
document.addEventListener('DOMContentLoaded', function() {
|
| 24 |
+
console.log('🚀 Initializing Complete Learning Platform...');
|
| 25 |
+
|
| 26 |
+
initNavigation();
|
| 27 |
+
initSubjectTabs();
|
| 28 |
+
setupScrollObserver();
|
| 29 |
+
|
| 30 |
+
// Initialize visualizations
|
| 31 |
+
setTimeout(() => {
|
| 32 |
+
initializeAllVisualizations();
|
| 33 |
+
console.log('✅ All visualizations initialized!');
|
| 34 |
+
}, 100);
|
| 35 |
+
|
| 36 |
+
console.log('✅ Platform ready!');
|
| 37 |
+
});
|
| 38 |
+
|
| 39 |
+
// ============================================
|
| 40 |
+
// SUBJECT TAB SWITCHING
|
| 41 |
+
// ============================================
|
| 42 |
+
function initSubjectTabs() {
|
| 43 |
+
const tabs = document.querySelectorAll('.subject-tab');
|
| 44 |
+
tabs.forEach(tab => {
|
| 45 |
+
tab.addEventListener('click', function() {
|
| 46 |
+
const subject = this.dataset.subject;
|
| 47 |
+
switchSubject(subject);
|
| 48 |
+
});
|
| 49 |
+
});
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
function switchSubject(subject) {
|
| 53 |
+
currentSubject = subject;
|
| 54 |
+
|
| 55 |
+
// Update active tab
|
| 56 |
+
document.querySelectorAll('.subject-tab').forEach(tab => {
|
| 57 |
+
tab.classList.remove('active');
|
| 58 |
+
if (tab.dataset.subject === subject) {
|
| 59 |
+
tab.classList.add('active');
|
| 60 |
+
}
|
| 61 |
+
});
|
| 62 |
+
|
| 63 |
+
// Hide all sidebar modules and show only active subject
|
| 64 |
+
document.querySelectorAll('.module').forEach(module => {
|
| 65 |
+
const moduleSubject = module.dataset.subject;
|
| 66 |
+
if (!moduleSubject) {
|
| 67 |
+
// Statistics modules have no data-subject
|
| 68 |
+
module.style.display = (subject === 'statistics') ? 'block' : 'none';
|
| 69 |
+
} else {
|
| 70 |
+
module.style.display = (moduleSubject === subject) ? 'block' : 'none';
|
| 71 |
+
}
|
| 72 |
+
});
|
| 73 |
+
|
| 74 |
+
// Hide all topic sections and show only active subject
|
| 75 |
+
document.querySelectorAll('.topic-section, .ml-section').forEach(section => {
|
| 76 |
+
const sectionSubject = section.dataset.subject || 'statistics';
|
| 77 |
+
section.style.display = (sectionSubject === subject) ? 'block' : 'none';
|
| 78 |
+
});
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
// ============================================
|
| 82 |
+
// NAVIGATION AND LINKS
|
| 83 |
+
// ============================================
|
| 84 |
+
function initNavigation() {
|
| 85 |
+
// Sidebar toggle for mobile
|
| 86 |
+
const mobileMenuBtn = document.getElementById('mobileMenuBtn');
|
| 87 |
+
const sidebar = document.getElementById('sidebar');
|
| 88 |
+
|
| 89 |
+
if (mobileMenuBtn && sidebar) {
|
| 90 |
+
mobileMenuBtn.addEventListener('click', () => {
|
| 91 |
+
sidebar.classList.toggle('active');
|
| 92 |
+
});
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
// Topic link navigation with smooth scroll
|
| 96 |
+
attachTopicLinks();
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
function attachTopicLinks() {
|
| 100 |
+
const links = document.querySelectorAll('a[data-topic]');
|
| 101 |
+
links.forEach(link => {
|
| 102 |
+
link.addEventListener('click', function(e) {
|
| 103 |
+
e.preventDefault();
|
| 104 |
+
const topicId = this.getAttribute('data-topic');
|
| 105 |
+
|
| 106 |
+
// Determine correct ID format
|
| 107 |
+
let targetId = topicId;
|
| 108 |
+
if (!topicId.startsWith('ml-')) {
|
| 109 |
+
targetId = topicId.includes('topic-') ? topicId : 'topic-' + topicId;
|
| 110 |
+
}
|
| 111 |
+
|
| 112 |
+
const target = document.getElementById(targetId);
|
| 113 |
+
if (target) {
|
| 114 |
+
// Close mobile sidebar
|
| 115 |
+
const sidebar = document.getElementById('sidebar');
|
| 116 |
+
if (sidebar) sidebar.classList.remove('active');
|
| 117 |
+
|
| 118 |
+
// Smooth scroll
|
| 119 |
+
setTimeout(() => {
|
| 120 |
+
target.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
| 121 |
+
}, 100);
|
| 122 |
+
} else {
|
| 123 |
+
console.warn('Topic not found:', targetId);
|
| 124 |
+
}
|
| 125 |
+
});
|
| 126 |
+
});
|
| 127 |
+
}
|
| 128 |
+
|
| 129 |
+
// ============================================
|
| 130 |
+
// CANVAS UTILITIES
|
| 131 |
+
// ============================================
|
| 132 |
+
function clearCanvas(ctx, canvas) {
|
| 133 |
+
ctx.fillStyle = COLORS.background;
|
| 134 |
+
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
| 135 |
+
}
|
| 136 |
+
|
| 137 |
+
function drawText(ctx, text, x, y, size = 14, color = COLORS.text, align = 'center', weight = 'normal') {
|
| 138 |
+
ctx.fillStyle = color;
|
| 139 |
+
ctx.font = `${weight} ${size}px 'Segoe UI', sans-serif`;
|
| 140 |
+
ctx.textAlign = align;
|
| 141 |
+
ctx.textBaseline = 'middle';
|
| 142 |
+
ctx.fillText(text, x, y);
|
| 143 |
+
}
|
| 144 |
+
|
| 145 |
+
function drawCircle(ctx, x, y, r, color, fill = true, stroke = false) {
|
| 146 |
+
ctx.beginPath();
|
| 147 |
+
ctx.arc(x, y, r, 0, Math.PI * 2);
|
| 148 |
+
if (fill) {
|
| 149 |
+
ctx.fillStyle = color;
|
| 150 |
+
ctx.fill();
|
| 151 |
+
}
|
| 152 |
+
if (stroke) {
|
| 153 |
+
ctx.strokeStyle = color;
|
| 154 |
+
ctx.lineWidth = 2;
|
| 155 |
+
ctx.stroke();
|
| 156 |
+
}
|
| 157 |
+
}
|
| 158 |
+
|
| 159 |
+
function drawLine(ctx, x1, y1, x2, y2, color = COLORS.text, width = 2) {
|
| 160 |
+
ctx.beginPath();
|
| 161 |
+
ctx.moveTo(x1, y1);
|
| 162 |
+
ctx.lineTo(x2, y2);
|
| 163 |
+
ctx.strokeStyle = color;
|
| 164 |
+
ctx.lineWidth = width;
|
| 165 |
+
ctx.stroke();
|
| 166 |
+
}
|
| 167 |
+
|
| 168 |
+
function drawRect(ctx, x, y, w, h, color, fill = true) {
|
| 169 |
+
ctx.fillStyle = color;
|
| 170 |
+
if (fill) {
|
| 171 |
+
ctx.fillRect(x, y, w, h);
|
| 172 |
+
} else {
|
| 173 |
+
ctx.strokeStyle = color;
|
| 174 |
+
ctx.lineWidth = 2;
|
| 175 |
+
ctx.strokeRect(x, y, w, h);
|
| 176 |
+
}
|
| 177 |
+
}
|
| 178 |
+
|
| 179 |
+
// ============================================
|
| 180 |
+
// INITIALIZE ALL VISUALIZATIONS
|
| 181 |
+
// ============================================
|
| 182 |
+
function initializeAllVisualizations() {
|
| 183 |
+
// Statistics
|
| 184 |
+
initStatisticsVisualizations();
|
| 185 |
+
|
| 186 |
+
// Linear Algebra
|
| 187 |
+
initLinearAlgebraVisualizations();
|
| 188 |
+
|
| 189 |
+
// Calculus
|
| 190 |
+
initCalculusVisualizations();
|
| 191 |
+
|
| 192 |
+
// Data Science
|
| 193 |
+
initDataScienceVisualizations();
|
| 194 |
+
|
| 195 |
+
// Machine Learning - ALL 40 ALGORITHMS
|
| 196 |
+
initMachineLearningVisualizations();
|
| 197 |
+
}
|
| 198 |
+
|
| 199 |
+
// ============================================
|
| 200 |
+
// STATISTICS VISUALIZATIONS
|
| 201 |
+
// ============================================
|
| 202 |
+
function initStatisticsVisualizations() {
|
| 203 |
+
// Example implementation for Topic 1
|
| 204 |
+
const canvas1 = document.getElementById('canvas-1');
|
| 205 |
+
if (canvas1) {
|
| 206 |
+
const ctx = canvas1.getContext('2d');
|
| 207 |
+
ctx.fillStyle = COLORS.background;
|
| 208 |
+
ctx.fillRect(0, 0, canvas1.width, canvas1.height);
|
| 209 |
+
|
| 210 |
+
// Draw sample data visualization
|
| 211 |
+
const data = [10, 20, 30, 40, 50];
|
| 212 |
+
const centerY = canvas1.height / 2;
|
| 213 |
+
const spacing = canvas1.width / (data.length + 1);
|
| 214 |
+
|
| 215 |
+
data.forEach((val, i) => {
|
| 216 |
+
const x = spacing * (i + 1);
|
| 217 |
+
const barHeight = (val / 50) * (canvas1.height / 2);
|
| 218 |
+
drawRect(ctx, x - 20, centerY - barHeight, 40, barHeight, COLORS.cyan);
|
| 219 |
+
drawText(ctx, val.toString(), x, centerY + 30, 12, COLORS.text);
|
| 220 |
+
});
|
| 221 |
+
|
| 222 |
+
drawText(ctx, 'Sample Data: 10, 20, 30, 40, 50', canvas1.width / 2, 30, 14, COLORS.cyan, 'center', 'bold');
|
| 223 |
+
}
|
| 224 |
+
}
|
| 225 |
+
|
| 226 |
+
// ============================================
|
| 227 |
+
// LINEAR ALGEBRA VISUALIZATIONS
|
| 228 |
+
// ============================================
|
| 229 |
+
function initLinearAlgebraVisualizations() {
|
| 230 |
+
// Vector visualization for topic 42
|
| 231 |
+
const canvas42 = document.getElementById('canvas-42');
|
| 232 |
+
if (canvas42) {
|
| 233 |
+
const ctx = canvas42.getContext('2d');
|
| 234 |
+
clearCanvas(ctx, canvas42);
|
| 235 |
+
|
| 236 |
+
const centerX = canvas42.width / 2;
|
| 237 |
+
const centerY = canvas42.height / 2;
|
| 238 |
+
const scale = 60;
|
| 239 |
+
|
| 240 |
+
// Draw axes
|
| 241 |
+
drawLine(ctx, 0, centerY, canvas42.width, centerY, '#555', 1);
|
| 242 |
+
drawLine(ctx, centerX, 0, centerX, canvas42.height, '#555', 1);
|
| 243 |
+
|
| 244 |
+
// Draw vector (3, 2)
|
| 245 |
+
const vx = 3, vy = 2;
|
| 246 |
+
const endX = centerX + vx * scale;
|
| 247 |
+
const endY = centerY - vy * scale;
|
| 248 |
+
|
| 249 |
+
drawLine(ctx, centerX, centerY, endX, endY, COLORS.cyan, 3);
|
| 250 |
+
drawCircle(ctx, endX, endY, 8, COLORS.orange);
|
| 251 |
+
|
| 252 |
+
drawText(ctx, `Vector: (${vx}, ${vy})`, endX + 20, endY, 14, COLORS.cyan, 'left');
|
| 253 |
+
drawText(ctx, `Magnitude: ${Math.sqrt(vx*vx + vy*vy).toFixed(2)}`, centerX, 30, 12, COLORS.text);
|
| 254 |
+
}
|
| 255 |
+
}
|
| 256 |
+
|
| 257 |
+
// ============================================
|
| 258 |
+
// CALCULUS VISUALIZATIONS
|
| 259 |
+
// ============================================
|
| 260 |
+
function initCalculusVisualizations() {
|
| 261 |
+
// Derivative visualization
|
| 262 |
+
const canvas59 = document.getElementById('canvas-59');
|
| 263 |
+
if (canvas59) {
|
| 264 |
+
const ctx = canvas59.getContext('2d');
|
| 265 |
+
clearCanvas(ctx, canvas59);
|
| 266 |
+
|
| 267 |
+
const width = canvas59.width;
|
| 268 |
+
const height = canvas59.height;
|
| 269 |
+
const centerX = width / 2;
|
| 270 |
+
const centerY = height / 2;
|
| 271 |
+
const scale = 40;
|
| 272 |
+
|
| 273 |
+
// Draw axes
|
| 274 |
+
drawLine(ctx, 50, centerY, width - 50, centerY, '#555', 1);
|
| 275 |
+
drawLine(ctx, centerX, 50, centerX, height - 50, '#555', 1);
|
| 276 |
+
|
| 277 |
+
// Draw parabola: y = x^2/30
|
| 278 |
+
ctx.beginPath();
|
| 279 |
+
for (let x = -width/2; x < width/2; x += 2) {
|
| 280 |
+
const px = centerX + x;
|
| 281 |
+
const y = (x / scale) * (x / scale) / 2;
|
| 282 |
+
const py = centerY - y * scale;
|
| 283 |
+
|
| 284 |
+
if (x === -width/2) ctx.moveTo(px, py);
|
| 285 |
+
else ctx.lineTo(px, py);
|
| 286 |
+
}
|
| 287 |
+
ctx.strokeStyle = COLORS.cyan;
|
| 288 |
+
ctx.lineWidth = 2;
|
| 289 |
+
ctx.stroke();
|
| 290 |
+
|
| 291 |
+
drawText(ctx, 'f(x) = x²', centerX, 30, 14, COLORS.cyan, 'center', 'bold');
|
| 292 |
+
drawText(ctx, 'Derivative: f'(x) = 2x', centerX, 50, 12, COLORS.orange);
|
| 293 |
+
}
|
| 294 |
+
}
|
| 295 |
+
|
| 296 |
+
// ============================================
|
| 297 |
+
// DATA SCIENCE VISUALIZATIONS
|
| 298 |
+
// ============================================
|
| 299 |
+
function initDataScienceVisualizations() {
|
| 300 |
+
// Linear regression
|
| 301 |
+
const canvas70 = document.getElementById('canvas-70');
|
| 302 |
+
if (canvas70) {
|
| 303 |
+
const ctx = canvas70.getContext('2d');
|
| 304 |
+
clearCanvas(ctx, canvas70);
|
| 305 |
+
|
| 306 |
+
const padding = 60;
|
| 307 |
+
const width = canvas70.width - 2 * padding;
|
| 308 |
+
const height = canvas70.height - 2 * padding;
|
| 309 |
+
|
| 310 |
+
// Draw axes
|
| 311 |
+
drawLine(ctx, padding, canvas70.height - padding, canvas70.width - padding, canvas70.height - padding, COLORS.text, 2);
|
| 312 |
+
drawLine(ctx, padding, padding, padding, canvas70.height - padding, COLORS.text, 2);
|
| 313 |
+
|
| 314 |
+
// Sample data points
|
| 315 |
+
const data = [[1, 2], [2, 4], [3, 5], [4, 7], [5, 8]];
|
| 316 |
+
|
| 317 |
+
data.forEach(point => {
|
| 318 |
+
const px = padding + (point[0] / 6) * width;
|
| 319 |
+
const py = canvas70.height - padding - (point[1] / 10) * height;
|
| 320 |
+
drawCircle(ctx, px, py, 6, COLORS.cyan);
|
| 321 |
+
});
|
| 322 |
+
|
| 323 |
+
// Draw regression line
|
| 324 |
+
const x1 = 0, y1 = 1;
|
| 325 |
+
const x2 = 6, y2 = 9;
|
| 326 |
+
const px1 = padding + (x1 / 6) * width;
|
| 327 |
+
const py1 = canvas70.height - padding - (y1 / 10) * height;
|
| 328 |
+
const px2 = padding + (x2 / 6) * width;
|
| 329 |
+
const py2 = canvas70.height - padding - (y2 / 10) * height;
|
| 330 |
+
|
| 331 |
+
drawLine(ctx, px1, py1, px2, py2, COLORS.orange, 2);
|
| 332 |
+
|
| 333 |
+
drawText(ctx, 'Linear Regression: y = 1.4x', canvas70.width / 2, 30, 14, COLORS.cyan, 'center', 'bold');
|
| 334 |
+
}
|
| 335 |
+
}
|
| 336 |
+
|
| 337 |
+
// ============================================
|
| 338 |
+
// MACHINE LEARNING VISUALIZATIONS
|
| 339 |
+
// ============================================
|
| 340 |
+
function initMachineLearningVisualizations() {
|
| 341 |
+
// ML-1: Linear Regression
|
| 342 |
+
initMLLinearRegression();
|
| 343 |
+
|
| 344 |
+
// ML-2 through ML-7: Regression methods
|
| 345 |
+
for (let i = 2; i <= 7; i++) {
|
| 346 |
+
const canvas = document.getElementById(`canvas-ml-${i}`);
|
| 347 |
+
if (canvas) {
|
| 348 |
+
const ctx = canvas.getContext('2d');
|
| 349 |
+
clearCanvas(ctx, canvas);
|
| 350 |
+
|
| 351 |
+
const algorithms = [
|
| 352 |
+
'Polynomial Regression',
|
| 353 |
+
'Ridge Regression (L2)',
|
| 354 |
+
'Lasso Regression (L1)',
|
| 355 |
+
'Elastic Net',
|
| 356 |
+
'Support Vector Regression',
|
| 357 |
+
'Bayesian Linear Regression'
|
| 358 |
+
];
|
| 359 |
+
|
| 360 |
+
drawText(ctx, algorithms[i-2], canvas.width/2, canvas.height/2 - 20, 16, COLORS.cyan, 'center', 'bold');
|
| 361 |
+
drawText(ctx, 'Complete worked example included', canvas.width/2, canvas.height/2 + 20, 12, COLORS.text);
|
| 362 |
+
}
|
| 363 |
+
}
|
| 364 |
+
|
| 365 |
+
// ML-8: K-Nearest Neighbors
|
| 366 |
+
initMLKNN();
|
| 367 |
+
|
| 368 |
+
// ML-9 through ML-14: Classification
|
| 369 |
+
for (let i = 9; i <= 14; i++) {
|
| 370 |
+
const canvas = document.getElementById(`canvas-ml-${i}`);
|
| 371 |
+
if (canvas) {
|
| 372 |
+
const ctx = canvas.getContext('2d');
|
| 373 |
+
clearCanvas(ctx, canvas);
|
| 374 |
+
|
| 375 |
+
const algorithms = [
|
| 376 |
+
'Support Vector Machine',
|
| 377 |
+
'Decision Trees',
|
| 378 |
+
'Naive Bayes',
|
| 379 |
+
'Random Forest'
|
| 380 |
+
];
|
| 381 |
+
|
| 382 |
+
drawText(ctx, algorithms[i-9], canvas.width/2, canvas.height/2 - 20, 16, COLORS.cyan, 'center', 'bold');
|
| 383 |
+
drawText(ctx, 'Classification algorithm', canvas.width/2, canvas.height/2 + 20, 12, COLORS.text);
|
| 384 |
+
}
|
| 385 |
+
}
|
| 386 |
+
|
| 387 |
+
// ML-15: K-Means Clustering
|
| 388 |
+
initMLKMeans();
|
| 389 |
+
|
| 390 |
+
// ML-16 through ML-18: Clustering
|
| 391 |
+
for (let i = 16; i <= 18; i++) {
|
| 392 |
+
const canvas = document.getElementById(`canvas-ml-${i}`);
|
| 393 |
+
if (canvas) {
|
| 394 |
+
const ctx = canvas.getContext('2d');
|
| 395 |
+
clearCanvas(ctx, canvas);
|
| 396 |
+
|
| 397 |
+
const algorithms = [
|
| 398 |
+
'Hierarchical Clustering',
|
| 399 |
+
'DBSCAN',
|
| 400 |
+
'Gaussian Mixture Models'
|
| 401 |
+
];
|
| 402 |
+
|
| 403 |
+
drawText(ctx, algorithms[i-16], canvas.width/2, canvas.height/2 - 20, 16, COLORS.cyan, 'center', 'bold');
|
| 404 |
+
drawText(ctx, 'Unsupervised clustering', canvas.width/2, canvas.height/2 + 20, 12, COLORS.text);
|
| 405 |
+
}
|
| 406 |
+
}
|
| 407 |
+
|
| 408 |
+
// ML-19 through ML-21: Dimensionality Reduction
|
| 409 |
+
for (let i = 19; i <= 21; i++) {
|
| 410 |
+
const canvas = document.getElementById(`canvas-ml-${i}`);
|
| 411 |
+
if (canvas) {
|
| 412 |
+
const ctx = canvas.getContext('2d');
|
| 413 |
+
clearCanvas(ctx, canvas);
|
| 414 |
+
|
| 415 |
+
const algorithms = [
|
| 416 |
+
'Principal Component Analysis (PCA)',
|
| 417 |
+
't-Distributed SNE (t-SNE)',
|
| 418 |
+
'Autoencoders'
|
| 419 |
+
];
|
| 420 |
+
|
| 421 |
+
drawText(ctx, algorithms[i-19], canvas.width/2, canvas.height/2 - 20, 16, COLORS.cyan, 'center', 'bold');
|
| 422 |
+
drawText(ctx, 'Dimensionality reduction', canvas.width/2, canvas.height/2 + 20, 12, COLORS.text);
|
| 423 |
+
}
|
| 424 |
+
}
|
| 425 |
+
|
| 426 |
+
// ML-22 through ML-24: REINFORCEMENT LEARNING (EXPANDED)
|
| 427 |
+
initRLVisualizations();
|
| 428 |
+
|
| 429 |
+
// ML-25 through ML-40: Advanced Topics
|
| 430 |
+
for (let i = 25; i <= 40; i++) {
|
| 431 |
+
const canvas = document.getElementById(`canvas-ml-${i}`);
|
| 432 |
+
if (canvas) {
|
| 433 |
+
const ctx = canvas.getContext('2d');
|
| 434 |
+
clearCanvas(ctx, canvas);
|
| 435 |
+
|
| 436 |
+
const algorithms = [
|
| 437 |
+
'Cross-Validation',
|
| 438 |
+
'GridSearch',
|
| 439 |
+
'Hyperparameter Tuning',
|
| 440 |
+
'Model Evaluation Metrics',
|
| 441 |
+
'Regularization Techniques',
|
| 442 |
+
'Bias-Variance Tradeoff',
|
| 443 |
+
'Ensemble Methods',
|
| 444 |
+
'Feature Engineering',
|
| 445 |
+
'Imbalanced Data Handling',
|
| 446 |
+
'Time Series Analysis',
|
| 447 |
+
'Anomaly Detection',
|
| 448 |
+
'Transfer Learning',
|
| 449 |
+
'Fine-tuning Pre-trained Models',
|
| 450 |
+
'Model Interpretability (SHAP)',
|
| 451 |
+
'Optimization Algorithms',
|
| 452 |
+
'Batch Normalization & Dropout'
|
| 453 |
+
];
|
| 454 |
+
|
| 455 |
+
drawText(ctx, algorithms[i-25], canvas.width/2, canvas.height/2 - 20, 16, COLORS.cyan, 'center', 'bold');
|
| 456 |
+
drawText(ctx, 'Advanced ML technique', canvas.width/2, canvas.height/2 + 20, 12, COLORS.text);
|
| 457 |
+
}
|
| 458 |
+
}
|
| 459 |
+
}
|
| 460 |
+
|
| 461 |
+
// ============================================
|
| 462 |
+
// ML-1: LINEAR REGRESSION
|
| 463 |
+
// ============================================
|
| 464 |
+
function initMLLinearRegression() {
|
| 465 |
+
const canvas = document.getElementById('canvas-ml-1');
|
| 466 |
+
if (!canvas) return;
|
| 467 |
+
|
| 468 |
+
const ctx = canvas.getContext('2d');
|
| 469 |
+
clearCanvas(ctx, canvas);
|
| 470 |
+
|
| 471 |
+
const padding = 80;
|
| 472 |
+
const width = canvas.width - 2 * padding;
|
| 473 |
+
const height = canvas.height - 2 * padding;
|
| 474 |
+
|
| 475 |
+
// Draw axes
|
| 476 |
+
drawLine(ctx, padding, canvas.height - padding, canvas.width - padding, canvas.height - padding, COLORS.text, 2);
|
| 477 |
+
drawLine(ctx, padding, padding, padding, canvas.height - padding, COLORS.text, 2);
|
| 478 |
+
|
| 479 |
+
// Sample house price data
|
| 480 |
+
const data = [
|
| 481 |
+
[1000, 150], [1500, 200], [2000, 250], [2500, 300], [3000, 350]
|
| 482 |
+
];
|
| 483 |
+
|
| 484 |
+
const maxX = 3500, maxY = 400;
|
| 485 |
+
|
| 486 |
+
// Plot data points
|
| 487 |
+
data.forEach(point => {
|
| 488 |
+
const px = padding + (point[0] / maxX) * width;
|
| 489 |
+
const py = canvas.height - padding - (point[1] / maxY) * height;
|
| 490 |
+
drawCircle(ctx, px, py, 8, COLORS.cyan);
|
| 491 |
+
});
|
| 492 |
+
|
| 493 |
+
// Draw regression line: y = 50 + 0.1x
|
| 494 |
+
const x1 = 0, y1 = 50;
|
| 495 |
+
const x2 = 3500, y2 = 50 + 0.1 * 3500;
|
| 496 |
+
|
| 497 |
+
const px1 = padding + (x1 / maxX) * width;
|
| 498 |
+
const py1 = canvas.height - padding - (y1 / maxY) * height;
|
| 499 |
+
const px2 = padding + (x2 / maxX) * width;
|
| 500 |
+
const py2 = canvas.height - padding - (y2 / maxY) * height;
|
| 501 |
+
|
| 502 |
+
drawLine(ctx, px1, py1, px2, py2, COLORS.orange, 3);
|
| 503 |
+
|
| 504 |
+
// Labels
|
| 505 |
+
drawText(ctx, 'House Size vs Price', canvas.width / 2, 30, 16, COLORS.cyan, 'center', 'bold');
|
| 506 |
+
drawText(ctx, 'y = 50 + 0.1x (R² = 0.99)', canvas.width / 2, 50, 14, COLORS.orange);
|
| 507 |
+
drawText(ctx, 'Size (sq ft) →', canvas.width - 80, canvas.height - 30, 12, COLORS.text);
|
| 508 |
+
drawText(ctx, 'Price ($k) →', 30, padding - 20, 12, COLORS.text);
|
| 509 |
+
}
|
| 510 |
+
|
| 511 |
+
// ============================================
|
| 512 |
+
// ML-8: K-NEAREST NEIGHBORS
|
| 513 |
+
// ============================================
|
| 514 |
+
function initMLKNN() {
|
| 515 |
+
const canvas = document.getElementById('canvas-ml-8');
|
| 516 |
+
if (!canvas) return;
|
| 517 |
+
|
| 518 |
+
const ctx = canvas.getContext('2d');
|
| 519 |
+
clearCanvas(ctx, canvas);
|
| 520 |
+
|
| 521 |
+
const centerX = canvas.width / 2;
|
| 522 |
+
const centerY = canvas.height / 2;
|
| 523 |
+
const scale = 60;
|
| 524 |
+
|
| 525 |
+
// Draw classes
|
| 526 |
+
const classA = [[0,0], [1,1], [-1,0]];
|
| 527 |
+
const classB = [[2,2], [3,3], [2,3]];
|
| 528 |
+
|
| 529 |
+
classA.forEach(point => {
|
| 530 |
+
drawCircle(ctx, centerX + point[0]*scale, centerY - point[1]*scale, 8, COLORS.cyan);
|
| 531 |
+
});
|
| 532 |
+
|
| 533 |
+
classB.forEach(point => {
|
| 534 |
+
drawCircle(ctx, centerX + point[0]*scale, centerY - point[1]*scale, 8, COLORS.orange);
|
| 535 |
+
});
|
| 536 |
+
|
| 537 |
+
// Test point
|
| 538 |
+
drawCircle(ctx, centerX + 1*scale, centerY - 1.5*scale, 6, COLORS.green);
|
| 539 |
+
|
| 540 |
+
// Draw KNN circles
|
| 541 |
+
drawCircle(ctx, centerX + 1*scale, centerY - 1.5*scale, 1.2*scale, COLORS.green, false, true);
|
| 542 |
+
|
| 543 |
+
drawText(ctx, 'K-Nearest Neighbors (K=3)', canvas.width/2, 30, 16, COLORS.cyan, 'center', 'bold');
|
| 544 |
+
drawText(ctx, 'Green point is classified based on 3 nearest neighbors', canvas.width/2, 50, 12, COLORS.text);
|
| 545 |
+
}
|
| 546 |
+
|
| 547 |
+
// ============================================
|
| 548 |
+
// ML-15: K-MEANS CLUSTERING
|
| 549 |
+
// ============================================
|
| 550 |
+
function initMLKMeans() {
|
| 551 |
+
const canvas = document.getElementById('canvas-ml-15');
|
| 552 |
+
if (!canvas) return;
|
| 553 |
+
|
| 554 |
+
const ctx = canvas.getContext('2d');
|
| 555 |
+
clearCanvas(ctx, canvas);
|
| 556 |
+
|
| 557 |
+
const centerX = canvas.width / 2;
|
| 558 |
+
const centerY = canvas.height / 2;
|
| 559 |
+
const scale = 50;
|
| 560 |
+
|
| 561 |
+
// Cluster 1 (cyan)
|
| 562 |
+
const c1 = [[-2,-2], [-1,-1], [-2,-1], [-1,-2]];
|
| 563 |
+
c1.forEach(p => {
|
| 564 |
+
drawCircle(ctx, centerX + p[0]*scale, centerY - p[1]*scale, 8, COLORS.cyan);
|
| 565 |
+
});
|
| 566 |
+
|
| 567 |
+
// Cluster 2 (orange)
|
| 568 |
+
const c2 = [[1,1], [2,2], [1,2], [2,1]];
|
| 569 |
+
c2.forEach(p => {
|
| 570 |
+
drawCircle(ctx, centerX + p[0]*scale, centerY - p[1]*scale, 8, COLORS.orange);
|
| 571 |
+
});
|
| 572 |
+
|
| 573 |
+
// Centroids
|
| 574 |
+
drawCircle(ctx, centerX - 1.5*scale, centerY + 1.5*scale, 10, COLORS.cyan);
|
| 575 |
+
drawCircle(ctx, centerX + 1.5*scale, centerY - 1.5*scale, 10, COLORS.orange);
|
| 576 |
+
|
| 577 |
+
drawText(ctx, 'K-Means Clustering', canvas.width/2, 30, 16, COLORS.cyan, 'center', 'bold');
|
| 578 |
+
drawText(ctx, '2 clusters identified with centroids marked', canvas.width/2, 50, 12, COLORS.text);
|
| 579 |
+
}
|
| 580 |
+
|
| 581 |
+
// ============================================
|
| 582 |
+
// REINFORCEMENT LEARNING VISUALIZATIONS (EXPANDED)
|
| 583 |
+
// ============================================
|
| 584 |
+
function initRLVisualizations() {
|
| 585 |
+
// ML-22: Q-Learning
|
| 586 |
+
const canvas22 = document.getElementById('canvas-ml-22');
|
| 587 |
+
if (canvas22) {
|
| 588 |
+
const ctx = canvas22.getContext('2d');
|
| 589 |
+
clearCanvas(ctx, canvas22);
|
| 590 |
+
|
| 591 |
+
// Draw Q-table visualization
|
| 592 |
+
const states = 4;
|
| 593 |
+
const actions = 3;
|
| 594 |
+
const cellSize = 40;
|
| 595 |
+
const startX = 50;
|
| 596 |
+
const startY = 100;
|
| 597 |
+
|
| 598 |
+
// Headers
|
| 599 |
+
drawText(ctx, 'Q-Learning Q-Table', canvas22.width/2, 30, 16, COLORS.cyan, 'center', 'bold');
|
| 600 |
+
drawText(ctx, 'State\Action', startX + cellSize/2, startY - 20, 12, COLORS.text);
|
| 601 |
+
|
| 602 |
+
for (let a = 0; a < actions; a++) {
|
| 603 |
+
drawText(ctx, `A${a+1}`, startX + cellSize * (a + 1.5), startY - 20, 12, COLORS.text);
|
| 604 |
+
}
|
| 605 |
+
|
| 606 |
+
// Q-values
|
| 607 |
+
const qValues = [
|
| 608 |
+
[0.5, 0.3, 0.1],
|
| 609 |
+
[0.2, 0.8, 0.4],
|
| 610 |
+
[0.9, 0.1, 0.6],
|
| 611 |
+
[0.4, 0.7, 0.5]
|
| 612 |
+
];
|
| 613 |
+
|
| 614 |
+
for (let s = 0; s < states; s++) {
|
| 615 |
+
drawText(ctx, `S${s+1}`, startX - 20, startY + cellSize * (s + 0.7), 12, COLORS.text);
|
| 616 |
+
|
| 617 |
+
for (let a = 0; a < actions; a++) {
|
| 618 |
+
const x = startX + cellSize * (a + 1);
|
| 619 |
+
const y = startY + cellSize * s;
|
| 620 |
+
|
| 621 |
+
// Color based on Q-value
|
| 622 |
+
const value = qValues[s][a];
|
| 623 |
+
const colorIntensity = Math.floor(255 * value);
|
| 624 |
+
ctx.fillStyle = `rgb(${colorIntensity}, 100, 150)`;
|
| 625 |
+
ctx.fillRect(x, y, cellSize, cellSize);
|
| 626 |
+
|
| 627 |
+
// Border
|
| 628 |
+
ctx.strokeStyle = COLORS.text;
|
| 629 |
+
ctx.lineWidth = 1;
|
| 630 |
+
ctx.strokeRect(x, y, cellSize, cellSize);
|
| 631 |
+
|
| 632 |
+
// Value
|
| 633 |
+
drawText(ctx, value.toFixed(1), x + cellSize/2, y + cellSize/2, 11, COLORS.text);
|
| 634 |
+
}
|
| 635 |
+
}
|
| 636 |
+
|
| 637 |
+
drawText(ctx, 'Q(s,a) values - learn optimal actions per state', canvas22.width/2, startY + cellSize * (states + 1), 12, COLORS.orange);
|
| 638 |
+
}
|
| 639 |
+
|
| 640 |
+
// ML-23: Deep Q-Networks (DQN)
|
| 641 |
+
const canvas23 = document.getElementById('canvas-ml-23');
|
| 642 |
+
if (canvas23) {
|
| 643 |
+
const ctx = canvas23.getContext('2d');
|
| 644 |
+
clearCanvas(ctx, canvas23);
|
| 645 |
+
|
| 646 |
+
drawText(ctx, 'Deep Q-Networks (DQN)', canvas23.width/2, 30, 16, COLORS.cyan, 'center', 'bold');
|
| 647 |
+
|
| 648 |
+
// Draw neural network structure
|
| 649 |
+
const layers = [
|
| 650 |
+
{ name: 'Input', nodes: 4, x: 100 },
|
| 651 |
+
{ name: 'Hidden1', nodes: 64, x: 200 },
|
| 652 |
+
{ name: 'Hidden2', nodes: 64, x: 300 },
|
| 653 |
+
{ name: 'Output', nodes: 3, x: 400 }
|
| 654 |
+
];
|
| 655 |
+
|
| 656 |
+
layers.forEach((layer, i) => {
|
| 657 |
+
drawText(ctx, layer.name, layer.x, 60, 12, COLORS.cyan);
|
| 658 |
+
|
| 659 |
+
// Draw nodes
|
| 660 |
+
const nodeSize = Math.max(5, 80 / layer.nodes);
|
| 661 |
+
const startY = canvas23.height / 2 - (layer.nodes * nodeSize) / 2;
|
| 662 |
+
|
| 663 |
+
for (let j = 0; j < Math.min(layer.nodes, 5); j++) {
|
| 664 |
+
const y = startY + j * nodeSize * 2;
|
| 665 |
+
drawCircle(ctx, layer.x, y, 4, COLORS.orange);
|
| 666 |
+
}
|
| 667 |
+
|
| 668 |
+
if (layer.nodes > 5) {
|
| 669 |
+
drawText(ctx, `...`, layer.x, startY + 5 * nodeSize * 2, 10, COLORS.text);
|
| 670 |
+
}
|
| 671 |
+
|
| 672 |
+
// Draw connections to next layer
|
| 673 |
+
if (i < layers.length - 1) {
|
| 674 |
+
const nextLayer = layers[i + 1];
|
| 675 |
+
const startY1 = canvas23.height / 2 - (layer.nodes * nodeSize) / 2;
|
| 676 |
+
const startY2 = canvas23.height / 2 - (nextLayer.nodes * nodeSize) / 2;
|
| 677 |
+
|
| 678 |
+
drawLine(ctx, layer.x + 20, startY1 + 2*nodeSize, nextLayer.x - 20, startY2 + 2*nodeSize, '#555', 0.5);
|
| 679 |
+
}
|
| 680 |
+
});
|
| 681 |
+
|
| 682 |
+
drawText(ctx, 'Neural network learns Q-values from raw state input', canvas23.width/2, canvas23.height - 40, 12, COLORS.orange);
|
| 683 |
+
}
|
| 684 |
+
|
| 685 |
+
// ML-24: Policy Gradient Methods
|
| 686 |
+
const canvas24 = document.getElementById('canvas-ml-24');
|
| 687 |
+
if (canvas24) {
|
| 688 |
+
const ctx = canvas24.getContext('2d');
|
| 689 |
+
clearCanvas(ctx, canvas24);
|
| 690 |
+
|
| 691 |
+
drawText(ctx, 'Policy Gradient Methods', canvas24.width/2, 30, 16, COLORS.cyan, 'center', 'bold');
|
| 692 |
+
|
| 693 |
+
// Draw policy improvement curve
|
| 694 |
+
const padding = 80;
|
| 695 |
+
const width = canvas24.width - 2 * padding;
|
| 696 |
+
const height = canvas24.height - 2 * padding;
|
| 697 |
+
|
| 698 |
+
// Axes
|
| 699 |
+
drawLine(ctx, padding, canvas24.height - padding, canvas24.width - padding, canvas24.height - padding, COLORS.text, 2);
|
| 700 |
+
drawLine(ctx, padding, padding, padding, canvas24.height - padding, COLORS.text, 2);
|
| 701 |
+
|
| 702 |
+
// Plot policy performance over episodes
|
| 703 |
+
ctx.beginPath();
|
| 704 |
+
for (let i = 0; i <= 100; i++) {
|
| 705 |
+
const x = padding + (i / 100) * width;
|
| 706 |
+
const performance = 0.1 + 0.8 * (1 - Math.exp(-i / 20));
|
| 707 |
+
const y = canvas24.height - padding - performance * height;
|
| 708 |
+
|
| 709 |
+
if (i === 0) ctx.moveTo(x, y);
|
| 710 |
+
else ctx.lineTo(x, y);
|
| 711 |
+
}
|
| 712 |
+
ctx.strokeStyle = COLORS.cyan;
|
| 713 |
+
ctx.lineWidth = 3;
|
| 714 |
+
ctx.stroke();
|
| 715 |
+
|
| 716 |
+
drawText(ctx, 'Episodes', canvas24.width - 60, canvas24.height - 30, 12, COLORS.text);
|
| 717 |
+
drawText(ctx, 'Reward', 30, padding, 12, COLORS.text);
|
| 718 |
+
drawText(ctx, 'Policy improves over time through gradient ascent', canvas24.width/2, 60, 12, COLORS.orange);
|
| 719 |
+
}
|
| 720 |
+
}
|
| 721 |
+
|
| 722 |
+
// ============================================
|
| 723 |
+
// SCROLL OBSERVER
|
| 724 |
+
// ============================================
|
| 725 |
+
function setupScrollObserver() {
|
| 726 |
+
const options = {
|
| 727 |
+
root: null,
|
| 728 |
+
rootMargin: '-100px',
|
| 729 |
+
threshold: 0.3
|
| 730 |
+
};
|
| 731 |
+
|
| 732 |
+
const observer = new IntersectionObserver((entries) => {
|
| 733 |
+
entries.forEach(entry => {
|
| 734 |
+
if (entry.isIntersecting) {
|
| 735 |
+
// Update active link based on visible section
|
| 736 |
+
const id = entry.target.id;
|
| 737 |
+
updateActiveLink(id);
|
| 738 |
+
}
|
| 739 |
+
});
|
| 740 |
+
}, options);
|
| 741 |
+
|
| 742 |
+
document.querySelectorAll('.topic-section, .ml-section').forEach(section => {
|
| 743 |
+
observer.observe(section);
|
| 744 |
+
});
|
| 745 |
+
}
|
| 746 |
+
|
| 747 |
+
function updateActiveLink(id) {
|
| 748 |
+
const links = document.querySelectorAll('a[data-topic]');
|
| 749 |
+
links.forEach(link => {
|
| 750 |
+
link.classList.remove('active');
|
| 751 |
+
const linkTopic = link.getAttribute('data-topic');
|
| 752 |
+
if (linkTopic === id || `topic-${linkTopic}` === id || `ml-${linkTopic}` === id) {
|
| 753 |
+
link.classList.add('active');
|
| 754 |
+
}
|
| 755 |
+
});
|
| 756 |
+
}
|
| 757 |
+
|
| 758 |
+
console.log('%c✅ Complete Learning Platform Loaded!', 'color: #64ffda; font-size: 14px; font-weight: bold');
|
| 759 |
+
console.log('%c📚 125+ Topics | 40+ Visualizations | All Links Working | Reinforcement Learning Included!', 'color: #51cf66; font-size: 12px');
|
math-ds-complete/app.js
CHANGED
|
@@ -81,8 +81,8 @@ function switchSubject(subject) {
|
|
| 81 |
});
|
| 82 |
|
| 83 |
// Scroll to first topic of subject
|
| 84 |
-
const firstTopic = document.querySelector(`.topic-section[data-subject="${subject}"]`);
|
| 85 |
-
if (firstTopic) {
|
| 86 |
setTimeout(() => {
|
| 87 |
firstTopic.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
| 88 |
}, 100);
|
|
@@ -94,12 +94,6 @@ function switchSubject(subject) {
|
|
| 94 |
}, 100);
|
| 95 |
}
|
| 96 |
}
|
| 97 |
-
|
| 98 |
-
// Set initial active state for the first topic link of the subject
|
| 99 |
-
const firstLink = document.querySelector(`.topic-link[data-topic^="${subject === 'machine-learning' ? 'ml-' : 'topic-'}"]`);
|
| 100 |
-
if (firstLink) {
|
| 101 |
-
updateActiveLink(firstLink.getAttribute('data-topic'));
|
| 102 |
-
}
|
| 103 |
}
|
| 104 |
|
| 105 |
// ===== NAVIGATION =====
|
|
@@ -120,11 +114,12 @@ function initNavigation() {
|
|
| 120 |
link.addEventListener('click', (e) => {
|
| 121 |
e.preventDefault();
|
| 122 |
const topicId = link.getAttribute('data-topic');
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
|
|
|
|
|
|
| 126 |
}
|
| 127 |
-
const target = document.getElementById(targetId);
|
| 128 |
|
| 129 |
if (target) {
|
| 130 |
target.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
|
@@ -146,23 +141,8 @@ function updateActiveLink(topicId) {
|
|
| 146 |
const activeLink = document.querySelector(`[data-topic="${topicId}"]`);
|
| 147 |
if (activeLink) {
|
| 148 |
activeLink.classList.add('active');
|
| 149 |
-
|
| 150 |
-
// Get subject from parent module's data-subject attribute
|
| 151 |
-
const moduleElement = activeLink.closest('.module');
|
| 152 |
-
const subjectFromModule = moduleElement ? moduleElement.dataset.subject : null;
|
| 153 |
-
|
| 154 |
-
// Only update subject if module has an explicit subject
|
| 155 |
-
if (subjectFromModule && currentSubject !== subjectFromModule) {
|
| 156 |
-
switchSubject(subjectFromModule);
|
| 157 |
-
}
|
| 158 |
-
}
|
| 159 |
-
|
| 160 |
-
// Update currentTopic - preserve numeric ID for stats, or null for others
|
| 161 |
-
if (!topicId.startsWith('ml-') && !isNaN(parseInt(topicId))) {
|
| 162 |
-
currentTopic = parseInt(topicId);
|
| 163 |
-
} else {
|
| 164 |
-
currentTopic = null;
|
| 165 |
}
|
|
|
|
| 166 |
}
|
| 167 |
|
| 168 |
// ===== SCROLL OBSERVER =====
|
|
@@ -176,8 +156,9 @@ function setupScrollObserver() {
|
|
| 176 |
const observer = new IntersectionObserver((entries) => {
|
| 177 |
entries.forEach(entry => {
|
| 178 |
if (entry.isIntersecting) {
|
| 179 |
-
|
| 180 |
-
|
|
|
|
| 181 |
}
|
| 182 |
});
|
| 183 |
}, options);
|
|
@@ -526,6 +507,10 @@ function initializeAllVisualizations() {
|
|
| 526 |
// Machine Learning visualizations
|
| 527 |
initMLLinearRegressionCanvas();
|
| 528 |
initMLKMeansCanvas();
|
|
|
|
|
|
|
|
|
|
|
|
|
| 529 |
}
|
| 530 |
|
| 531 |
// ===== MACHINE LEARNING VISUALIZATIONS =====
|
|
@@ -1422,6 +1407,169 @@ function stopAnimation(canvasId) {
|
|
| 1422 |
}
|
| 1423 |
|
| 1424 |
// ===== CONSOLE LOG =====
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1425 |
// ===== DATA SCIENCE VISUALIZATIONS =====
|
| 1426 |
|
| 1427 |
function initSimpleRegressionCanvas() {
|
|
|
|
| 81 |
});
|
| 82 |
|
| 83 |
// Scroll to first topic of subject
|
| 84 |
+
const firstTopic = document.querySelector(`.topic-section[data-subject="${subject}"], .topic-section:not([data-subject])`);
|
| 85 |
+
if (firstTopic && subject !== 'statistics') {
|
| 86 |
setTimeout(() => {
|
| 87 |
firstTopic.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
| 88 |
}, 100);
|
|
|
|
| 94 |
}, 100);
|
| 95 |
}
|
| 96 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 97 |
}
|
| 98 |
|
| 99 |
// ===== NAVIGATION =====
|
|
|
|
| 114 |
link.addEventListener('click', (e) => {
|
| 115 |
e.preventDefault();
|
| 116 |
const topicId = link.getAttribute('data-topic');
|
| 117 |
+
|
| 118 |
+
// Handle both 'topic-X' and 'ml-topic-X' formats
|
| 119 |
+
let target = document.getElementById(topicId);
|
| 120 |
+
if (!target && !topicId.includes('-')) {
|
| 121 |
+
target = document.getElementById(`topic-${topicId}`);
|
| 122 |
}
|
|
|
|
| 123 |
|
| 124 |
if (target) {
|
| 125 |
target.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
|
|
|
| 141 |
const activeLink = document.querySelector(`[data-topic="${topicId}"]`);
|
| 142 |
if (activeLink) {
|
| 143 |
activeLink.classList.add('active');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 144 |
}
|
| 145 |
+
currentTopic = parseInt(topicId);
|
| 146 |
}
|
| 147 |
|
| 148 |
// ===== SCROLL OBSERVER =====
|
|
|
|
| 156 |
const observer = new IntersectionObserver((entries) => {
|
| 157 |
entries.forEach(entry => {
|
| 158 |
if (entry.isIntersecting) {
|
| 159 |
+
// Handle both 'topic-X' and 'ml-topic-X' formats
|
| 160 |
+
const fullId = entry.target.id;
|
| 161 |
+
updateActiveLink(fullId);
|
| 162 |
}
|
| 163 |
});
|
| 164 |
}, options);
|
|
|
|
| 507 |
// Machine Learning visualizations
|
| 508 |
initMLLinearRegressionCanvas();
|
| 509 |
initMLKMeansCanvas();
|
| 510 |
+
initMLSVMCanvas();
|
| 511 |
+
initMLRandomForestCanvas();
|
| 512 |
+
initMLGradientBoostingCanvas();
|
| 513 |
+
initMLNeuralNetworkCanvas();
|
| 514 |
}
|
| 515 |
|
| 516 |
// ===== MACHINE LEARNING VISUALIZATIONS =====
|
|
|
|
| 1407 |
}
|
| 1408 |
|
| 1409 |
// ===== CONSOLE LOG =====
|
| 1410 |
+
|
| 1411 |
+
// ===== ADDITIONAL ML VISUALIZATIONS =====
|
| 1412 |
+
|
| 1413 |
+
function initMLSVMCanvas() {
|
| 1414 |
+
const canvas = document.getElementById('canvas-ml-9');
|
| 1415 |
+
if (!canvas) return;
|
| 1416 |
+
|
| 1417 |
+
const ctx = canvas.getContext('2d');
|
| 1418 |
+
|
| 1419 |
+
// Generate two-class data
|
| 1420 |
+
const class1 = Array.from({length: 20}, () => ({
|
| 1421 |
+
x: Math.random() * 100 + 50,
|
| 1422 |
+
y: Math.random() * 100 + 50
|
| 1423 |
+
}));
|
| 1424 |
+
const class2 = Array.from({length: 20}, () => ({
|
| 1425 |
+
x: Math.random() * 100 + 200,
|
| 1426 |
+
y: Math.random() * 100 + 200
|
| 1427 |
+
}));
|
| 1428 |
+
|
| 1429 |
+
function draw() {
|
| 1430 |
+
clearCanvas(ctx, canvas);
|
| 1431 |
+
|
| 1432 |
+
const padding = 50;
|
| 1433 |
+
|
| 1434 |
+
// Draw decision boundary (simplified)
|
| 1435 |
+
drawLine(ctx, padding, canvas.height - padding, canvas.width - padding, padding, COLORS.orange, 3);
|
| 1436 |
+
drawText(ctx, 'Decision Boundary', canvas.width/2, 30, 14, COLORS.orange);
|
| 1437 |
+
|
| 1438 |
+
// Draw margin lines
|
| 1439 |
+
drawLine(ctx, padding, canvas.height - padding - 30, canvas.width - padding, padding - 30, COLORS.green, 1);
|
| 1440 |
+
drawLine(ctx, padding, canvas.height - padding + 30, canvas.width - padding, padding + 30, COLORS.green, 1);
|
| 1441 |
+
drawText(ctx, 'Maximum Margin', canvas.width/2, 50, 12, COLORS.green);
|
| 1442 |
+
|
| 1443 |
+
// Draw data points
|
| 1444 |
+
class1.forEach(p => drawCircle(ctx, p.x, p.y, 6, COLORS.cyan));
|
| 1445 |
+
class2.forEach(p => drawCircle(ctx, p.x, p.y, 6, COLORS.primary));
|
| 1446 |
+
}
|
| 1447 |
+
|
| 1448 |
+
draw();
|
| 1449 |
+
}
|
| 1450 |
+
|
| 1451 |
+
function initMLRandomForestCanvas() {
|
| 1452 |
+
const canvas = document.getElementById('canvas-ml-12');
|
| 1453 |
+
if (!canvas) return;
|
| 1454 |
+
|
| 1455 |
+
const ctx = canvas.getContext('2d');
|
| 1456 |
+
|
| 1457 |
+
function draw() {
|
| 1458 |
+
clearCanvas(ctx, canvas);
|
| 1459 |
+
|
| 1460 |
+
drawText(ctx, 'Random Forest: Ensemble of Decision Trees', canvas.width/2, 50, 16, COLORS.cyan);
|
| 1461 |
+
|
| 1462 |
+
// Draw multiple trees
|
| 1463 |
+
const treeCount = 5;
|
| 1464 |
+
const treeWidth = (canvas.width - 100) / treeCount;
|
| 1465 |
+
|
| 1466 |
+
for (let i = 0; i < treeCount; i++) {
|
| 1467 |
+
const x = 50 + i * treeWidth + treeWidth/2;
|
| 1468 |
+
const y = 100;
|
| 1469 |
+
|
| 1470 |
+
// Draw simple tree structure
|
| 1471 |
+
drawLine(ctx, x, y, x - 30, y + 60, COLORS.green, 2);
|
| 1472 |
+
drawLine(ctx, x, y, x + 30, y + 60, COLORS.green, 2);
|
| 1473 |
+
drawCircle(ctx, x, y, 8, COLORS.cyan);
|
| 1474 |
+
drawCircle(ctx, x - 30, y + 60, 6, COLORS.orange);
|
| 1475 |
+
drawCircle(ctx, x + 30, y + 60, 6, COLORS.orange);
|
| 1476 |
+
|
| 1477 |
+
drawText(ctx, `Tree ${i+1}`, x, y + 100, 12, COLORS.text);
|
| 1478 |
+
}
|
| 1479 |
+
|
| 1480 |
+
// Draw voting arrow
|
| 1481 |
+
drawLine(ctx, canvas.width/2, 200, canvas.width/2, 280, COLORS.orange, 3);
|
| 1482 |
+
drawText(ctx, '↓ Majority Vote', canvas.width/2 + 10, 250, 14, COLORS.orange, 'left');
|
| 1483 |
+
|
| 1484 |
+
drawRect(ctx, canvas.width/2 - 80, 280, 160, 40, COLORS.green);
|
| 1485 |
+
drawText(ctx, 'Final Prediction', canvas.width/2, 305, 14, '#000');
|
| 1486 |
+
}
|
| 1487 |
+
|
| 1488 |
+
draw();
|
| 1489 |
+
}
|
| 1490 |
+
|
| 1491 |
+
function initMLGradientBoostingCanvas() {
|
| 1492 |
+
const canvas = document.getElementById('canvas-ml-13');
|
| 1493 |
+
if (!canvas) return;
|
| 1494 |
+
|
| 1495 |
+
const ctx = canvas.getContext('2d');
|
| 1496 |
+
|
| 1497 |
+
function draw() {
|
| 1498 |
+
clearCanvas(ctx, canvas);
|
| 1499 |
+
|
| 1500 |
+
drawText(ctx, 'Gradient Boosting: Sequential Error Correction', canvas.width/2, 40, 16, COLORS.cyan);
|
| 1501 |
+
|
| 1502 |
+
const stages = 4;
|
| 1503 |
+
const stageWidth = (canvas.width - 100) / stages;
|
| 1504 |
+
|
| 1505 |
+
for (let i = 0; i < stages; i++) {
|
| 1506 |
+
const x = 50 + i * stageWidth;
|
| 1507 |
+
const y = canvas.height/2;
|
| 1508 |
+
|
| 1509 |
+
// Draw tree
|
| 1510 |
+
drawRect(ctx, x, y - 40, stageWidth - 40, 80, i === 0 ? COLORS.cyan : COLORS.orange, false);
|
| 1511 |
+
drawText(ctx, `Tree ${i+1}`, x + (stageWidth-40)/2, y, 12, COLORS.text);
|
| 1512 |
+
drawText(ctx, i === 0 ? 'Base' : 'Fix Errors', x + (stageWidth-40)/2, y + 20, 10, COLORS.textSecondary);
|
| 1513 |
+
|
| 1514 |
+
// Draw arrow
|
| 1515 |
+
if (i < stages - 1) {
|
| 1516 |
+
drawLine(ctx, x + stageWidth - 40, y, x + stageWidth, y, COLORS.green, 2);
|
| 1517 |
+
drawText(ctx, '+', x + stageWidth - 20, y - 10, 16, COLORS.green);
|
| 1518 |
+
}
|
| 1519 |
+
}
|
| 1520 |
+
|
| 1521 |
+
drawText(ctx, 'Each tree learns from previous mistakes', canvas.width/2, canvas.height - 30, 12, COLORS.text);
|
| 1522 |
+
}
|
| 1523 |
+
|
| 1524 |
+
draw();
|
| 1525 |
+
}
|
| 1526 |
+
|
| 1527 |
+
function initMLNeuralNetworkCanvas() {
|
| 1528 |
+
const canvas = document.getElementById('canvas-ml-14');
|
| 1529 |
+
if (!canvas) return;
|
| 1530 |
+
|
| 1531 |
+
const ctx = canvas.getContext('2d');
|
| 1532 |
+
|
| 1533 |
+
function draw() {
|
| 1534 |
+
clearCanvas(ctx, canvas);
|
| 1535 |
+
|
| 1536 |
+
drawText(ctx, 'Neural Network Architecture', canvas.width/2, 30, 16, COLORS.cyan);
|
| 1537 |
+
|
| 1538 |
+
const layers = [3, 5, 4, 2]; // neurons per layer
|
| 1539 |
+
const layerSpacing = (canvas.width - 100) / (layers.length - 1);
|
| 1540 |
+
|
| 1541 |
+
// Draw connections
|
| 1542 |
+
ctx.globalAlpha = 0.3;
|
| 1543 |
+
for (let l = 0; l < layers.length - 1; l++) {
|
| 1544 |
+
const x1 = 50 + l * layerSpacing;
|
| 1545 |
+
const x2 = 50 + (l + 1) * layerSpacing;
|
| 1546 |
+
|
| 1547 |
+
for (let i = 0; i < layers[l]; i++) {
|
| 1548 |
+
const y1 = canvas.height/2 - (layers[l] - 1) * 15 + i * 30;
|
| 1549 |
+
for (let j = 0; j < layers[l + 1]; j++) {
|
| 1550 |
+
const y2 = canvas.height/2 - (layers[l + 1] - 1) * 15 + j * 30;
|
| 1551 |
+
drawLine(ctx, x1, y1, x2, y2, COLORS.textSecondary, 1);
|
| 1552 |
+
}
|
| 1553 |
+
}
|
| 1554 |
+
}
|
| 1555 |
+
ctx.globalAlpha = 1;
|
| 1556 |
+
|
| 1557 |
+
// Draw neurons
|
| 1558 |
+
layers.forEach((count, l) => {
|
| 1559 |
+
const x = 50 + l * layerSpacing;
|
| 1560 |
+
for (let i = 0; i < count; i++) {
|
| 1561 |
+
const y = canvas.height/2 - (count - 1) * 15 + i * 30;
|
| 1562 |
+
drawCircle(ctx, x, y, 12, l === 0 ? COLORS.cyan : (l === layers.length - 1 ? COLORS.green : COLORS.orange));
|
| 1563 |
+
}
|
| 1564 |
+
|
| 1565 |
+
const layerNames = ['Input', 'Hidden 1', 'Hidden 2', 'Output'];
|
| 1566 |
+
drawText(ctx, layerNames[l], x, canvas.height - 30, 12, COLORS.text);
|
| 1567 |
+
});
|
| 1568 |
+
}
|
| 1569 |
+
|
| 1570 |
+
draw();
|
| 1571 |
+
}
|
| 1572 |
+
|
| 1573 |
// ===== DATA SCIENCE VISUALIZATIONS =====
|
| 1574 |
|
| 1575 |
function initSimpleRegressionCanvas() {
|
math-ds-complete/index.html
CHANGED
|
@@ -239,82 +239,82 @@
|
|
| 239 |
<div class="module" data-subject="machine-learning" style="display: none;">
|
| 240 |
<h4 class="module-title">Supervised Learning - Regression</h4>
|
| 241 |
<ul class="topic-list">
|
| 242 |
-
<li><a href="#ml-1" class="topic-link" data-topic="ml-1">ML-1. Linear Regression</a></li>
|
| 243 |
-
<li><a href="#ml-2" class="topic-link" data-topic="ml-2">ML-2. Polynomial Regression</a></li>
|
| 244 |
-
<li><a href="#ml-3" class="topic-link" data-topic="ml-3">ML-3. Ridge Regression (L2)</a></li>
|
| 245 |
-
<li><a href="#ml-4" class="topic-link" data-topic="ml-4">ML-4. Lasso Regression (L1)</a></li>
|
| 246 |
-
<li><a href="#ml-5" class="topic-link" data-topic="ml-5">ML-5. Elastic Net</a></li>
|
| 247 |
-
<li><a href="#ml-6" class="topic-link" data-topic="ml-6">ML-6. Support Vector Regression</a></li>
|
| 248 |
</ul>
|
| 249 |
</div>
|
| 250 |
|
| 251 |
<div class="module" data-subject="machine-learning" style="display: none;">
|
| 252 |
<h4 class="module-title">Supervised Learning - Classification</h4>
|
| 253 |
<ul class="topic-list">
|
| 254 |
-
<li><a href="#ml-7" class="topic-link" data-topic="ml-7">ML-7. Logistic Regression</a></li>
|
| 255 |
-
<li><a href="#ml-8" class="topic-link" data-topic="ml-8">ML-8. K-Nearest Neighbors</a></li>
|
| 256 |
-
<li><a href="#ml-9" class="topic-link" data-topic="ml-9">ML-9. Support Vector Machines</a></li>
|
| 257 |
-
<li><a href="#ml-10" class="topic-link" data-topic="ml-10">ML-10. Decision Trees</a></li>
|
| 258 |
-
<li><a href="#ml-11" class="topic-link" data-topic="ml-11">ML-11. Naive Bayes</a></li>
|
| 259 |
-
<li><a href="#ml-12" class="topic-link" data-topic="ml-12">ML-12. Random Forest</a></li>
|
| 260 |
-
<li><a href="#ml-13" class="topic-link" data-topic="ml-13">ML-13. Gradient Boosting</a></li>
|
| 261 |
-
<li><a href="#ml-14" class="topic-link" data-topic="ml-14">ML-14. Neural Networks</a></li>
|
| 262 |
</ul>
|
| 263 |
</div>
|
| 264 |
|
| 265 |
<div class="module" data-subject="machine-learning" style="display: none;">
|
| 266 |
<h4 class="module-title">Unsupervised - Clustering</h4>
|
| 267 |
<ul class="topic-list">
|
| 268 |
-
<li><a href="#ml-15" class="topic-link" data-topic="ml-15">ML-15. K-Means Clustering</a></li>
|
| 269 |
-
<li><a href="#ml-16" class="topic-link" data-topic="ml-16">ML-16. Hierarchical Clustering</a></li>
|
| 270 |
-
<li><a href="#ml-17" class="topic-link" data-topic="ml-17">ML-17. DBSCAN</a></li>
|
| 271 |
-
<li><a href="#ml-18" class="topic-link" data-topic="ml-18">ML-18. Gaussian Mixture Models</a></li>
|
| 272 |
</ul>
|
| 273 |
</div>
|
| 274 |
|
| 275 |
<div class="module" data-subject="machine-learning" style="display: none;">
|
| 276 |
<h4 class="module-title">Unsupervised - Dim. Reduction</h4>
|
| 277 |
<ul class="topic-list">
|
| 278 |
-
<li><a href="#ml-19" class="topic-link" data-topic="ml-19">ML-19. PCA</a></li>
|
| 279 |
-
<li><a href="#ml-20" class="topic-link" data-topic="ml-20">ML-20. t-SNE</a></li>
|
| 280 |
-
<li><a href="#ml-21" class="topic-link" data-topic="ml-21">ML-21. Autoencoders</a></li>
|
| 281 |
</ul>
|
| 282 |
</div>
|
| 283 |
|
| 284 |
<div class="module" data-subject="machine-learning" style="display: none;">
|
| 285 |
<h4 class="module-title">Reinforcement Learning</h4>
|
| 286 |
<ul class="topic-list">
|
| 287 |
-
<li><a href="#ml-22" class="topic-link" data-topic="ml-22">ML-22. Q-Learning</a></li>
|
| 288 |
-
<li><a href="#ml-23" class="topic-link" data-topic="ml-23">ML-23. Deep Q-Networks</a></li>
|
| 289 |
-
<li><a href="#ml-24" class="topic-link" data-topic="ml-24">ML-24. Policy Gradient</a></li>
|
| 290 |
</ul>
|
| 291 |
</div>
|
| 292 |
|
| 293 |
<div class="module" data-subject="machine-learning" style="display: none;">
|
| 294 |
<h4 class="module-title">Model Evaluation & Optimization</h4>
|
| 295 |
<ul class="topic-list">
|
| 296 |
-
<li><a href="#ml-25" class="topic-link" data-topic="ml-25">ML-25. Cross-Validation</a></li>
|
| 297 |
-
<li><a href="#ml-26" class="topic-link" data-topic="ml-26">ML-26. GridSearch & RandomSearch</a></li>
|
| 298 |
-
<li><a href="#ml-27" class="topic-link" data-topic="ml-27">ML-27. Hyperparameter Tuning</a></li>
|
| 299 |
-
<li><a href="#ml-28" class="topic-link" data-topic="ml-28">ML-28. Model Evaluation Metrics</a></li>
|
| 300 |
-
<li><a href="#ml-29" class="topic-link" data-topic="ml-29">ML-29. Regularization</a></li>
|
| 301 |
-
<li><a href="#ml-30" class="topic-link" data-topic="ml-30">ML-30. Bias-Variance Tradeoff</a></li>
|
| 302 |
</ul>
|
| 303 |
</div>
|
| 304 |
|
| 305 |
<div class="module" data-subject="machine-learning" style="display: none;">
|
| 306 |
<h4 class="module-title">Advanced Topics</h4>
|
| 307 |
<ul class="topic-list">
|
| 308 |
-
<li><a href="#ml-31" class="topic-link" data-topic="ml-31">ML-31. Ensemble Methods</a></li>
|
| 309 |
-
<li><a href="#ml-32" class="topic-link" data-topic="ml-32">ML-32. Feature Engineering</a></li>
|
| 310 |
-
<li><a href="#ml-33" class="topic-link" data-topic="ml-33">ML-33. Imbalanced Data</a></li>
|
| 311 |
-
<li><a href="#ml-34" class="topic-link" data-topic="ml-34">ML-34. Time Series Analysis</a></li>
|
| 312 |
-
<li><a href="#ml-35" class="topic-link" data-topic="ml-35">ML-35. Anomaly Detection</a></li>
|
| 313 |
-
<li><a href="#ml-36" class="topic-link" data-topic="ml-36">ML-36. Transfer Learning</a></li>
|
| 314 |
-
<li><a href="#ml-37" class="topic-link" data-topic="ml-37">ML-37. Fine-tuning Models</a></li>
|
| 315 |
-
<li><a href="#ml-38" class="topic-link" data-topic="ml-38">ML-38. Model Interpretability</a></li>
|
| 316 |
-
<li><a href="#ml-39" class="topic-link" data-topic="ml-39">ML-39. Optimization Algorithms</a></li>
|
| 317 |
-
<li><a href="#ml-40" class="topic-link" data-topic="ml-40">ML-40. Batch Norm & Dropout</a></li>
|
| 318 |
</ul>
|
| 319 |
</div>
|
| 320 |
</div>
|
|
@@ -7634,7 +7634,7 @@
|
|
| 7634 |
<!-- MACHINE LEARNING ALGORITHMS START HERE -->
|
| 7635 |
|
| 7636 |
<!-- ML-1: Linear Regression -->
|
| 7637 |
-
<section class="topic-section ml-section" id="ml-1" data-subject="machine-learning" style="display: none;">
|
| 7638 |
<div class="topic-header">
|
| 7639 |
<span class="topic-number ml-regression">ML Algorithm 1</span>
|
| 7640 |
<h2>📈 Linear Regression</h2>
|
|
@@ -7891,7 +7891,7 @@
|
|
| 7891 |
</section>
|
| 7892 |
|
| 7893 |
<!-- ML-8: K-Nearest Neighbors -->
|
| 7894 |
-
<section class="topic-section ml-section" id="ml-8" data-subject="machine-learning" style="display: none;">
|
| 7895 |
<div class="topic-header">
|
| 7896 |
<span class="topic-number ml-classification">ML Algorithm 8</span>
|
| 7897 |
<h2>🎯 K-Nearest Neighbors (KNN)</h2>
|
|
@@ -8131,7 +8131,7 @@
|
|
| 8131 |
</section>
|
| 8132 |
|
| 8133 |
<!-- ML-10: Decision Trees -->
|
| 8134 |
-
<section class="topic-section ml-section" id="ml-10" data-subject="machine-learning" style="display: none;">
|
| 8135 |
<div class="topic-header">
|
| 8136 |
<span class="topic-number ml-classification">ML Algorithm 10</span>
|
| 8137 |
<h2>🌳 Decision Trees</h2>
|
|
@@ -8350,7 +8350,7 @@
|
|
| 8350 |
</section>
|
| 8351 |
|
| 8352 |
<!-- ML-15: K-Means Clustering -->
|
| 8353 |
-
<section class="topic-section ml-section" id="ml-15" data-subject="machine-learning" style="display: none;">
|
| 8354 |
<div class="topic-header">
|
| 8355 |
<span class="topic-number ml-clustering">ML Algorithm 15</span>
|
| 8356 |
<h2>🎯 K-Means Clustering</h2>
|
|
@@ -8572,7 +8572,7 @@
|
|
| 8572 |
</section>
|
| 8573 |
|
| 8574 |
<!-- ML-25: Cross-Validation -->
|
| 8575 |
-
<section class="topic-section ml-section" id="ml-25" data-subject="machine-learning" style="display: none;">
|
| 8576 |
<div class="topic-header">
|
| 8577 |
<span class="topic-number ml-advanced">ML Algorithm 25</span>
|
| 8578 |
<h2>🔄 Cross-Validation (K-Fold)</h2>
|
|
@@ -8779,7 +8779,7 @@
|
|
| 8779 |
</section>
|
| 8780 |
|
| 8781 |
<!-- ML Algorithm 2: Polynomial Regression -->
|
| 8782 |
-
<section class="topic-section ml-section" id="ml-2" data-subject="machine-learning" style="display: none;">
|
| 8783 |
<div class="topic-header">
|
| 8784 |
<span class="topic-number ml-regression">ML Algorithm 2</span>
|
| 8785 |
<h2>📈 Polynomial Regression</h2>
|
|
@@ -8789,96 +8789,15 @@
|
|
| 8789 |
<h3>📚 What is Polynomial Regression?</h3>
|
| 8790 |
<p>Polynomial regression extends linear regression by adding polynomial terms (x², x³, etc.) to capture non-linear, curved relationships in data.</p>
|
| 8791 |
<p><strong>Analogy:</strong> When a straight line won't fit your data (like trajectory of a thrown ball), use a curved line instead!</p>
|
|
|
|
| 8792 |
</div>
|
| 8793 |
|
| 8794 |
-
<div class="
|
| 8795 |
-
<h3
|
| 8796 |
-
|
| 8797 |
-
|
| 8798 |
-
<
|
| 8799 |
-
<p
|
| 8800 |
-
</div>
|
| 8801 |
-
|
| 8802 |
-
<div class="example-solution">
|
| 8803 |
-
<h4>Solution:</h4>
|
| 8804 |
-
|
| 8805 |
-
<div class="solution-step">
|
| 8806 |
-
<div class="step-number">Step 1:</div>
|
| 8807 |
-
<div class="step-content">
|
| 8808 |
-
<p class="step-description">Set Up Polynomial Model</p>
|
| 8809 |
-
<div class="step-work">
|
| 8810 |
-
<code>y = β₀ + β₁x + β₂x²<br>
|
| 8811 |
-
Where x = temperature, y = sales<br>
|
| 8812 |
-
Need to find β₀, β₁, β₂</code>
|
| 8813 |
-
</div>
|
| 8814 |
-
</div>
|
| 8815 |
-
</div>
|
| 8816 |
-
|
| 8817 |
-
<div class="solution-step">
|
| 8818 |
-
<div class="step-number">Step 2:</div>
|
| 8819 |
-
<div class="step-content">
|
| 8820 |
-
<p class="step-description">Create Design Matrix</p>
|
| 8821 |
-
<div class="step-work">
|
| 8822 |
-
<code>x | x² | y<br>
|
| 8823 |
-
10 | 100 | 2<br>
|
| 8824 |
-
15 | 225 | 5<br>
|
| 8825 |
-
20 | 400 | 12<br>
|
| 8826 |
-
25 | 625 | 22<br>
|
| 8827 |
-
30 | 900 | 35</code>
|
| 8828 |
-
</div>
|
| 8829 |
-
</div>
|
| 8830 |
-
</div>
|
| 8831 |
-
|
| 8832 |
-
<div class="solution-step">
|
| 8833 |
-
<div class="step-number">Step 3:</div>
|
| 8834 |
-
<div class="step-content">
|
| 8835 |
-
<p class="step-description">Solve Using Normal Equations (simplified)</p>
|
| 8836 |
-
<div class="step-work">
|
| 8837 |
-
<code>Using least squares: β = (XᵀX)⁻¹Xᵀy<br>
|
| 8838 |
-
Result: β₀ = 15, β₁ = -2, β₂ = 0.06</code>
|
| 8839 |
-
</div>
|
| 8840 |
-
</div>
|
| 8841 |
-
</div>
|
| 8842 |
-
|
| 8843 |
-
<div class="solution-step">
|
| 8844 |
-
<div class="step-number">Step 4:</div>
|
| 8845 |
-
<div class="step-content">
|
| 8846 |
-
<p class="step-description">Write Equation</p>
|
| 8847 |
-
<div class="step-work">
|
| 8848 |
-
<code>y = 15 - 2x + 0.06x²</code>
|
| 8849 |
-
</div>
|
| 8850 |
-
</div>
|
| 8851 |
-
</div>
|
| 8852 |
-
|
| 8853 |
-
<div class="solution-step">
|
| 8854 |
-
<div class="step-number">Step 5:</div>
|
| 8855 |
-
<div class="step-content">
|
| 8856 |
-
<p class="step-description">Predict at x = 27°C</p>
|
| 8857 |
-
<div class="step-work">
|
| 8858 |
-
<code>y = 15 - 2(27) + 0.06(27)²<br>
|
| 8859 |
-
y = 15 - 54 + 0.06(729)<br>
|
| 8860 |
-
y = 15 - 54 + 43.74 = 4.74<br>
|
| 8861 |
-
But wait! Let me recalculate properly...<br>
|
| 8862 |
-
Actual better fit: y = 0.06x² - 1.4x + 11<br>
|
| 8863 |
-
y = 0.06(729) - 1.4(27) + 11<br>
|
| 8864 |
-
y = 43.74 - 37.8 + 11 = 16.94</code>
|
| 8865 |
-
</div>
|
| 8866 |
-
</div>
|
| 8867 |
-
</div>
|
| 8868 |
-
|
| 8869 |
-
<div class="final-answer">
|
| 8870 |
-
<strong>✓ Final Prediction:</strong>
|
| 8871 |
-
<span class="answer-highlight">Sales at 27°C = $1,694</span>
|
| 8872 |
-
</div>
|
| 8873 |
-
</div>
|
| 8874 |
-
|
| 8875 |
-
<div class="practice-problems">
|
| 8876 |
-
<h4>💪 Practice Problems:</h4>
|
| 8877 |
-
<ol>
|
| 8878 |
-
<li>Predict sales at 22°C using the equation</li>
|
| 8879 |
-
<li>Why use polynomial instead of linear here?</li>
|
| 8880 |
-
<li>What degree polynomial would you recommend?</li>
|
| 8881 |
-
</ol>
|
| 8882 |
</div>
|
| 8883 |
</div>
|
| 8884 |
|
|
@@ -8890,23 +8809,14 @@
|
|
| 8890 |
import numpy as np<br><br>
|
| 8891 |
X = np.array([10, 15, 20, 25, 30]).reshape(-1, 1)<br>
|
| 8892 |
y = np.array([2, 5, 12, 22, 35])<br><br>
|
| 8893 |
-
# Create polynomial features (degree 2)<br>
|
| 8894 |
poly = PolynomialFeatures(degree=2)<br>
|
| 8895 |
-
X_poly = poly.fit_transform(X)<br
|
| 8896 |
-
|
| 8897 |
-
model = LinearRegression()<br>
|
| 8898 |
-
model.fit(X_poly, y)<br><br>
|
| 8899 |
-
# Predict<br>
|
| 8900 |
X_new = poly.transform([[27]])<br>
|
| 8901 |
-
print(f"
|
| 8902 |
</div>
|
| 8903 |
</div>
|
| 8904 |
|
| 8905 |
-
<div class="content-card">
|
| 8906 |
-
<h3>📊 Interactive Visualization</h3>
|
| 8907 |
-
<canvas id="canvas-ml-2" width="700" height="400"></canvas>
|
| 8908 |
-
</div>
|
| 8909 |
-
|
| 8910 |
<div class="summary-card">
|
| 8911 |
<h3>🎯 Key Takeaways</h3>
|
| 8912 |
<ul>
|
|
@@ -8919,7 +8829,54 @@
|
|
| 8919 |
</section>
|
| 8920 |
|
| 8921 |
<!-- ML Algorithm 3: Ridge Regression -->
|
| 8922 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8923 |
<div class="topic-header">
|
| 8924 |
<span class="topic-number ml-regression">ML Algorithm 3</span>
|
| 8925 |
<h2>🎯 Ridge Regression (L2 Regularization)</h2>
|
|
@@ -8981,7 +8938,7 @@
|
|
| 8981 |
</section>
|
| 8982 |
|
| 8983 |
<!-- ML Algorithm 4: Lasso Regression -->
|
| 8984 |
-
<section class="topic-section ml-section" id="ml-4" data-subject="machine-learning" style="display: none;">
|
| 8985 |
<div class="topic-header">
|
| 8986 |
<span class="topic-number ml-regression">ML Algorithm 4</span>
|
| 8987 |
<h2>🎯 Lasso Regression (L1 Regularization)</h2>
|
|
@@ -9049,7 +9006,7 @@
|
|
| 9049 |
</section>
|
| 9050 |
|
| 9051 |
<!-- ML Algorithm 5-7: Elastic Net, SVR, Logistic Regression -->
|
| 9052 |
-
<section class="topic-section ml-section" id="ml-5" data-subject="machine-learning" style="display: none;">
|
| 9053 |
<div class="topic-header">
|
| 9054 |
<span class="topic-number ml-regression">ML Algorithm 5</span>
|
| 9055 |
<h2>⚖️ Elastic Net</h2>
|
|
@@ -9074,7 +9031,7 @@
|
|
| 9074 |
</div>
|
| 9075 |
</section>
|
| 9076 |
|
| 9077 |
-
<section class="topic-section ml-section" id="ml-6" data-subject="machine-learning" style="display: none;">
|
| 9078 |
<div class="topic-header">
|
| 9079 |
<span class="topic-number ml-regression">ML Algorithm 6</span>
|
| 9080 |
<h2>📉 Support Vector Regression (SVR)</h2>
|
|
@@ -9099,7 +9056,7 @@
|
|
| 9099 |
</div>
|
| 9100 |
</section>
|
| 9101 |
|
| 9102 |
-
<section class="topic-section ml-section" id="ml-7" data-subject="machine-learning" style="display: none;">
|
| 9103 |
<div class="topic-header">
|
| 9104 |
<span class="topic-number ml-classification">ML Algorithm 7</span>
|
| 9105 |
<h2>🎯 Logistic Regression</h2>
|
|
@@ -9124,7 +9081,7 @@
|
|
| 9124 |
</div>
|
| 9125 |
</section>
|
| 9126 |
|
| 9127 |
-
<section class="topic-section ml-section" id="ml-9" data-subject="machine-learning" style="display: none;">
|
| 9128 |
<div class="topic-header">
|
| 9129 |
<span class="topic-number ml-classification">ML Algorithm 9</span>
|
| 9130 |
<h2>🎯 Support Vector Machines (SVM)</h2>
|
|
@@ -9153,7 +9110,7 @@
|
|
| 9153 |
</div>
|
| 9154 |
</section>
|
| 9155 |
|
| 9156 |
-
<section class="topic-section ml-section" id="ml-11" data-subject="machine-learning" style="display: none;">
|
| 9157 |
<div class="topic-header">
|
| 9158 |
<span class="topic-number ml-classification">ML Algorithm 11</span>
|
| 9159 |
<h2>📊 Naive Bayes</h2>
|
|
@@ -9178,7 +9135,7 @@
|
|
| 9178 |
</div>
|
| 9179 |
</section>
|
| 9180 |
|
| 9181 |
-
<section class="topic-section ml-section" id="ml-12" data-subject="machine-learning" style="display: none;">
|
| 9182 |
<div class="topic-header">
|
| 9183 |
<span class="topic-number ml-classification">ML Algorithm 12</span>
|
| 9184 |
<h2>🌲 Random Forest</h2>
|
|
@@ -9207,7 +9164,7 @@
|
|
| 9207 |
</div>
|
| 9208 |
</section>
|
| 9209 |
|
| 9210 |
-
<section class="topic-section ml-section" id="ml-13" data-subject="machine-learning" style="display: none;">
|
| 9211 |
<div class="topic-header">
|
| 9212 |
<span class="topic-number ml-classification">ML Algorithm 13</span>
|
| 9213 |
<h2>🚀 Gradient Boosting (XGBoost)</h2>
|
|
@@ -9236,7 +9193,7 @@
|
|
| 9236 |
</div>
|
| 9237 |
</section>
|
| 9238 |
|
| 9239 |
-
<section class="topic-section ml-section" id="ml-14" data-subject="machine-learning" style="display: none;">
|
| 9240 |
<div class="topic-header">
|
| 9241 |
<span class="topic-number ml-classification">ML Algorithm 14</span>
|
| 9242 |
<h2>🧠 Neural Networks (Deep Learning Basics)</h2>
|
|
@@ -9265,7 +9222,7 @@
|
|
| 9265 |
</div>
|
| 9266 |
</section>
|
| 9267 |
|
| 9268 |
-
<section class="topic-section ml-section" id="ml-16" data-subject="machine-learning" style="display: none;">
|
| 9269 |
<div class="topic-header">
|
| 9270 |
<span class="topic-number ml-clustering">ML Algorithm 16</span>
|
| 9271 |
<h2>🌳 Hierarchical Clustering</h2>
|
|
@@ -9283,7 +9240,7 @@
|
|
| 9283 |
</div>
|
| 9284 |
</section>
|
| 9285 |
|
| 9286 |
-
<section class="topic-section ml-section" id="ml-17" data-subject="machine-learning" style="display: none;">
|
| 9287 |
<div class="topic-header">
|
| 9288 |
<span class="topic-number ml-clustering">ML Algorithm 17</span>
|
| 9289 |
<h2>📍 DBSCAN</h2>
|
|
@@ -9301,7 +9258,7 @@
|
|
| 9301 |
</div>
|
| 9302 |
</section>
|
| 9303 |
|
| 9304 |
-
<section class="topic-section ml-section" id="ml-18" data-subject="machine-learning" style="display: none;">
|
| 9305 |
<div class="topic-header">
|
| 9306 |
<span class="topic-number ml-clustering">ML Algorithm 18</span>
|
| 9307 |
<h2>📊 Gaussian Mixture Models (GMM)</h2>
|
|
@@ -9319,7 +9276,7 @@
|
|
| 9319 |
</div>
|
| 9320 |
</section>
|
| 9321 |
|
| 9322 |
-
<section class="topic-section ml-section" id="ml-19" data-subject="machine-learning" style="display: none;">
|
| 9323 |
<div class="topic-header">
|
| 9324 |
<span class="topic-number ml-reduction">ML Algorithm 19</span>
|
| 9325 |
<h2>🎯 Principal Component Analysis (PCA)</h2>
|
|
@@ -9337,7 +9294,7 @@
|
|
| 9337 |
</div>
|
| 9338 |
</section>
|
| 9339 |
|
| 9340 |
-
<section class="topic-section ml-section" id="ml-20" data-subject="machine-learning" style="display: none;">
|
| 9341 |
<div class="topic-header">
|
| 9342 |
<span class="topic-number ml-reduction">ML Algorithm 20</span>
|
| 9343 |
<h2>🎨 t-SNE</h2>
|
|
@@ -9355,7 +9312,7 @@
|
|
| 9355 |
</div>
|
| 9356 |
</section>
|
| 9357 |
|
| 9358 |
-
<section class="topic-section ml-section" id="ml-21" data-subject="machine-learning" style="display: none;">
|
| 9359 |
<div class="topic-header">
|
| 9360 |
<span class="topic-number ml-reduction">ML Algorithm 21</span>
|
| 9361 |
<h2>🔄 Autoencoders</h2>
|
|
@@ -9373,67 +9330,673 @@
|
|
| 9373 |
</div>
|
| 9374 |
</section>
|
| 9375 |
|
| 9376 |
-
<section class="topic-section ml-section" id="ml-22" data-subject="machine-learning" style="display: none;">
|
| 9377 |
<div class="topic-header">
|
| 9378 |
<span class="topic-number ml-reinforcement">ML Algorithm 22</span>
|
| 9379 |
<h2>🎮 Q-Learning</h2>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9380 |
</div>
|
|
|
|
| 9381 |
<div class="content-card">
|
| 9382 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9383 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9384 |
<div class="summary-card">
|
| 9385 |
<h3>🎯 Key Takeaways</h3>
|
| 9386 |
<ul>
|
| 9387 |
-
<li>Learns optimal policy through rewards</li>
|
| 9388 |
-
<li>Q(s,a) = expected future reward</li>
|
| 9389 |
-
<li>Update rule:
|
|
|
|
| 9390 |
</ul>
|
| 9391 |
</div>
|
| 9392 |
</section>
|
| 9393 |
|
| 9394 |
-
<section class="topic-section ml-section" id="ml-23" data-subject="machine-learning" style="display: none;">
|
| 9395 |
<div class="topic-header">
|
| 9396 |
<span class="topic-number ml-reinforcement">ML Algorithm 23</span>
|
| 9397 |
<h2>🧠 Deep Q-Networks (DQN)</h2>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9398 |
</div>
|
|
|
|
| 9399 |
<div class="content-card">
|
| 9400 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9401 |
</div>
|
|
|
|
| 9402 |
<div class="summary-card">
|
| 9403 |
<h3>🎯 Key Takeaways</h3>
|
| 9404 |
<ul>
|
| 9405 |
-
<li>Neural network
|
| 9406 |
-
<li>Experience replay
|
| 9407 |
-
<li>
|
|
|
|
| 9408 |
</ul>
|
| 9409 |
</div>
|
| 9410 |
</section>
|
| 9411 |
|
| 9412 |
-
<section class="topic-section ml-section" id="ml-24" data-subject="machine-learning" style="display: none;">
|
| 9413 |
<div class="topic-header">
|
| 9414 |
<span class="topic-number ml-reinforcement">ML Algorithm 24</span>
|
| 9415 |
<h2>🎯 Policy Gradient Methods</h2>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9416 |
</div>
|
|
|
|
| 9417 |
<div class="content-card">
|
| 9418 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9419 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9420 |
<div class="summary-card">
|
| 9421 |
<h3>🎯 Key Takeaways</h3>
|
| 9422 |
<ul>
|
| 9423 |
-
<li>
|
| 9424 |
-
<li>Works with continuous action spaces</li>
|
| 9425 |
-
<li>REINFORCE
|
|
|
|
|
|
|
| 9426 |
</ul>
|
| 9427 |
</div>
|
| 9428 |
</section>
|
| 9429 |
|
| 9430 |
-
<section class="topic-section ml-section" id="ml-26" data-subject="machine-learning" style="display: none;">
|
| 9431 |
<div class="topic-header">
|
| 9432 |
<span class="topic-number ml-advanced">ML Algorithm 26</span>
|
| 9433 |
<h2>🔍 GridSearch & RandomSearch</h2>
|
|
|
|
| 9434 |
</div>
|
| 9435 |
<div class="content-card">
|
| 9436 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9437 |
</div>
|
| 9438 |
<div class="summary-card">
|
| 9439 |
<h3>🎯 Key Takeaways</h3>
|
|
@@ -9441,11 +10004,12 @@
|
|
| 9441 |
<li>GridSearch: exhaustive, guarantees best in grid</li>
|
| 9442 |
<li>RandomSearch: faster, often finds good solutions</li>
|
| 9443 |
<li>Always use cross-validation for tuning</li>
|
|
|
|
| 9444 |
</ul>
|
| 9445 |
</div>
|
| 9446 |
</section>
|
| 9447 |
|
| 9448 |
-
<section class="topic-section ml-section" id="ml-27" data-subject="machine-learning" style="display: none;">
|
| 9449 |
<div class="topic-header">
|
| 9450 |
<span class="topic-number ml-advanced">ML Algorithm 27</span>
|
| 9451 |
<h2>⚙️ Hyperparameter Tuning</h2>
|
|
@@ -9463,7 +10027,7 @@
|
|
| 9463 |
</div>
|
| 9464 |
</section>
|
| 9465 |
|
| 9466 |
-
<section class="topic-section ml-section" id="ml-28" data-subject="machine-learning" style="display: none;">
|
| 9467 |
<div class="topic-header">
|
| 9468 |
<span class="topic-number ml-advanced">ML Algorithm 28</span>
|
| 9469 |
<h2>📊 Model Evaluation Metrics</h2>
|
|
@@ -9481,7 +10045,7 @@
|
|
| 9481 |
</div>
|
| 9482 |
</section>
|
| 9483 |
|
| 9484 |
-
<section class="topic-section ml-section" id="ml-29" data-subject="machine-learning" style="display: none;">
|
| 9485 |
<div class="topic-header">
|
| 9486 |
<span class="topic-number ml-advanced">ML Algorithm 29</span>
|
| 9487 |
<h2>🎯 Regularization Techniques</h2>
|
|
@@ -9499,7 +10063,7 @@
|
|
| 9499 |
</div>
|
| 9500 |
</section>
|
| 9501 |
|
| 9502 |
-
<section class="topic-section ml-section" id="ml-30" data-subject="machine-learning" style="display: none;">
|
| 9503 |
<div class="topic-header">
|
| 9504 |
<span class="topic-number ml-advanced">ML Algorithm 30</span>
|
| 9505 |
<h2>⚖️ Bias-Variance Tradeoff</h2>
|
|
@@ -9517,7 +10081,7 @@
|
|
| 9517 |
</div>
|
| 9518 |
</section>
|
| 9519 |
|
| 9520 |
-
<section class="topic-section ml-section" id="ml-31" data-subject="machine-learning" style="display: none;">
|
| 9521 |
<div class="topic-header">
|
| 9522 |
<span class="topic-number ml-advanced">ML Algorithm 31</span>
|
| 9523 |
<h2>🎭 Ensemble Methods</h2>
|
|
@@ -9535,7 +10099,7 @@
|
|
| 9535 |
</div>
|
| 9536 |
</section>
|
| 9537 |
|
| 9538 |
-
<section class="topic-section ml-section" id="ml-32" data-subject="machine-learning" style="display: none;">
|
| 9539 |
<div class="topic-header">
|
| 9540 |
<span class="topic-number ml-advanced">ML Algorithm 32</span>
|
| 9541 |
<h2>🔧 Feature Engineering</h2>
|
|
@@ -9553,7 +10117,7 @@
|
|
| 9553 |
</div>
|
| 9554 |
</section>
|
| 9555 |
|
| 9556 |
-
<section class="topic-section ml-section" id="ml-33" data-subject="machine-learning" style="display: none;">
|
| 9557 |
<div class="topic-header">
|
| 9558 |
<span class="topic-number ml-advanced">ML Algorithm 33</span>
|
| 9559 |
<h2>⚖️ Handling Imbalanced Data</h2>
|
|
@@ -9571,7 +10135,7 @@
|
|
| 9571 |
</div>
|
| 9572 |
</section>
|
| 9573 |
|
| 9574 |
-
<section class="topic-section ml-section" id="ml-34" data-subject="machine-learning" style="display: none;">
|
| 9575 |
<div class="topic-header">
|
| 9576 |
<span class="topic-number ml-advanced">ML Algorithm 34</span>
|
| 9577 |
<h2>📈 Time Series Analysis</h2>
|
|
@@ -9589,7 +10153,7 @@
|
|
| 9589 |
</div>
|
| 9590 |
</section>
|
| 9591 |
|
| 9592 |
-
<section class="topic-section ml-section" id="ml-35" data-subject="machine-learning" style="display: none;">
|
| 9593 |
<div class="topic-header">
|
| 9594 |
<span class="topic-number ml-advanced">ML Algorithm 35</span>
|
| 9595 |
<h2>🚨 Anomaly Detection</h2>
|
|
@@ -9607,7 +10171,7 @@
|
|
| 9607 |
</div>
|
| 9608 |
</section>
|
| 9609 |
|
| 9610 |
-
<section class="topic-section ml-section" id="ml-36" data-subject="machine-learning" style="display: none;">
|
| 9611 |
<div class="topic-header">
|
| 9612 |
<span class="topic-number ml-advanced">ML Algorithm 36</span>
|
| 9613 |
<h2>🔄 Transfer Learning</h2>
|
|
@@ -9625,7 +10189,7 @@
|
|
| 9625 |
</div>
|
| 9626 |
</section>
|
| 9627 |
|
| 9628 |
-
<section class="topic-section ml-section" id="ml-37" data-subject="machine-learning" style="display: none;">
|
| 9629 |
<div class="topic-header">
|
| 9630 |
<span class="topic-number ml-advanced">ML Algorithm 37</span>
|
| 9631 |
<h2>🎯 Fine-Tuning Pre-trained Models</h2>
|
|
@@ -9643,7 +10207,7 @@
|
|
| 9643 |
</div>
|
| 9644 |
</section>
|
| 9645 |
|
| 9646 |
-
<section class="topic-section ml-section" id="ml-38" data-subject="machine-learning" style="display: none;">
|
| 9647 |
<div class="topic-header">
|
| 9648 |
<span class="topic-number ml-advanced">ML Algorithm 38</span>
|
| 9649 |
<h2>🔍 Model Interpretability & SHAP</h2>
|
|
@@ -9661,7 +10225,7 @@
|
|
| 9661 |
</div>
|
| 9662 |
</section>
|
| 9663 |
|
| 9664 |
-
<section class="topic-section ml-section" id="ml-39" data-subject="machine-learning" style="display: none;">
|
| 9665 |
<div class="topic-header">
|
| 9666 |
<span class="topic-number ml-advanced">ML Algorithm 39</span>
|
| 9667 |
<h2>⚡ Optimization Algorithms (Adam, RMSprop)</h2>
|
|
@@ -9679,7 +10243,7 @@
|
|
| 9679 |
</div>
|
| 9680 |
</section>
|
| 9681 |
|
| 9682 |
-
<section class="topic-section ml-section" id="ml-40" data-subject="machine-learning" style="display: none;">
|
| 9683 |
<div class="topic-header">
|
| 9684 |
<span class="topic-number ml-advanced">ML Algorithm 40</span>
|
| 9685 |
<h2>🎯 Batch Normalization & Dropout</h2>
|
|
|
|
| 239 |
<div class="module" data-subject="machine-learning" style="display: none;">
|
| 240 |
<h4 class="module-title">Supervised Learning - Regression</h4>
|
| 241 |
<ul class="topic-list">
|
| 242 |
+
<li><a href="#ml-topic-1" class="topic-link" data-topic="ml-topic-1">ML-1. Linear Regression</a></li>
|
| 243 |
+
<li><a href="#ml-topic-2" class="topic-link" data-topic="ml-topic-2">ML-2. Polynomial Regression</a></li>
|
| 244 |
+
<li><a href="#ml-topic-3" class="topic-link" data-topic="ml-topic-3">ML-3. Ridge Regression (L2)</a></li>
|
| 245 |
+
<li><a href="#ml-topic-4" class="topic-link" data-topic="ml-topic-4">ML-4. Lasso Regression (L1)</a></li>
|
| 246 |
+
<li><a href="#ml-topic-5" class="topic-link" data-topic="ml-topic-5">ML-5. Elastic Net</a></li>
|
| 247 |
+
<li><a href="#ml-topic-6" class="topic-link" data-topic="ml-topic-6">ML-6. Support Vector Regression</a></li>
|
| 248 |
</ul>
|
| 249 |
</div>
|
| 250 |
|
| 251 |
<div class="module" data-subject="machine-learning" style="display: none;">
|
| 252 |
<h4 class="module-title">Supervised Learning - Classification</h4>
|
| 253 |
<ul class="topic-list">
|
| 254 |
+
<li><a href="#ml-topic-7" class="topic-link" data-topic="ml-topic-7">ML-7. Logistic Regression</a></li>
|
| 255 |
+
<li><a href="#ml-topic-8" class="topic-link" data-topic="ml-topic-8">ML-8. K-Nearest Neighbors</a></li>
|
| 256 |
+
<li><a href="#ml-topic-9" class="topic-link" data-topic="ml-topic-9">ML-9. Support Vector Machines</a></li>
|
| 257 |
+
<li><a href="#ml-topic-10" class="topic-link" data-topic="ml-topic-10">ML-10. Decision Trees</a></li>
|
| 258 |
+
<li><a href="#ml-topic-11" class="topic-link" data-topic="ml-topic-11">ML-11. Naive Bayes</a></li>
|
| 259 |
+
<li><a href="#ml-topic-12" class="topic-link" data-topic="ml-topic-12">ML-12. Random Forest</a></li>
|
| 260 |
+
<li><a href="#ml-topic-13" class="topic-link" data-topic="ml-topic-13">ML-13. Gradient Boosting</a></li>
|
| 261 |
+
<li><a href="#ml-topic-14" class="topic-link" data-topic="ml-topic-14">ML-14. Neural Networks</a></li>
|
| 262 |
</ul>
|
| 263 |
</div>
|
| 264 |
|
| 265 |
<div class="module" data-subject="machine-learning" style="display: none;">
|
| 266 |
<h4 class="module-title">Unsupervised - Clustering</h4>
|
| 267 |
<ul class="topic-list">
|
| 268 |
+
<li><a href="#ml-topic-15" class="topic-link" data-topic="ml-topic-15">ML-15. K-Means Clustering</a></li>
|
| 269 |
+
<li><a href="#ml-topic-16" class="topic-link" data-topic="ml-topic-16">ML-16. Hierarchical Clustering</a></li>
|
| 270 |
+
<li><a href="#ml-topic-17" class="topic-link" data-topic="ml-topic-17">ML-17. DBSCAN</a></li>
|
| 271 |
+
<li><a href="#ml-topic-18" class="topic-link" data-topic="ml-topic-18">ML-18. Gaussian Mixture Models</a></li>
|
| 272 |
</ul>
|
| 273 |
</div>
|
| 274 |
|
| 275 |
<div class="module" data-subject="machine-learning" style="display: none;">
|
| 276 |
<h4 class="module-title">Unsupervised - Dim. Reduction</h4>
|
| 277 |
<ul class="topic-list">
|
| 278 |
+
<li><a href="#ml-topic-19" class="topic-link" data-topic="ml-topic-19">ML-19. PCA</a></li>
|
| 279 |
+
<li><a href="#ml-topic-20" class="topic-link" data-topic="ml-topic-20">ML-20. t-SNE</a></li>
|
| 280 |
+
<li><a href="#ml-topic-21" class="topic-link" data-topic="ml-topic-21">ML-21. Autoencoders</a></li>
|
| 281 |
</ul>
|
| 282 |
</div>
|
| 283 |
|
| 284 |
<div class="module" data-subject="machine-learning" style="display: none;">
|
| 285 |
<h4 class="module-title">Reinforcement Learning</h4>
|
| 286 |
<ul class="topic-list">
|
| 287 |
+
<li><a href="#ml-topic-22" class="topic-link" data-topic="ml-topic-22">ML-22. Q-Learning</a></li>
|
| 288 |
+
<li><a href="#ml-topic-23" class="topic-link" data-topic="ml-topic-23">ML-23. Deep Q-Networks</a></li>
|
| 289 |
+
<li><a href="#ml-topic-24" class="topic-link" data-topic="ml-topic-24">ML-24. Policy Gradient</a></li>
|
| 290 |
</ul>
|
| 291 |
</div>
|
| 292 |
|
| 293 |
<div class="module" data-subject="machine-learning" style="display: none;">
|
| 294 |
<h4 class="module-title">Model Evaluation & Optimization</h4>
|
| 295 |
<ul class="topic-list">
|
| 296 |
+
<li><a href="#ml-topic-25" class="topic-link" data-topic="ml-topic-25">ML-25. Cross-Validation</a></li>
|
| 297 |
+
<li><a href="#ml-topic-26" class="topic-link" data-topic="ml-topic-26">ML-26. GridSearch & RandomSearch</a></li>
|
| 298 |
+
<li><a href="#ml-topic-27" class="topic-link" data-topic="ml-topic-27">ML-27. Hyperparameter Tuning</a></li>
|
| 299 |
+
<li><a href="#ml-topic-28" class="topic-link" data-topic="ml-topic-28">ML-28. Model Evaluation Metrics</a></li>
|
| 300 |
+
<li><a href="#ml-topic-29" class="topic-link" data-topic="ml-topic-29">ML-29. Regularization</a></li>
|
| 301 |
+
<li><a href="#ml-topic-30" class="topic-link" data-topic="ml-topic-30">ML-30. Bias-Variance Tradeoff</a></li>
|
| 302 |
</ul>
|
| 303 |
</div>
|
| 304 |
|
| 305 |
<div class="module" data-subject="machine-learning" style="display: none;">
|
| 306 |
<h4 class="module-title">Advanced Topics</h4>
|
| 307 |
<ul class="topic-list">
|
| 308 |
+
<li><a href="#ml-topic-31" class="topic-link" data-topic="ml-topic-31">ML-31. Ensemble Methods</a></li>
|
| 309 |
+
<li><a href="#ml-topic-32" class="topic-link" data-topic="ml-topic-32">ML-32. Feature Engineering</a></li>
|
| 310 |
+
<li><a href="#ml-topic-33" class="topic-link" data-topic="ml-topic-33">ML-33. Imbalanced Data</a></li>
|
| 311 |
+
<li><a href="#ml-topic-34" class="topic-link" data-topic="ml-topic-34">ML-34. Time Series Analysis</a></li>
|
| 312 |
+
<li><a href="#ml-topic-35" class="topic-link" data-topic="ml-topic-35">ML-35. Anomaly Detection</a></li>
|
| 313 |
+
<li><a href="#ml-topic-36" class="topic-link" data-topic="ml-topic-36">ML-36. Transfer Learning</a></li>
|
| 314 |
+
<li><a href="#ml-topic-37" class="topic-link" data-topic="ml-topic-37">ML-37. Fine-tuning Models</a></li>
|
| 315 |
+
<li><a href="#ml-topic-38" class="topic-link" data-topic="ml-topic-38">ML-38. Model Interpretability</a></li>
|
| 316 |
+
<li><a href="#ml-topic-39" class="topic-link" data-topic="ml-topic-39">ML-39. Optimization Algorithms</a></li>
|
| 317 |
+
<li><a href="#ml-topic-40" class="topic-link" data-topic="ml-topic-40">ML-40. Batch Norm & Dropout</a></li>
|
| 318 |
</ul>
|
| 319 |
</div>
|
| 320 |
</div>
|
|
|
|
| 7634 |
<!-- MACHINE LEARNING ALGORITHMS START HERE -->
|
| 7635 |
|
| 7636 |
<!-- ML-1: Linear Regression -->
|
| 7637 |
+
<section class="topic-section ml-section" id="ml-topic-1" data-subject="machine-learning" style="display: none;">
|
| 7638 |
<div class="topic-header">
|
| 7639 |
<span class="topic-number ml-regression">ML Algorithm 1</span>
|
| 7640 |
<h2>📈 Linear Regression</h2>
|
|
|
|
| 7891 |
</section>
|
| 7892 |
|
| 7893 |
<!-- ML-8: K-Nearest Neighbors -->
|
| 7894 |
+
<section class="topic-section ml-section" id="ml-topic-8" data-subject="machine-learning" style="display: none;">
|
| 7895 |
<div class="topic-header">
|
| 7896 |
<span class="topic-number ml-classification">ML Algorithm 8</span>
|
| 7897 |
<h2>🎯 K-Nearest Neighbors (KNN)</h2>
|
|
|
|
| 8131 |
</section>
|
| 8132 |
|
| 8133 |
<!-- ML-10: Decision Trees -->
|
| 8134 |
+
<section class="topic-section ml-section" id="ml-topic-10" data-subject="machine-learning" style="display: none;">
|
| 8135 |
<div class="topic-header">
|
| 8136 |
<span class="topic-number ml-classification">ML Algorithm 10</span>
|
| 8137 |
<h2>🌳 Decision Trees</h2>
|
|
|
|
| 8350 |
</section>
|
| 8351 |
|
| 8352 |
<!-- ML-15: K-Means Clustering -->
|
| 8353 |
+
<section class="topic-section ml-section" id="ml-topic-15" data-subject="machine-learning" style="display: none;">
|
| 8354 |
<div class="topic-header">
|
| 8355 |
<span class="topic-number ml-clustering">ML Algorithm 15</span>
|
| 8356 |
<h2>🎯 K-Means Clustering</h2>
|
|
|
|
| 8572 |
</section>
|
| 8573 |
|
| 8574 |
<!-- ML-25: Cross-Validation -->
|
| 8575 |
+
<section class="topic-section ml-section" id="ml-topic-25" data-subject="machine-learning" style="display: none;">
|
| 8576 |
<div class="topic-header">
|
| 8577 |
<span class="topic-number ml-advanced">ML Algorithm 25</span>
|
| 8578 |
<h2>🔄 Cross-Validation (K-Fold)</h2>
|
|
|
|
| 8779 |
</section>
|
| 8780 |
|
| 8781 |
<!-- ML Algorithm 2: Polynomial Regression -->
|
| 8782 |
+
<section class="topic-section ml-section" id="ml-topic-2" data-subject="machine-learning" style="display: none;">
|
| 8783 |
<div class="topic-header">
|
| 8784 |
<span class="topic-number ml-regression">ML Algorithm 2</span>
|
| 8785 |
<h2>📈 Polynomial Regression</h2>
|
|
|
|
| 8789 |
<h3>📚 What is Polynomial Regression?</h3>
|
| 8790 |
<p>Polynomial regression extends linear regression by adding polynomial terms (x², x³, etc.) to capture non-linear, curved relationships in data.</p>
|
| 8791 |
<p><strong>Analogy:</strong> When a straight line won't fit your data (like trajectory of a thrown ball), use a curved line instead!</p>
|
| 8792 |
+
<p><strong>When to use:</strong> Data shows curved patterns, quadratic relationships, or non-linear trends.</p>
|
| 8793 |
</div>
|
| 8794 |
|
| 8795 |
+
<div class="content-card">
|
| 8796 |
+
<h3>🧮 Mathematics Behind It</h3>
|
| 8797 |
+
<div class="formula-card">
|
| 8798 |
+
<div class="formula-header">Polynomial Equation</div>
|
| 8799 |
+
<div class="formula-main">y = β₀ + β₁x + β₂x² + β₃x³ + ... + βₙxⁿ</div>
|
| 8800 |
+
<p>Still uses linear regression, just with polynomial features!</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8801 |
</div>
|
| 8802 |
</div>
|
| 8803 |
|
|
|
|
| 8809 |
import numpy as np<br><br>
|
| 8810 |
X = np.array([10, 15, 20, 25, 30]).reshape(-1, 1)<br>
|
| 8811 |
y = np.array([2, 5, 12, 22, 35])<br><br>
|
|
|
|
| 8812 |
poly = PolynomialFeatures(degree=2)<br>
|
| 8813 |
+
X_poly = poly.fit_transform(X)<br>
|
| 8814 |
+
model = LinearRegression().fit(X_poly, y)<br><br>
|
|
|
|
|
|
|
|
|
|
| 8815 |
X_new = poly.transform([[27]])<br>
|
| 8816 |
+
print(f"Prediction: ${model.predict(X_new)[0]:.0f}")</code>
|
| 8817 |
</div>
|
| 8818 |
</div>
|
| 8819 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8820 |
<div class="summary-card">
|
| 8821 |
<h3>🎯 Key Takeaways</h3>
|
| 8822 |
<ul>
|
|
|
|
| 8829 |
</section>
|
| 8830 |
|
| 8831 |
<!-- ML Algorithm 3: Ridge Regression -->
|
| 8832 |
+
<!-- ML Algorithm 19: PCA (Additional Content) -->
|
| 8833 |
+
<section class="topic-section ml-section" id="ml-topic-19" data-subject="machine-learning" style="display: none;">
|
| 8834 |
+
<div class="topic-header">
|
| 8835 |
+
<span class="topic-number ml-reduction">ML Algorithm 19</span>
|
| 8836 |
+
<h2>🎯 Principal Component Analysis (PCA)</h2>
|
| 8837 |
+
<p class="topic-subtitle">See Data Science Topic 77 for complete details</p>
|
| 8838 |
+
</div>
|
| 8839 |
+
<div class="summary-card">
|
| 8840 |
+
<h3>🎯 Key Takeaways</h3>
|
| 8841 |
+
<ul>
|
| 8842 |
+
<li>Finds orthogonal directions of maximum variance</li>
|
| 8843 |
+
<li>Standardize features first!</li>
|
| 8844 |
+
<li>Keeps 80-95% variance with fewer dimensions</li>
|
| 8845 |
+
</ul>
|
| 8846 |
+
</div>
|
| 8847 |
+
</section>
|
| 8848 |
+
|
| 8849 |
+
<!-- ML Algorithm 20-24: Remaining Topics -->
|
| 8850 |
+
<section class="topic-section ml-section" id="ml-topic-20" data-subject="machine-learning" style="display: none;">
|
| 8851 |
+
<div class="topic-header">
|
| 8852 |
+
<span class="topic-number ml-reduction">ML Algorithm 20</span>
|
| 8853 |
+
<h2>🎨 t-SNE</h2>
|
| 8854 |
+
</div>
|
| 8855 |
+
<div class="summary-card"><ul><li>Non-linear reduction for visualization (2D/3D)</li></ul></div>
|
| 8856 |
+
</section>
|
| 8857 |
+
|
| 8858 |
+
<section class="topic-section ml-section" id="ml-topic-21" data-subject="machine-learning" style="display: none;">
|
| 8859 |
+
<div class="topic-header"><span class="topic-number ml-reduction">ML Algorithm 21</span><h2>🔄 Autoencoders</h2></div>
|
| 8860 |
+
<div class="summary-card"><ul><li>Neural network for unsupervised learning</li></ul></div>
|
| 8861 |
+
</section>
|
| 8862 |
+
|
| 8863 |
+
<section class="topic-section ml-section" id="ml-topic-22" data-subject="machine-learning" style="display: none;">
|
| 8864 |
+
<div class="topic-header"><span class="topic-number ml-reinforcement">ML Algorithm 22</span><h2>🎮 Q-Learning</h2></div>
|
| 8865 |
+
<div class="summary-card"><ul><li>Learns optimal policy through rewards</li></ul></div>
|
| 8866 |
+
</section>
|
| 8867 |
+
|
| 8868 |
+
<section class="topic-section ml-section" id="ml-topic-23" data-subject="machine-learning" style="display: none;">
|
| 8869 |
+
<div class="topic-header"><span class="topic-number ml-reinforcement">ML Algorithm 23</span><h2>🧠 Deep Q-Networks</h2></div>
|
| 8870 |
+
<div class="summary-card"><ul><li>Neural network approximates Q-values</li></ul></div>
|
| 8871 |
+
</section>
|
| 8872 |
+
|
| 8873 |
+
<section class="topic-section ml-section" id="ml-topic-24" data-subject="machine-learning" style="display: none;">
|
| 8874 |
+
<div class="topic-header"><span class="topic-number ml-reinforcement">ML Algorithm 24</span><h2>🎯 Policy Gradient</h2></div>
|
| 8875 |
+
<div class="summary-card"><ul><li>Optimizes policy directly</li></ul></div>
|
| 8876 |
+
</section>
|
| 8877 |
+
|
| 8878 |
+
<!-- ML Algorithm 3: Ridge Regression -->
|
| 8879 |
+
<section class="topic-section ml-section" id="ml-topic-3" data-subject="machine-learning" style="display: none;">
|
| 8880 |
<div class="topic-header">
|
| 8881 |
<span class="topic-number ml-regression">ML Algorithm 3</span>
|
| 8882 |
<h2>🎯 Ridge Regression (L2 Regularization)</h2>
|
|
|
|
| 8938 |
</section>
|
| 8939 |
|
| 8940 |
<!-- ML Algorithm 4: Lasso Regression -->
|
| 8941 |
+
<section class="topic-section ml-section" id="ml-topic-4" data-subject="machine-learning" style="display: none;">
|
| 8942 |
<div class="topic-header">
|
| 8943 |
<span class="topic-number ml-regression">ML Algorithm 4</span>
|
| 8944 |
<h2>🎯 Lasso Regression (L1 Regularization)</h2>
|
|
|
|
| 9006 |
</section>
|
| 9007 |
|
| 9008 |
<!-- ML Algorithm 5-7: Elastic Net, SVR, Logistic Regression -->
|
| 9009 |
+
<section class="topic-section ml-section" id="ml-topic-5" data-subject="machine-learning" style="display: none;">
|
| 9010 |
<div class="topic-header">
|
| 9011 |
<span class="topic-number ml-regression">ML Algorithm 5</span>
|
| 9012 |
<h2>⚖️ Elastic Net</h2>
|
|
|
|
| 9031 |
</div>
|
| 9032 |
</section>
|
| 9033 |
|
| 9034 |
+
<section class="topic-section ml-section" id="ml-topic-6" data-subject="machine-learning" style="display: none;">
|
| 9035 |
<div class="topic-header">
|
| 9036 |
<span class="topic-number ml-regression">ML Algorithm 6</span>
|
| 9037 |
<h2>📉 Support Vector Regression (SVR)</h2>
|
|
|
|
| 9056 |
</div>
|
| 9057 |
</section>
|
| 9058 |
|
| 9059 |
+
<section class="topic-section ml-section" id="ml-topic-7" data-subject="machine-learning" style="display: none;">
|
| 9060 |
<div class="topic-header">
|
| 9061 |
<span class="topic-number ml-classification">ML Algorithm 7</span>
|
| 9062 |
<h2>🎯 Logistic Regression</h2>
|
|
|
|
| 9081 |
</div>
|
| 9082 |
</section>
|
| 9083 |
|
| 9084 |
+
<section class="topic-section ml-section" id="ml-topic-9" data-subject="machine-learning" style="display: none;">
|
| 9085 |
<div class="topic-header">
|
| 9086 |
<span class="topic-number ml-classification">ML Algorithm 9</span>
|
| 9087 |
<h2>🎯 Support Vector Machines (SVM)</h2>
|
|
|
|
| 9110 |
</div>
|
| 9111 |
</section>
|
| 9112 |
|
| 9113 |
+
<section class="topic-section ml-section" id="ml-topic-11" data-subject="machine-learning" style="display: none;">
|
| 9114 |
<div class="topic-header">
|
| 9115 |
<span class="topic-number ml-classification">ML Algorithm 11</span>
|
| 9116 |
<h2>📊 Naive Bayes</h2>
|
|
|
|
| 9135 |
</div>
|
| 9136 |
</section>
|
| 9137 |
|
| 9138 |
+
<section class="topic-section ml-section" id="ml-topic-12" data-subject="machine-learning" style="display: none;">
|
| 9139 |
<div class="topic-header">
|
| 9140 |
<span class="topic-number ml-classification">ML Algorithm 12</span>
|
| 9141 |
<h2>🌲 Random Forest</h2>
|
|
|
|
| 9164 |
</div>
|
| 9165 |
</section>
|
| 9166 |
|
| 9167 |
+
<section class="topic-section ml-section" id="ml-topic-13" data-subject="machine-learning" style="display: none;">
|
| 9168 |
<div class="topic-header">
|
| 9169 |
<span class="topic-number ml-classification">ML Algorithm 13</span>
|
| 9170 |
<h2>🚀 Gradient Boosting (XGBoost)</h2>
|
|
|
|
| 9193 |
</div>
|
| 9194 |
</section>
|
| 9195 |
|
| 9196 |
+
<section class="topic-section ml-section" id="ml-topic-14" data-subject="machine-learning" style="display: none;">
|
| 9197 |
<div class="topic-header">
|
| 9198 |
<span class="topic-number ml-classification">ML Algorithm 14</span>
|
| 9199 |
<h2>🧠 Neural Networks (Deep Learning Basics)</h2>
|
|
|
|
| 9222 |
</div>
|
| 9223 |
</section>
|
| 9224 |
|
| 9225 |
+
<section class="topic-section ml-section" id="ml-topic-16" data-subject="machine-learning" style="display: none;">
|
| 9226 |
<div class="topic-header">
|
| 9227 |
<span class="topic-number ml-clustering">ML Algorithm 16</span>
|
| 9228 |
<h2>🌳 Hierarchical Clustering</h2>
|
|
|
|
| 9240 |
</div>
|
| 9241 |
</section>
|
| 9242 |
|
| 9243 |
+
<section class="topic-section ml-section" id="ml-topic-17" data-subject="machine-learning" style="display: none;">
|
| 9244 |
<div class="topic-header">
|
| 9245 |
<span class="topic-number ml-clustering">ML Algorithm 17</span>
|
| 9246 |
<h2>📍 DBSCAN</h2>
|
|
|
|
| 9258 |
</div>
|
| 9259 |
</section>
|
| 9260 |
|
| 9261 |
+
<section class="topic-section ml-section" id="ml-topic-18" data-subject="machine-learning" style="display: none;">
|
| 9262 |
<div class="topic-header">
|
| 9263 |
<span class="topic-number ml-clustering">ML Algorithm 18</span>
|
| 9264 |
<h2>📊 Gaussian Mixture Models (GMM)</h2>
|
|
|
|
| 9276 |
</div>
|
| 9277 |
</section>
|
| 9278 |
|
| 9279 |
+
<section class="topic-section ml-section" id="ml-topic-19" data-subject="machine-learning" style="display: none;">
|
| 9280 |
<div class="topic-header">
|
| 9281 |
<span class="topic-number ml-reduction">ML Algorithm 19</span>
|
| 9282 |
<h2>🎯 Principal Component Analysis (PCA)</h2>
|
|
|
|
| 9294 |
</div>
|
| 9295 |
</section>
|
| 9296 |
|
| 9297 |
+
<section class="topic-section ml-section" id="ml-topic-20" data-subject="machine-learning" style="display: none;">
|
| 9298 |
<div class="topic-header">
|
| 9299 |
<span class="topic-number ml-reduction">ML Algorithm 20</span>
|
| 9300 |
<h2>🎨 t-SNE</h2>
|
|
|
|
| 9312 |
</div>
|
| 9313 |
</section>
|
| 9314 |
|
| 9315 |
+
<section class="topic-section ml-section" id="ml-topic-21" data-subject="machine-learning" style="display: none;">
|
| 9316 |
<div class="topic-header">
|
| 9317 |
<span class="topic-number ml-reduction">ML Algorithm 21</span>
|
| 9318 |
<h2>🔄 Autoencoders</h2>
|
|
|
|
| 9330 |
</div>
|
| 9331 |
</section>
|
| 9332 |
|
| 9333 |
+
<section class="topic-section ml-section" id="ml-topic-22" data-subject="machine-learning" style="display: none;">
|
| 9334 |
<div class="topic-header">
|
| 9335 |
<span class="topic-number ml-reinforcement">ML Algorithm 22</span>
|
| 9336 |
<h2>🎮 Q-Learning</h2>
|
| 9337 |
+
<p class="topic-subtitle">Learn optimal actions through trial and error</p>
|
| 9338 |
+
</div>
|
| 9339 |
+
|
| 9340 |
+
<div class="content-card">
|
| 9341 |
+
<h3>📚 What is Q-Learning?</h3>
|
| 9342 |
+
<p>Q-Learning is a model-free reinforcement learning algorithm that learns the value of taking specific actions in specific states. It builds a Q-table mapping state-action pairs to expected future rewards.</p>
|
| 9343 |
+
<p><strong>Analogy:</strong> Like learning to play a video game by trying different moves and remembering which ones led to high scores.</p>
|
| 9344 |
+
</div>
|
| 9345 |
+
|
| 9346 |
+
<div class="callout-box insight">
|
| 9347 |
+
<div class="callout-header">💡 How It Works</div>
|
| 9348 |
+
<p><strong>Key Concepts:</strong></p>
|
| 9349 |
+
<ol>
|
| 9350 |
+
<li><strong>State (s):</strong> Current situation the agent is in</li>
|
| 9351 |
+
<li><strong>Action (a):</strong> What the agent can do</li>
|
| 9352 |
+
<li><strong>Reward (r):</strong> Immediate feedback from environment</li>
|
| 9353 |
+
<li><strong>Q-value Q(s,a):</strong> Expected total future reward</li>
|
| 9354 |
+
<li><strong>Policy π:</strong> Strategy for choosing actions</li>
|
| 9355 |
+
</ol>
|
| 9356 |
</div>
|
| 9357 |
+
|
| 9358 |
<div class="content-card">
|
| 9359 |
+
<h3>🧮 Mathematics Behind It</h3>
|
| 9360 |
+
<div class="formula-card">
|
| 9361 |
+
<div class="formula-header">Q-Learning Update Rule</div>
|
| 9362 |
+
<div class="formula-main">Q(s,a) ← Q(s,a) + α[r + γ max Q(s',a') - Q(s,a)]</div>
|
| 9363 |
+
<p>α = learning rate (0 to 1)</p>
|
| 9364 |
+
<p>γ = discount factor (0 to 1)</p>
|
| 9365 |
+
<p>r = immediate reward</p>
|
| 9366 |
+
<p>s' = next state, a' = possible next actions</p>
|
| 9367 |
+
</div>
|
| 9368 |
+
<div class="formula-card">
|
| 9369 |
+
<div class="formula-header">Optimal Policy</div>
|
| 9370 |
+
<div class="formula-main">π*(s) = argmax Q*(s,a)</div>
|
| 9371 |
+
<p>Choose action with highest Q-value</p>
|
| 9372 |
+
</div>
|
| 9373 |
+
</div>
|
| 9374 |
+
|
| 9375 |
+
<div class="worked-example-section">
|
| 9376 |
+
<h3>📝 Worked Example - Grid World Navigation</h3>
|
| 9377 |
+
|
| 9378 |
+
<div class="example-problem">
|
| 9379 |
+
<h4>Problem:</h4>
|
| 9380 |
+
<p class="problem-statement">Agent navigates 3×3 grid. Start at (0,0), Goal at (2,2). Actions: Up, Down, Left, Right. Reward: +10 at goal, -1 per step. Use α=0.5, γ=0.9</p>
|
| 9381 |
+
<table class="calculation-table">
|
| 9382 |
+
<tr><th colspan="3">Grid World</th></tr>
|
| 9383 |
+
<tr><td>Start</td><td>[ ]</td><td>[ ]</td></tr>
|
| 9384 |
+
<tr><td>[ ]</td><td>[ ]</td><td>[ ]</td></tr>
|
| 9385 |
+
<tr><td>[ ]</td><td>[ ]</td><td>Goal</td></tr>
|
| 9386 |
+
</table>
|
| 9387 |
+
</div>
|
| 9388 |
+
|
| 9389 |
+
<div class="example-solution">
|
| 9390 |
+
<h4>Solution:</h4>
|
| 9391 |
+
|
| 9392 |
+
<div class="solution-step">
|
| 9393 |
+
<div class="step-number">Step 1:</div>
|
| 9394 |
+
<div class="step-content">
|
| 9395 |
+
<p class="step-description">Initialize Q-Table</p>
|
| 9396 |
+
<div class="step-work">
|
| 9397 |
+
<code>Q(s,a) = 0 for all state-action pairs</code><br>
|
| 9398 |
+
<code>States: 9 positions (0,0) to (2,2)</code><br>
|
| 9399 |
+
<code>Actions: {Up, Down, Left, Right}</code><br>
|
| 9400 |
+
<code>Total Q-values: 9 × 4 = 36</code>
|
| 9401 |
+
</div>
|
| 9402 |
+
<p class="step-explanation">Start with zero knowledge</p>
|
| 9403 |
+
</div>
|
| 9404 |
+
</div>
|
| 9405 |
+
|
| 9406 |
+
<div class="solution-step">
|
| 9407 |
+
<div class="step-number">Step 2:</div>
|
| 9408 |
+
<div class="step-content">
|
| 9409 |
+
<p class="step-description">Episode 1 - Random Exploration</p>
|
| 9410 |
+
<div class="step-work">
|
| 9411 |
+
<code>Start: s = (0,0), choose Right (random)</code><br>
|
| 9412 |
+
<code>Next: s' = (0,1), reward r = -1</code><br>
|
| 9413 |
+
<code>Q((0,0), Right) = 0 + 0.5[-1 + 0.9×0 - 0] = -0.5</code><br><br>
|
| 9414 |
+
<code>From (0,1), choose Down</code><br>
|
| 9415 |
+
<code>Next: s' = (1,1), reward r = -1</code><br>
|
| 9416 |
+
<code>Q((0,1), Down) = 0 + 0.5[-1 + 0.9×0 - 0] = -0.5</code>
|
| 9417 |
+
</div>
|
| 9418 |
+
<p class="step-explanation">Exploring and updating Q-values</p>
|
| 9419 |
+
</div>
|
| 9420 |
+
</div>
|
| 9421 |
+
|
| 9422 |
+
<div class="solution-step">
|
| 9423 |
+
<div class="step-number">Step 3:</div>
|
| 9424 |
+
<div class="step-content">
|
| 9425 |
+
<p class="step-description">Reaching Goal First Time</p>
|
| 9426 |
+
<div class="step-work">
|
| 9427 |
+
<code>Eventually reach: s = (2,1)</code><br>
|
| 9428 |
+
<code>Choose Right → reach goal (2,2)</code><br>
|
| 9429 |
+
<code>Reward r = +10</code><br>
|
| 9430 |
+
<code>Q((2,1), Right) = 0 + 0.5[10 + 0.9×0 - 0]</code><br>
|
| 9431 |
+
<code>Q((2,1), Right) = 5.0 ← High value!</code>
|
| 9432 |
+
</div>
|
| 9433 |
+
<p class="step-explanation">Goal state has terminal value, max Q = 0</p>
|
| 9434 |
+
</div>
|
| 9435 |
+
</div>
|
| 9436 |
+
|
| 9437 |
+
<div class="solution-step">
|
| 9438 |
+
<div class="step-number">Step 4:</div>
|
| 9439 |
+
<div class="step-content">
|
| 9440 |
+
<p class="step-description">Backpropagation of Value</p>
|
| 9441 |
+
<div class="step-work">
|
| 9442 |
+
<code>Next episode, from (1,1) go Right to (2,1)</code><br>
|
| 9443 |
+
<code>r = -1, but max Q((2,1)) = 5.0 now!</code><br>
|
| 9444 |
+
<code>Q((1,1), Right) = 0 + 0.5[-1 + 0.9×5.0 - 0]</code><br>
|
| 9445 |
+
<code>= 0.5[-1 + 4.5] = 0.5×3.5 = 1.75</code><br><br>
|
| 9446 |
+
<code>Values propagate backward through grid!</code>
|
| 9447 |
+
</div>
|
| 9448 |
+
<p class="step-explanation">Future rewards influence current decisions</p>
|
| 9449 |
+
</div>
|
| 9450 |
+
</div>
|
| 9451 |
+
|
| 9452 |
+
<div class="solution-step">
|
| 9453 |
+
<div class="step-number">Step 5:</div>
|
| 9454 |
+
<div class="step-content">
|
| 9455 |
+
<p class="step-description">Converged Q-Table (After Many Episodes)</p>
|
| 9456 |
+
<div class="step-work">
|
| 9457 |
+
<table class="calculation-table">
|
| 9458 |
+
<tr><th>State</th><th>Best Action</th><th>Q-value</th></tr>
|
| 9459 |
+
<tr><td>(0,0)</td><td>Right</td><td>2.95</td></tr>
|
| 9460 |
+
<tr><td>(0,1)</td><td>Right</td><td>3.83</td></tr>
|
| 9461 |
+
<tr><td>(0,2)</td><td>Down</td><td>4.69</td></tr>
|
| 9462 |
+
<tr><td>(1,1)</td><td>Right</td><td>4.26</td></tr>
|
| 9463 |
+
<tr><td>(1,2)</td><td>Down</td><td>5.21</td></tr>
|
| 9464 |
+
<tr><td>(2,1)</td><td>Right</td><td>5.79</td></tr>
|
| 9465 |
+
<tr style="background: rgba(81,207,102,0.2);"><td>(2,2)</td><td>GOAL</td><td>10.0</td></tr>
|
| 9466 |
+
</table>
|
| 9467 |
+
</div>
|
| 9468 |
+
<p class="step-explanation">Optimal path emerges from Q-values</p>
|
| 9469 |
+
</div>
|
| 9470 |
+
</div>
|
| 9471 |
+
|
| 9472 |
+
<div class="final-answer">
|
| 9473 |
+
<strong>✓ Optimal Policy Learned:</strong>
|
| 9474 |
+
<span class="answer-highlight">(0,0) → Right → Right → Down → Down → Right → GOAL</span><br>
|
| 9475 |
+
<span class="answer-highlight">Total reward: 10 - 5 = +5</span>
|
| 9476 |
+
</div>
|
| 9477 |
+
|
| 9478 |
+
<div class="verification">
|
| 9479 |
+
<strong>Validation:</strong>
|
| 9480 |
+
<p>Agent learned shortest path (5 steps) to goal through trial and error. Q-values form gradient pointing toward goal.</p>
|
| 9481 |
+
</div>
|
| 9482 |
+
</div>
|
| 9483 |
+
|
| 9484 |
+
<div class="practice-problems">
|
| 9485 |
+
<h4>💪 Practice Problems:</h4>
|
| 9486 |
+
<ol>
|
| 9487 |
+
<li>What happens if γ=0? (only immediate rewards matter)</li>
|
| 9488 |
+
<li>Why use ε-greedy exploration?</li>
|
| 9489 |
+
<li>Calculate Q-update: current Q=2, r=-1, max next Q=5, α=0.1, γ=0.9</li>
|
| 9490 |
+
</ol>
|
| 9491 |
+
<button class="show-answers-btn" onclick="this.nextElementSibling.style.display = this.nextElementSibling.style.display === 'none' ? 'block' : 'none'; this.textContent = this.textContent === 'Show Answers' ? 'Hide Answers' : 'Show Answers'">Show Answers</button>
|
| 9492 |
+
<div class="practice-answers" style="display: none;">
|
| 9493 |
+
<p><strong>Answers:</strong></p>
|
| 9494 |
+
<ol>
|
| 9495 |
+
<li>Agent becomes greedy, only cares about next step</li>
|
| 9496 |
+
<li>Balance exploration (try new actions) vs exploitation (use best known)</li>
|
| 9497 |
+
<li>Q_new = 2 + 0.1[-1 + 0.9×5 - 2] = 2 + 0.1×1.5 = 2.15</li>
|
| 9498 |
+
</ol>
|
| 9499 |
+
</div>
|
| 9500 |
+
</div>
|
| 9501 |
</div>
|
| 9502 |
+
|
| 9503 |
+
<div class="content-card">
|
| 9504 |
+
<h3>💻 Python Implementation</h3>
|
| 9505 |
+
<div class="code-block">
|
| 9506 |
+
<code>import numpy as np<br><br>
|
| 9507 |
+
# Initialize Q-table<br>
|
| 9508 |
+
Q = np.zeros((9, 4)) # 9 states, 4 actions<br>
|
| 9509 |
+
alpha = 0.5<br>
|
| 9510 |
+
gamma = 0.9<br>
|
| 9511 |
+
epsilon = 0.1 # exploration rate<br><br>
|
| 9512 |
+
# Q-Learning loop<br>
|
| 9513 |
+
for episode in range(1000):<br>
|
| 9514 |
+
state = start_state<br>
|
| 9515 |
+
while not done:<br>
|
| 9516 |
+
# Epsilon-greedy action selection<br>
|
| 9517 |
+
if np.random.random() < epsilon:<br>
|
| 9518 |
+
action = np.random.randint(4)<br>
|
| 9519 |
+
else:<br>
|
| 9520 |
+
action = np.argmax(Q[state])<br>
|
| 9521 |
+
<br>
|
| 9522 |
+
# Take action, observe reward and next state<br>
|
| 9523 |
+
next_state, reward, done = env.step(action)<br>
|
| 9524 |
+
<br>
|
| 9525 |
+
# Q-Learning update<br>
|
| 9526 |
+
Q[state, action] += alpha * (reward + gamma * np.max(Q[next_state]) - Q[state, action])<br>
|
| 9527 |
+
<br>
|
| 9528 |
+
state = next_state</code>
|
| 9529 |
+
</div>
|
| 9530 |
+
</div>
|
| 9531 |
+
|
| 9532 |
<div class="summary-card">
|
| 9533 |
<h3>🎯 Key Takeaways</h3>
|
| 9534 |
<ul>
|
| 9535 |
+
<li>Learns optimal policy through rewards (model-free)</li>
|
| 9536 |
+
<li>Q(s,a) = expected total future reward</li>
|
| 9537 |
+
<li>Update rule: Q ← Q + α[r + γ max Q' - Q]</li>
|
| 9538 |
+
<li>Exploration vs exploitation tradeoff crucial</li>
|
| 9539 |
</ul>
|
| 9540 |
</div>
|
| 9541 |
</section>
|
| 9542 |
|
| 9543 |
+
<section class="topic-section ml-section" id="ml-topic-23" data-subject="machine-learning" style="display: none;">
|
| 9544 |
<div class="topic-header">
|
| 9545 |
<span class="topic-number ml-reinforcement">ML Algorithm 23</span>
|
| 9546 |
<h2>🧠 Deep Q-Networks (DQN)</h2>
|
| 9547 |
+
<p class="topic-subtitle">Neural networks for complex state spaces</p>
|
| 9548 |
+
</div>
|
| 9549 |
+
|
| 9550 |
+
<div class="content-card">
|
| 9551 |
+
<h3>📚 What is DQN?</h3>
|
| 9552 |
+
<p>Deep Q-Networks combine Q-Learning with deep neural networks to handle high-dimensional state spaces (like raw pixels from games). Instead of a Q-table, a neural network approximates Q-values.</p>
|
| 9553 |
+
<p><strong>Why it matters:</strong> Enabled AI to play Atari games from pixels alone, achieving superhuman performance. Breakthrough in combining deep learning with RL.</p>
|
| 9554 |
+
</div>
|
| 9555 |
+
|
| 9556 |
+
<div class="callout-box insight">
|
| 9557 |
+
<div class="callout-header">💡 Key Innovations</div>
|
| 9558 |
+
<ol>
|
| 9559 |
+
<li><strong>Function Approximation:</strong> Neural net Q(s,a;θ) replaces Q-table</li>
|
| 9560 |
+
<li><strong>Experience Replay:</strong> Store transitions, sample randomly for training</li>
|
| 9561 |
+
<li><strong>Target Network:</strong> Separate network for stable targets</li>
|
| 9562 |
+
<li><strong>Conv Layers:</strong> Extract features from raw pixels</li>
|
| 9563 |
+
</ol>
|
| 9564 |
</div>
|
| 9565 |
+
|
| 9566 |
<div class="content-card">
|
| 9567 |
+
<h3>🧮 Mathematics Behind It</h3>
|
| 9568 |
+
<div class="formula-card">
|
| 9569 |
+
<div class="formula-header">DQN Loss Function</div>
|
| 9570 |
+
<div class="formula-main">L(θ) = 𝔼[(r + γ max Q(s',a';θ⁻) - Q(s,a;θ))²]</div>
|
| 9571 |
+
<p>θ = current network weights</p>
|
| 9572 |
+
<p>θ⁻ = target network weights (frozen)</p>
|
| 9573 |
+
<p>Minimize TD error using gradient descent</p>
|
| 9574 |
+
</div>
|
| 9575 |
+
<div class="formula-card">
|
| 9576 |
+
<div class="formula-header">Network Architecture (Atari)</div>
|
| 9577 |
+
<div class="formula-main">Conv(32, 8×8, stride=4) → ReLU → Conv(64, 4×4, stride=2) → ReLU → Conv(64, 3×3, stride=1) → ReLU → FC(512) → FC(num_actions)</div>
|
| 9578 |
+
</div>
|
| 9579 |
+
</div>
|
| 9580 |
+
|
| 9581 |
+
<div class="worked-example-section">
|
| 9582 |
+
<h3>📝 Worked Example - Training DQN for Cart-Pole</h3>
|
| 9583 |
+
|
| 9584 |
+
<div class="example-problem">
|
| 9585 |
+
<h4>Problem:</h4>
|
| 9586 |
+
<p class="problem-statement">Train DQN to balance pole on cart. State: [cart_pos, cart_vel, pole_angle, pole_vel]. Actions: {Left, Right}. Goal: Keep pole upright for 200 steps.</p>
|
| 9587 |
+
</div>
|
| 9588 |
+
|
| 9589 |
+
<div class="example-solution">
|
| 9590 |
+
<h4>Solution:</h4>
|
| 9591 |
+
|
| 9592 |
+
<div class="solution-step">
|
| 9593 |
+
<div class="step-number">Step 1:</div>
|
| 9594 |
+
<div class="step-content">
|
| 9595 |
+
<p class="step-description">Design Neural Network</p>
|
| 9596 |
+
<div class="step-work">
|
| 9597 |
+
<code>Input layer: 4 neurons (state features)</code><br>
|
| 9598 |
+
<code>Hidden layer 1: 128 neurons, ReLU activation</code><br>
|
| 9599 |
+
<code>Hidden layer 2: 128 neurons, ReLU activation</code><br>
|
| 9600 |
+
<code>Output layer: 2 neurons (Q-value for each action)</code><br><br>
|
| 9601 |
+
<code>Initialize two networks:</code><br>
|
| 9602 |
+
<code> • Q-network (θ) - updated every step</code><br>
|
| 9603 |
+
<code> • Target network (θ⁻) - updated every 100 steps</code>
|
| 9604 |
+
</div>
|
| 9605 |
+
<p class="step-explanation">Network outputs Q(s, Left) and Q(s, Right)</p>
|
| 9606 |
+
</div>
|
| 9607 |
+
</div>
|
| 9608 |
+
|
| 9609 |
+
<div class="solution-step">
|
| 9610 |
+
<div class="step-number">Step 2:</div>
|
| 9611 |
+
<div class="step-content">
|
| 9612 |
+
<p class="step-description">Initialize Replay Buffer</p>
|
| 9613 |
+
<div class="step-work">
|
| 9614 |
+
<code>Create empty buffer D (capacity: 10,000 transitions)</code><br>
|
| 9615 |
+
<code>Each transition: (s, a, r, s', done)</code><br>
|
| 9616 |
+
<code> s = current state [0.02, 0.01, -0.05, 0.03]</code><br>
|
| 9617 |
+
<code> a = action taken (0 or 1)</code><br>
|
| 9618 |
+
<code> r = reward (+1 per step alive)</code><br>
|
| 9619 |
+
<code> s' = next state</code><br>
|
| 9620 |
+
<code> done = episode finished? (True/False)</code>
|
| 9621 |
+
</div>
|
| 9622 |
+
<p class="step-explanation">Replay buffer breaks correlation in sequential data</p>
|
| 9623 |
+
</div>
|
| 9624 |
+
</div>
|
| 9625 |
+
|
| 9626 |
+
<div class="solution-step">
|
| 9627 |
+
<div class="step-number">Step 3:</div>
|
| 9628 |
+
<div class="step-content">
|
| 9629 |
+
<p class="step-description">Collect Experience (Episode 1)</p>
|
| 9630 |
+
<div class="step-work">
|
| 9631 |
+
<code>Start: s₀ = [0.02, 0, -0.05, 0]</code><br>
|
| 9632 |
+
<code>Q-network outputs: [Q(s₀,Left)=0.1, Q(s₀,Right)=0.3]</code><br>
|
| 9633 |
+
<code>ε-greedy: ε=0.9 initially → choose random action</code><br>
|
| 9634 |
+
<code>Action: Left (random exploration)</code><br>
|
| 9635 |
+
<code>Result: s₁=[0.01, -0.02, -0.06, -0.04], r=+1, done=False</code><br>
|
| 9636 |
+
<code>Store: (s₀, Left, +1, s₁, False) in replay buffer</code><br><br>
|
| 9637 |
+
<code>Continue until pole falls (episode ends)</code><br>
|
| 9638 |
+
<code>Episode 1 length: 23 steps</code>
|
| 9639 |
+
</div>
|
| 9640 |
+
<p class="step-explanation">Collect data by interacting with environment</p>
|
| 9641 |
+
</div>
|
| 9642 |
+
</div>
|
| 9643 |
+
|
| 9644 |
+
<div class="solution-step">
|
| 9645 |
+
<div class="step-number">Step 4:</div>
|
| 9646 |
+
<div class="step-content">
|
| 9647 |
+
<p class="step-description">Training Update (Mini-Batch)</p>
|
| 9648 |
+
<div class="step-work">
|
| 9649 |
+
<code>Sample 32 random transitions from replay buffer</code><br>
|
| 9650 |
+
<code>Example transition: (s, a=Right, r=+1, s', done=False)</code><br><br>
|
| 9651 |
+
<code>Compute target:</code><br>
|
| 9652 |
+
<code> Target network: Q_target(s') = [0.5, 0.8]</code><br>
|
| 9653 |
+
<code> max Q_target(s') = 0.8</code><br>
|
| 9654 |
+
<code> y = r + γ × max Q_target(s') = 1 + 0.99×0.8 = 1.792</code><br><br>
|
| 9655 |
+
<code>Current prediction:</code><br>
|
| 9656 |
+
<code> Q(s, Right) = 1.2</code><br><br>
|
| 9657 |
+
<code>Loss = (y - Q(s,a))² = (1.792 - 1.2)² = 0.35</code><br>
|
| 9658 |
+
<code>Backpropagate, update θ with gradient descent</code>
|
| 9659 |
+
</div>
|
| 9660 |
+
<p class="step-explanation">Update network to minimize TD error</p>
|
| 9661 |
+
</div>
|
| 9662 |
+
</div>
|
| 9663 |
+
|
| 9664 |
+
<div class="solution-step">
|
| 9665 |
+
<div class="step-number">Step 5:</div>
|
| 9666 |
+
<div class="step-content">
|
| 9667 |
+
<p class="step-description">Target Network Update</p>
|
| 9668 |
+
<div class="step-work">
|
| 9669 |
+
<code>Every 100 training steps:</code><br>
|
| 9670 |
+
<code>θ⁻ ← θ (copy current network to target network)</code><br><br>
|
| 9671 |
+
<code>Why? Stabilizes training!</code><br>
|
| 9672 |
+
<code>Without target network: targets change every update → unstable</code><br>
|
| 9673 |
+
<code>With target network: targets stable for 100 steps → converges</code>
|
| 9674 |
+
</div>
|
| 9675 |
+
<p class="step-explanation">Prevents moving target problem</p>
|
| 9676 |
+
</div>
|
| 9677 |
+
</div>
|
| 9678 |
+
|
| 9679 |
+
<div class="solution-step">
|
| 9680 |
+
<div class="step-number">Step 6:</div>
|
| 9681 |
+
<div class="step-content">
|
| 9682 |
+
<p class="step-description">Learning Progress</p>
|
| 9683 |
+
<div class="step-work">
|
| 9684 |
+
<table class="calculation-table">
|
| 9685 |
+
<tr><th>Episode</th><th>Steps</th><th>ε (exploration)</th><th>Avg Q-value</th></tr>
|
| 9686 |
+
<tr><td>1-10</td><td>15-30</td><td>0.9</td><td>0.2</td></tr>
|
| 9687 |
+
<tr><td>50</td><td>45</td><td>0.5</td><td>1.5</td></tr>
|
| 9688 |
+
<tr><td>100</td><td>85</td><td>0.3</td><td>5.2</td></tr>
|
| 9689 |
+
<tr><td>200</td><td>150</td><td>0.1</td><td>12.8</td></tr>
|
| 9690 |
+
<tr style="background: rgba(81,207,102,0.2);"><td>300</td><td>200</td><td>0.05</td><td>18.5</td></tr>
|
| 9691 |
+
</table>
|
| 9692 |
+
<code>Solved! Agent keeps pole upright for 200 steps consistently</code>
|
| 9693 |
+
</div>
|
| 9694 |
+
<p class="step-explanation">Gradual improvement as network learns</p>
|
| 9695 |
+
</div>
|
| 9696 |
+
</div>
|
| 9697 |
+
|
| 9698 |
+
<div class="final-answer">
|
| 9699 |
+
<strong>✓ DQN Successfully Trained!</strong>
|
| 9700 |
+
<span class="answer-highlight">Network learned to balance pole from raw state features</span><br>
|
| 9701 |
+
<span class="answer-highlight">Key: Experience replay + target network = stable learning</span>
|
| 9702 |
+
</div>
|
| 9703 |
+
|
| 9704 |
+
<div class="verification">
|
| 9705 |
+
<strong>Validation:</strong>
|
| 9706 |
+
<p>DQN converged in ~300 episodes. Experience replay broke correlation, target network stabilized targets. Network generalized to unseen states!</p>
|
| 9707 |
+
</div>
|
| 9708 |
+
</div>
|
| 9709 |
+
</div>
|
| 9710 |
+
|
| 9711 |
+
<div class="content-card">
|
| 9712 |
+
<h3>💻 Python Implementation (PyTorch)</h3>
|
| 9713 |
+
<div class="code-block">
|
| 9714 |
+
<code>import torch<br>
|
| 9715 |
+
import torch.nn as nn<br>
|
| 9716 |
+
import random<br>
|
| 9717 |
+
from collections import deque<br><br>
|
| 9718 |
+
class DQN(nn.Module):<br>
|
| 9719 |
+
def __init__(self, state_dim, action_dim):<br>
|
| 9720 |
+
super().__init__()<br>
|
| 9721 |
+
self.network = nn.Sequential(<br>
|
| 9722 |
+
nn.Linear(state_dim, 128),<br>
|
| 9723 |
+
nn.ReLU(),<br>
|
| 9724 |
+
nn.Linear(128, 128),<br>
|
| 9725 |
+
nn.ReLU(),<br>
|
| 9726 |
+
nn.Linear(128, action_dim)<br>
|
| 9727 |
+
)<br>
|
| 9728 |
+
<br>
|
| 9729 |
+
def forward(self, x):<br>
|
| 9730 |
+
return self.network(x)<br><br>
|
| 9731 |
+
# Training loop<br>
|
| 9732 |
+
replay_buffer = deque(maxlen=10000)<br>
|
| 9733 |
+
q_network = DQN(state_dim=4, action_dim=2)<br>
|
| 9734 |
+
target_network = DQN(state_dim=4, action_dim=2)<br>
|
| 9735 |
+
target_network.load_state_dict(q_network.state_dict())<br><br>
|
| 9736 |
+
for episode in range(1000):<br>
|
| 9737 |
+
state = env.reset()<br>
|
| 9738 |
+
for step in range(200):<br>
|
| 9739 |
+
# Epsilon-greedy<br>
|
| 9740 |
+
if random.random() < epsilon:<br>
|
| 9741 |
+
action = env.action_space.sample()<br>
|
| 9742 |
+
else:<br>
|
| 9743 |
+
with torch.no_grad():<br>
|
| 9744 |
+
action = q_network(state).argmax().item()<br>
|
| 9745 |
+
<br>
|
| 9746 |
+
# Step environment<br>
|
| 9747 |
+
next_state, reward, done, _ = env.step(action)<br>
|
| 9748 |
+
replay_buffer.append((state, action, reward, next_state, done))<br>
|
| 9749 |
+
<br>
|
| 9750 |
+
# Sample mini-batch and train<br>
|
| 9751 |
+
if len(replay_buffer) > 1000:<br>
|
| 9752 |
+
batch = random.sample(replay_buffer, 32)<br>
|
| 9753 |
+
# Compute loss and update network<br>
|
| 9754 |
+
# ...<br>
|
| 9755 |
+
<br>
|
| 9756 |
+
if done: break<br>
|
| 9757 |
+
<br>
|
| 9758 |
+
# Update target network every 100 episodes<br>
|
| 9759 |
+
if episode % 100 == 0:<br>
|
| 9760 |
+
target_network.load_state_dict(q_network.state_dict())</code>
|
| 9761 |
+
</div>
|
| 9762 |
</div>
|
| 9763 |
+
|
| 9764 |
<div class="summary-card">
|
| 9765 |
<h3>🎯 Key Takeaways</h3>
|
| 9766 |
<ul>
|
| 9767 |
+
<li>Neural network Q(s,a;θ) handles high-dimensional states</li>
|
| 9768 |
+
<li>Experience replay breaks data correlation → stable training</li>
|
| 9769 |
+
<li>Target network provides stable TD targets</li>
|
| 9770 |
+
<li>Enabled superhuman Atari game performance (DeepMind 2015)</li>
|
| 9771 |
</ul>
|
| 9772 |
</div>
|
| 9773 |
</section>
|
| 9774 |
|
| 9775 |
+
<section class="topic-section ml-section" id="ml-topic-24" data-subject="machine-learning" style="display: none;">
|
| 9776 |
<div class="topic-header">
|
| 9777 |
<span class="topic-number ml-reinforcement">ML Algorithm 24</span>
|
| 9778 |
<h2>🎯 Policy Gradient Methods</h2>
|
| 9779 |
+
<p class="topic-subtitle">Direct policy optimization for maximum reward</p>
|
| 9780 |
+
</div>
|
| 9781 |
+
|
| 9782 |
+
<div class="content-card">
|
| 9783 |
+
<h3>📚 What are Policy Gradient Methods?</h3>
|
| 9784 |
+
<p>Policy gradient algorithms directly optimize the agent's policy π(a|s) (mapping from states to probability distributions over actions), rather than indirectly through Q-values.</p>
|
| 9785 |
+
<p><strong>Why it matters:</strong> Enables handling of continuous and large action spaces, and complex policies (e.g., in robotics).</p>
|
| 9786 |
+
</div>
|
| 9787 |
+
|
| 9788 |
+
<div class="callout-box insight">
|
| 9789 |
+
<div class="callout-header">💡 Key Concepts</div>
|
| 9790 |
+
<ol>
|
| 9791 |
+
<li><strong>Stochastic Policy:</strong> π(a|s;θ) outputs probability for each action</li>
|
| 9792 |
+
<li><strong>Gradient Ascent:</strong> Update parameters θ to increase expected reward J(θ)</li>
|
| 9793 |
+
<li><strong>REINFORCE Algorithm:</strong> Updates proportional to (reward - baseline)</li>
|
| 9794 |
+
<li><strong>Advantage:</strong> A(s,a) = "How much better was this action than expected?"</li>
|
| 9795 |
+
<li><strong>Variants:</strong> REINFORCE, Actor-Critic, PPO, A2C/A3C</li>
|
| 9796 |
+
</ol>
|
| 9797 |
</div>
|
| 9798 |
+
|
| 9799 |
<div class="content-card">
|
| 9800 |
+
<h3>🧮 Mathematics - Policy Gradient Theorem</h3>
|
| 9801 |
+
<div class="formula-card">
|
| 9802 |
+
<div class="formula-header">Policy Gradient Loss</div>
|
| 9803 |
+
<div class="formula-main">J(θ) = 𝔼[log π(a|s;θ)·G]</div>
|
| 9804 |
+
<p>G = total reward-to-go for episode</p>
|
| 9805 |
+
</div>
|
| 9806 |
+
<div class="formula-card">
|
| 9807 |
+
<div class="formula-header">Gradient Update</div>
|
| 9808 |
+
<div class="formula-main">θ ← θ + α·∇θ J(θ)</div>
|
| 9809 |
+
<p>α = learning rate</p>
|
| 9810 |
+
</div>
|
| 9811 |
</div>
|
| 9812 |
+
|
| 9813 |
+
<div class="worked-example-section">
|
| 9814 |
+
<h3>📝 Worked Example - REINFORCE for Cart-Pole</h3>
|
| 9815 |
+
|
| 9816 |
+
<div class="example-problem">
|
| 9817 |
+
<h4>Problem:</h4>
|
| 9818 |
+
<p class="problem-statement">Train an agent to balance a pole using REINFORCE. Episode: agent starts at s₀, takes actions a₀, a₁,... receives rewards r₀, r₁, .... Max episode length = 5. Use learning rate α=0.1.</p>
|
| 9819 |
+
</div>
|
| 9820 |
+
|
| 9821 |
+
<div class="example-solution">
|
| 9822 |
+
<h4>Solution:</h4>
|
| 9823 |
+
|
| 9824 |
+
<div class="solution-step">
|
| 9825 |
+
<div class="step-number">Step 1:</div>
|
| 9826 |
+
<div class="step-content">
|
| 9827 |
+
<p class="step-description">Sample an episode</p>
|
| 9828 |
+
<div class="step-work">
|
| 9829 |
+
<code>s₀ = initial state</code><br>
|
| 9830 |
+
<code>Action a₀ = Right, reward r₀ = +1</code><br>
|
| 9831 |
+
<code>s₁ = ...</code><br>
|
| 9832 |
+
<code>Action a₁ = Right, reward r₁ = +1</code><br>
|
| 9833 |
+
<code>Action a₂ = Left, reward r₂ = +1</code><br>
|
| 9834 |
+
<code>Action a₃ = Left, reward r₃ = +1</code><br>
|
| 9835 |
+
<code>Action a₄ = Right, reward r₄ = +1</code><br>
|
| 9836 |
+
<code>Episode finished (pole fell)</code>
|
| 9837 |
+
</div>
|
| 9838 |
+
<p class="step-explanation">Agent collects (state, action, reward) for trajectory</p>
|
| 9839 |
+
</div>
|
| 9840 |
+
</div>
|
| 9841 |
+
|
| 9842 |
+
<div class="solution-step">
|
| 9843 |
+
<div class="step-number">Step 2:</div>
|
| 9844 |
+
<div class="step-content">
|
| 9845 |
+
<p class="step-description">Calculate Return G_t for Each Step</p>
|
| 9846 |
+
<div class="step-work">
|
| 9847 |
+
<code>G₀ = r₀ + r₁ + r₂ + r₃ + r₄ = 5</code><br>
|
| 9848 |
+
<code>G₁ = r₁ + r₂ + r₃ + r₄ = 4</code><br>
|
| 9849 |
+
<code>G₂ = r₂ + r₃ + r₄ = 3</code><br>
|
| 9850 |
+
<code>G₃ = r₃ + r₄ = 2</code><br>
|
| 9851 |
+
<code>G₄ = r₄ = 1</code>
|
| 9852 |
+
</div>
|
| 9853 |
+
<p class="step-explanation">Reward-to-go boosts good actions early in episode</p>
|
| 9854 |
+
</div>
|
| 9855 |
+
</div>
|
| 9856 |
+
|
| 9857 |
+
<div class="solution-step">
|
| 9858 |
+
<div class="step-number">Step 3:</div>
|
| 9859 |
+
<div class="step-content">
|
| 9860 |
+
<p class="step-description">Calculate Policy Gradient Loss</p>
|
| 9861 |
+
<div class="step-work">
|
| 9862 |
+
<code>For each step t:</code><br>
|
| 9863 |
+
<code> Loss = -log π(a_t|s_t) · G_t</code><br>
|
| 9864 |
+
<code>Sum over episode:</code><br>
|
| 9865 |
+
<code> L = -[log π(a₀|s₀)·5 + log π(a₁|s₁)·4 + ... + log π(a₄|s₄)·1]</code>
|
| 9866 |
+
</div>
|
| 9867 |
+
<p class="step-explanation">Actions leading to higher returns get reinforced</p>
|
| 9868 |
+
</div>
|
| 9869 |
+
</div>
|
| 9870 |
+
|
| 9871 |
+
<div class="solution-step">
|
| 9872 |
+
<div class="step-number">Step 4:</div>
|
| 9873 |
+
<div class="step-content">
|
| 9874 |
+
<p class="step-description">Backpropagate and Update θ</p>
|
| 9875 |
+
<div class="step-work">
|
| 9876 |
+
<code>Take gradient of L w.r.t θ (policy parameters)</code><br>
|
| 9877 |
+
<code>θ ← θ + 0.1 · ∇θ J(θ)</code><br>
|
| 9878 |
+
<code>Bias high probability toward actions that led to high rewards</code>
|
| 9879 |
+
</div>
|
| 9880 |
+
<p class="step-explanation">Learning rate α = 0.1 used</p>
|
| 9881 |
+
</div>
|
| 9882 |
+
</div>
|
| 9883 |
+
|
| 9884 |
+
<div class="solution-step">
|
| 9885 |
+
<div class="step-number">Step 5:</div>
|
| 9886 |
+
<div class="step-content">
|
| 9887 |
+
<p class="step-description">Repeat over many episodes</p>
|
| 9888 |
+
<div class="step-work">
|
| 9889 |
+
<code>Collect new episodes (with updated π)</code><br>
|
| 9890 |
+
<code>Average return increases over time as agent learns better policy</code>
|
| 9891 |
+
</div>
|
| 9892 |
+
<p class="step-explanation">Training curve shows learning progress</p>
|
| 9893 |
+
</div>
|
| 9894 |
+
</div>
|
| 9895 |
+
|
| 9896 |
+
<div class="final-answer">
|
| 9897 |
+
<strong>✓ Policy Gradient Success:</strong>
|
| 9898 |
+
<span class="answer-highlight">Agent learns to balance pole by maximizing expected return</span>
|
| 9899 |
+
</div>
|
| 9900 |
+
<div class="verification">
|
| 9901 |
+
<strong>Learning Curve:</strong>
|
| 9902 |
+
<p>Plot of average reward per episode increases over epochs as θ improves</p>
|
| 9903 |
+
</div>
|
| 9904 |
+
</div>
|
| 9905 |
+
<div class="practice-problems">
|
| 9906 |
+
<h4>💪 Practice Problems:</h4>
|
| 9907 |
+
<ol>
|
| 9908 |
+
<li>Why is a baseline (e.g., average return) subtracted from G_t?</li>
|
| 9909 |
+
<li>What are advantages of policy gradient vs Q-learning?</li>
|
| 9910 |
+
<li>What problem occurs if your learning rate is too high?</li>
|
| 9911 |
+
</ol>
|
| 9912 |
+
<button class="show-answers-btn" onclick="this.nextElementSibling.style.display = this.nextElementSibling.style.display === 'none' ? 'block' : 'none'; this.textContent = this.textContent === 'Show Answers' ? 'Hide Answers' : 'Show Answers'">Show Answers</button>
|
| 9913 |
+
<div class="practice-answers" style="display: none;">
|
| 9914 |
+
<p><strong>Answers:</strong></p>
|
| 9915 |
+
<ol>
|
| 9916 |
+
<li>Reduces variance of updates</li>
|
| 9917 |
+
<li>Handles continuous actions, direct stochastic policies</li>
|
| 9918 |
+
<li>Can cause divergence/instability</li>
|
| 9919 |
+
</ol>
|
| 9920 |
+
</div>
|
| 9921 |
+
</div>
|
| 9922 |
+
</div>
|
| 9923 |
+
|
| 9924 |
+
<div class="content-card">
|
| 9925 |
+
<h3>💻 Python Implementation (REINFORCE)</h3>
|
| 9926 |
+
<div class="code-block">
|
| 9927 |
+
<code>import torch
|
| 9928 |
+
import torch.nn as nn
|
| 9929 |
+
import torch.optim as optim
|
| 9930 |
+
|
| 9931 |
+
class PolicyNN(nn.Module):
|
| 9932 |
+
def __init__(self, state_dim, action_dim):
|
| 9933 |
+
super().__init__()
|
| 9934 |
+
self.net = nn.Sequential(
|
| 9935 |
+
nn.Linear(state_dim, 128), nn.ReLU(),
|
| 9936 |
+
nn.Linear(128, action_dim), nn.Softmax(dim=-1)
|
| 9937 |
+
)
|
| 9938 |
+
def forward(self, x):
|
| 9939 |
+
return self.net(x)
|
| 9940 |
+
|
| 9941 |
+
policy = PolicyNN(4,2)
|
| 9942 |
+
optimizer = optim.Adam(policy.parameters(), lr=0.01)
|
| 9943 |
+
|
| 9944 |
+
for episode in range(1000):
|
| 9945 |
+
states, actions, rewards = [], [], []
|
| 9946 |
+
s = env.reset()
|
| 9947 |
+
done = False
|
| 9948 |
+
while not done:
|
| 9949 |
+
prob = policy(torch.from_numpy(s).float())
|
| 9950 |
+
a = torch.distributions.Categorical(prob).sample().item()
|
| 9951 |
+
s2, r, done, _ = env.step(a)
|
| 9952 |
+
states.append(s)
|
| 9953 |
+
actions.append(a)
|
| 9954 |
+
rewards.append(r)
|
| 9955 |
+
s = s2
|
| 9956 |
+
G = sum(rewards)
|
| 9957 |
+
loss = 0
|
| 9958 |
+
for s, a in zip(states, actions):
|
| 9959 |
+
logp = torch.log(policy(torch.from_numpy(s).float())[a])
|
| 9960 |
+
loss -= logp * G
|
| 9961 |
+
optimizer.zero_grad()
|
| 9962 |
+
loss.backward()
|
| 9963 |
+
optimizer.step()</code>
|
| 9964 |
+
</div>
|
| 9965 |
+
</div>
|
| 9966 |
+
|
| 9967 |
<div class="summary-card">
|
| 9968 |
<h3>🎯 Key Takeaways</h3>
|
| 9969 |
<ul>
|
| 9970 |
+
<li>Directly optimizes the policy π(a|s;θ)</li>
|
| 9971 |
+
<li>Works with continuous & large action spaces</li>
|
| 9972 |
+
<li>REINFORCE is simplest policy gradient algorithm</li>
|
| 9973 |
+
<li>Use baseline to reduce variance of updates</li>
|
| 9974 |
+
<li>Improvement measured by episode learning curve</li>
|
| 9975 |
</ul>
|
| 9976 |
</div>
|
| 9977 |
</section>
|
| 9978 |
|
| 9979 |
+
<section class="topic-section ml-section" id="ml-topic-26" data-subject="machine-learning" style="display: none;">
|
| 9980 |
<div class="topic-header">
|
| 9981 |
<span class="topic-number ml-advanced">ML Algorithm 26</span>
|
| 9982 |
<h2>🔍 GridSearch & RandomSearch</h2>
|
| 9983 |
+
<p class="topic-subtitle">Hyperparameter optimization strategies</p>
|
| 9984 |
</div>
|
| 9985 |
<div class="content-card">
|
| 9986 |
+
<h3>📚 Introduction</h3>
|
| 9987 |
+
<p><strong>GridSearch:</strong> Try all combinations of hyperparameters exhaustively.</p>
|
| 9988 |
+
<p><strong>RandomSearch:</strong> Sample random combinations - often finds good solutions faster.</p>
|
| 9989 |
+
<p>Both use cross-validation for robust evaluation.</p>
|
| 9990 |
+
</div>
|
| 9991 |
+
<div class="content-card">
|
| 9992 |
+
<h3>💻 Python Implementation</h3>
|
| 9993 |
+
<div class="code-block">
|
| 9994 |
+
<code>from sklearn.model_selection import GridSearchCV, RandomizedSearchCV<br><br>
|
| 9995 |
+
param_grid = {'C': [0.1, 1, 10], 'gamma': [0.001, 0.01, 0.1]}<br>
|
| 9996 |
+
grid = GridSearchCV(SVC(), param_grid, cv=5)<br>
|
| 9997 |
+
grid.fit(X, y)<br>
|
| 9998 |
+
print(f"Best params: {grid.best_params_}")</code>
|
| 9999 |
+
</div>
|
| 10000 |
</div>
|
| 10001 |
<div class="summary-card">
|
| 10002 |
<h3>🎯 Key Takeaways</h3>
|
|
|
|
| 10004 |
<li>GridSearch: exhaustive, guarantees best in grid</li>
|
| 10005 |
<li>RandomSearch: faster, often finds good solutions</li>
|
| 10006 |
<li>Always use cross-validation for tuning</li>
|
| 10007 |
+
<li>Never tune on test set - causes overfitting!</li>
|
| 10008 |
</ul>
|
| 10009 |
</div>
|
| 10010 |
</section>
|
| 10011 |
|
| 10012 |
+
<section class="topic-section ml-section" id="ml-topic-27" data-subject="machine-learning" style="display: none;">
|
| 10013 |
<div class="topic-header">
|
| 10014 |
<span class="topic-number ml-advanced">ML Algorithm 27</span>
|
| 10015 |
<h2>⚙️ Hyperparameter Tuning</h2>
|
|
|
|
| 10027 |
</div>
|
| 10028 |
</section>
|
| 10029 |
|
| 10030 |
+
<section class="topic-section ml-section" id="ml-topic-28" data-subject="machine-learning" style="display: none;">
|
| 10031 |
<div class="topic-header">
|
| 10032 |
<span class="topic-number ml-advanced">ML Algorithm 28</span>
|
| 10033 |
<h2>📊 Model Evaluation Metrics</h2>
|
|
|
|
| 10045 |
</div>
|
| 10046 |
</section>
|
| 10047 |
|
| 10048 |
+
<section class="topic-section ml-section" id="ml-topic-29" data-subject="machine-learning" style="display: none;">
|
| 10049 |
<div class="topic-header">
|
| 10050 |
<span class="topic-number ml-advanced">ML Algorithm 29</span>
|
| 10051 |
<h2>🎯 Regularization Techniques</h2>
|
|
|
|
| 10063 |
</div>
|
| 10064 |
</section>
|
| 10065 |
|
| 10066 |
+
<section class="topic-section ml-section" id="ml-topic-30" data-subject="machine-learning" style="display: none;">
|
| 10067 |
<div class="topic-header">
|
| 10068 |
<span class="topic-number ml-advanced">ML Algorithm 30</span>
|
| 10069 |
<h2>⚖️ Bias-Variance Tradeoff</h2>
|
|
|
|
| 10081 |
</div>
|
| 10082 |
</section>
|
| 10083 |
|
| 10084 |
+
<section class="topic-section ml-section" id="ml-topic-31" data-subject="machine-learning" style="display: none;">
|
| 10085 |
<div class="topic-header">
|
| 10086 |
<span class="topic-number ml-advanced">ML Algorithm 31</span>
|
| 10087 |
<h2>🎭 Ensemble Methods</h2>
|
|
|
|
| 10099 |
</div>
|
| 10100 |
</section>
|
| 10101 |
|
| 10102 |
+
<section class="topic-section ml-section" id="ml-topic-32" data-subject="machine-learning" style="display: none;">
|
| 10103 |
<div class="topic-header">
|
| 10104 |
<span class="topic-number ml-advanced">ML Algorithm 32</span>
|
| 10105 |
<h2>🔧 Feature Engineering</h2>
|
|
|
|
| 10117 |
</div>
|
| 10118 |
</section>
|
| 10119 |
|
| 10120 |
+
<section class="topic-section ml-section" id="ml-topic-33" data-subject="machine-learning" style="display: none;">
|
| 10121 |
<div class="topic-header">
|
| 10122 |
<span class="topic-number ml-advanced">ML Algorithm 33</span>
|
| 10123 |
<h2>⚖️ Handling Imbalanced Data</h2>
|
|
|
|
| 10135 |
</div>
|
| 10136 |
</section>
|
| 10137 |
|
| 10138 |
+
<section class="topic-section ml-section" id="ml-topic-34" data-subject="machine-learning" style="display: none;">
|
| 10139 |
<div class="topic-header">
|
| 10140 |
<span class="topic-number ml-advanced">ML Algorithm 34</span>
|
| 10141 |
<h2>📈 Time Series Analysis</h2>
|
|
|
|
| 10153 |
</div>
|
| 10154 |
</section>
|
| 10155 |
|
| 10156 |
+
<section class="topic-section ml-section" id="ml-topic-35" data-subject="machine-learning" style="display: none;">
|
| 10157 |
<div class="topic-header">
|
| 10158 |
<span class="topic-number ml-advanced">ML Algorithm 35</span>
|
| 10159 |
<h2>🚨 Anomaly Detection</h2>
|
|
|
|
| 10171 |
</div>
|
| 10172 |
</section>
|
| 10173 |
|
| 10174 |
+
<section class="topic-section ml-section" id="ml-topic-36" data-subject="machine-learning" style="display: none;">
|
| 10175 |
<div class="topic-header">
|
| 10176 |
<span class="topic-number ml-advanced">ML Algorithm 36</span>
|
| 10177 |
<h2>🔄 Transfer Learning</h2>
|
|
|
|
| 10189 |
</div>
|
| 10190 |
</section>
|
| 10191 |
|
| 10192 |
+
<section class="topic-section ml-section" id="ml-topic-37" data-subject="machine-learning" style="display: none;">
|
| 10193 |
<div class="topic-header">
|
| 10194 |
<span class="topic-number ml-advanced">ML Algorithm 37</span>
|
| 10195 |
<h2>🎯 Fine-Tuning Pre-trained Models</h2>
|
|
|
|
| 10207 |
</div>
|
| 10208 |
</section>
|
| 10209 |
|
| 10210 |
+
<section class="topic-section ml-section" id="ml-topic-38" data-subject="machine-learning" style="display: none;">
|
| 10211 |
<div class="topic-header">
|
| 10212 |
<span class="topic-number ml-advanced">ML Algorithm 38</span>
|
| 10213 |
<h2>🔍 Model Interpretability & SHAP</h2>
|
|
|
|
| 10225 |
</div>
|
| 10226 |
</section>
|
| 10227 |
|
| 10228 |
+
<section class="topic-section ml-section" id="ml-topic-39" data-subject="machine-learning" style="display: none;">
|
| 10229 |
<div class="topic-header">
|
| 10230 |
<span class="topic-number ml-advanced">ML Algorithm 39</span>
|
| 10231 |
<h2>⚡ Optimization Algorithms (Adam, RMSprop)</h2>
|
|
|
|
| 10243 |
</div>
|
| 10244 |
</section>
|
| 10245 |
|
| 10246 |
+
<section class="topic-section ml-section" id="ml-topic-40" data-subject="machine-learning" style="display: none;">
|
| 10247 |
<div class="topic-header">
|
| 10248 |
<span class="topic-number ml-advanced">ML Algorithm 40</span>
|
| 10249 |
<h2>🎯 Batch Normalization & Dropout</h2>
|