| 
 | 1 | +{  | 
 | 2 | +  "title": "Bayesian Text Classification",  | 
 | 3 | +  "description": "In this coding challenge, I struggle my way through implementing a Naive Bayes text classifier in JavaScript using p5.js. I explain Bayes' theorem, demonstrate word frequency analysis, implement Laplacian smoothing, and build a working sentiment classifier that runs entirely in the browser.",  | 
 | 4 | +  "videoNumber": "187",  | 
 | 5 | +  "videoId": "g3-PXyF8U70",  | 
 | 6 | +  "date": "2025-10-11",  | 
 | 7 | +  "nebulaSlug": "codingtrain-coding-challenge-187-bayes-classifier",  | 
 | 8 | +  "languages": ["JavaScript", "p5.js"],  | 
 | 9 | +  "topics": [  | 
 | 10 | +    "Bayes theorem",  | 
 | 11 | +    "text classification",  | 
 | 12 | +    "naive Bayes",  | 
 | 13 | +    "sentiment analysis",  | 
 | 14 | +    "natural language processing",  | 
 | 15 | +    "machine learning",  | 
 | 16 | +    "word frequency",  | 
 | 17 | +    "Laplacian smoothing"  | 
 | 18 | +  ],  | 
 | 19 | +  "canContribute": true,  | 
 | 20 | +  "relatedChallenges": ["40-word-counter", "42-markov-chain-name-generator"],  | 
 | 21 | +  "timestamps": [  | 
 | 22 | +    { "time": "0:00:00", "title": "Hello!" },  | 
 | 23 | +    { "time": "0:03:34", "title": "Explaining Bayes' Theorem" },  | 
 | 24 | +    { "time": "0:12:07", "title": "What is Naive Bayes?" },  | 
 | 25 | +    { "time": "0:13:49", "title": "Setting up the Classifier in p5.js" },  | 
 | 26 | +    { "time": "0:15:41", "title": "Coding the train() function " },  | 
 | 27 | +    { "time": "0:22:14", "title": "Coding the classify() Function" },  | 
 | 28 | +    { "time": "0:24:45", "title": "Revising the train() function" },  | 
 | 29 | +    { "time": "0:29:06", "title": "Implementing Probability Calculations" },  | 
 | 30 | +    { "time": "0:33:24", "title": "Laplacian (Additive) Smoothing" },  | 
 | 31 | +    { "time": "0:42:21", "title": "Ignoring the enominator (Normalization)" },  | 
 | 32 | +    { "time": "0:45:36", "title": "Quick User Interface" },  | 
 | 33 | +    { "time": "0:49:42", "title": "Final thoughts and next steps." }  | 
 | 34 | +  ],  | 
 | 35 | +  "codeExamples": [  | 
 | 36 | +    {  | 
 | 37 | +      "title": "Text Classifier - Initial Version",  | 
 | 38 | +      "description": "Raw (but corrected) version in p5.js web editor.",  | 
 | 39 | +      "image": "classify.png",  | 
 | 40 | +      "urls": {  | 
 | 41 | +        "p5": "https://editor.p5js.org/codingtrain/sketches/RZ8a1z4DN"  | 
 | 42 | +      }  | 
 | 43 | +    },  | 
 | 44 | +    {  | 
 | 45 | +      "title": "Text Classifier - Refactored Version",  | 
 | 46 | +      "image": "classify.png",  | 
 | 47 | +      "description": "Refactored version with better structure and comments.",  | 
 | 48 | +      "urls": {  | 
 | 49 | +        "p5": "https://editor.p5js.org/codingtrain/sketches/P3ngrAANX",  | 
 | 50 | +        "other": "https://github.com/Programming-from-A-to-Z/bayes-classifier-js"  | 
 | 51 | +      }  | 
 | 52 | +    },  | 
 | 53 | +    {  | 
 | 54 | +      "title": "Text Classifier - File Loading Version",  | 
 | 55 | +      "description": "Version that loads training data from three novels (romance, horror, sci-fi).",  | 
 | 56 | +      "image": "classifyfiles.png",  | 
 | 57 | +      "urls": {  | 
 | 58 | +        "p5": "https://editor.p5js.org/codingtrain/sketches/WowR2Q9xg"  | 
 | 59 | +      }  | 
 | 60 | +    }  | 
 | 61 | +  ],  | 
 | 62 | +  "groupLinks": [  | 
 | 63 | +    {  | 
 | 64 | +      "title": "References",  | 
 | 65 | +      "links": [  | 
 | 66 | +        {  | 
 | 67 | +          "icon": "📓",  | 
 | 68 | +          "title": "Naive Bayes Classifier",  | 
 | 69 | +          "url": "https://en.wikipedia.org/wiki/Naive_Bayes_classifier",  | 
 | 70 | +          "description": "Wikipedia article explaining naive Bayes classification algorithms."  | 
 | 71 | +        },  | 
 | 72 | +        {  | 
 | 73 | +          "icon": "📓",  | 
 | 74 | +          "title": "Laplacian Smoothing",  | 
 | 75 | +          "url": "https://en.wikipedia.org/wiki/Additive_smoothing",  | 
 | 76 | +          "description": "Wikipedia article about additive (Laplacian) smoothing technique."  | 
 | 77 | +        }  | 
 | 78 | +      ]  | 
 | 79 | +    },  | 
 | 80 | +    {  | 
 | 81 | +      "title": "Videos",  | 
 | 82 | +      "links": [  | 
 | 83 | +        {  | 
 | 84 | +          "icon": "🚂",  | 
 | 85 | +          "title": "Word Counting",  | 
 | 86 | +          "url": "/challenges/40-word-counter",  | 
 | 87 | +          "description": "Video series on text analysis and word counting fundamentals."  | 
 | 88 | +        },  | 
 | 89 | +        {  | 
 | 90 | +          "icon": "🚂",  | 
 | 91 | +          "title": "Regular Expressions",  | 
 | 92 | +          "url": "https://youtu.be/7DG3kCDx53c?list=PLRqwX-V7Uu6YEypLuls7iidwHMdCM6o2w",  | 
 | 93 | +          "description": "Video series covering regular expressions for text processing."  | 
 | 94 | +        },  | 
 | 95 | +        {  | 
 | 96 | +          "icon": "📺",  | 
 | 97 | +          "title": "Bayes theorem, the geometry of changing beliefs",  | 
 | 98 | +          "url": "https://youtu.be/HZGCoVF3YvM",  | 
 | 99 | +          "description": "Visual explanation of Bayes' theorem with geometric visualization from 3Blue1Brown."  | 
 | 100 | +        },  | 
 | 101 | +        {  | 
 | 102 | +          "icon": "🚂",  | 
 | 103 | +          "title": "p5.js 2.0: async and await",  | 
 | 104 | +          "url": "/tracks/p5js-2.0/p5js-2.0/async-await",  | 
 | 105 | +          "description": "Asynchronous programming in p5.js using async and await."  | 
 | 106 | +        }  | 
 | 107 | +      ]  | 
 | 108 | +    },  | 
 | 109 | +    {  | 
 | 110 | +      "title": "Live Stream Archives",  | 
 | 111 | +      "links": [  | 
 | 112 | +        {  | 
 | 113 | +          "icon": "🔴",  | 
 | 114 | +          "title": "Full Live Stream",  | 
 | 115 | +          "url": "https://youtube.com/live/TsBDm0P0qaA",  | 
 | 116 | +          "description": "Complete unedited live stream showing the development process with all mistakes and problem-solving."  | 
 | 117 | +        }  | 
 | 118 | +      ]  | 
 | 119 | +    }  | 
 | 120 | +  ],  | 
 | 121 | +  "credits": [  | 
 | 122 | +    { "title": "Editing", "name": "Mathieu Blanchette" },  | 
 | 123 | +    { "title": "Animations", "name": "Jason Heglund" }  | 
 | 124 | +  ]  | 
 | 125 | +}  | 
0 commit comments