From f61ae0290a14c7d226262d115bf093ce86f7a615 Mon Sep 17 00:00:00 2001 From: Ajay Dhangar Date: Thu, 18 Dec 2025 21:48:48 +0530 Subject: [PATCH] done probability model --- .../probability/basics-of-probability.mdx | 91 ++++++++++++++ .../probability/bayes-theorem.mdx | 94 ++++++++++++++ .../probability/conditional-probability.mdx | 86 +++++++++++++ docs/machine-learning/probability/pdf-pmf.mdx | 102 ++++++++++++++++ .../probability-distributions/binomial.mdx | 115 ++++++++++++++++++ .../probability-distributions/normal.mdx | 78 ++++++++++++ .../probability-distributions/poisson.mdx | 87 +++++++++++++ .../probability-distributions/uniform.mdx | 87 +++++++++++++ .../probability/random-variables.mdx | 102 ++++++++++++++++ .../ml/probability-mass-function.jpg | Bin 0 -> 57644 bytes 10 files changed, 842 insertions(+) create mode 100644 static/img/tutorials/ml/probability-mass-function.jpg diff --git a/docs/machine-learning/probability/basics-of-probability.mdx b/docs/machine-learning/probability/basics-of-probability.mdx index e69de29..995e750 100644 --- a/docs/machine-learning/probability/basics-of-probability.mdx +++ b/docs/machine-learning/probability/basics-of-probability.mdx @@ -0,0 +1,91 @@ +--- +title: "Basics of Probability" +sidebar_label: Probability Basics +description: "An intuitive introduction to probability theory, sample spaces, events, and the fundamental axioms that govern uncertainty in Machine Learning." +tags: [probability, mathematics-for-ml, sample-space, axioms, statistics] +--- + +In Machine Learning, we never have perfect information. Data is noisy, sensors are imperfect, and the future is uncertain. **Probability** is the mathematical framework we use to quantify this uncertainty. + +## 1. Key Terminology + +Before we calculate anything, we must define the "world" we are looking at. + +```mermaid +mindmap + root((Probability Experiment)) + Sample Space + All possible outcomes + Denoted by S or Omega + Event + A subset of the Sample Space + The outcome we care about + Random Variable + Mapping outcomes to numbers + +``` + +* **Experiment:** An action with an uncertain outcome (e.g., classifying an image). +* **Sample Space ($S$):** The set of all possible outcomes. For a coin flip, $S = \{Heads, Tails\}$. +* **Event (A):** A specific outcome or set of outcomes. For a die roll, an event could be "rolling an even number" ($A = \{2, 4, 6\}$). + +## 2. The Three Axioms of Probability + +To ensure our probability system is consistent, it must follow these three rules defined by Kolmogorov: + +1. **Non-negativity:** The probability of any event A is at least 0. +$P(A) \ge 0$ +2. **Certainty:** The probability of the entire sample space S is exactly 1. +P(S) = 1 +3. **Additivity:** For mutually exclusive events (events that cannot happen at the same time), the probability of their union is the sum of their probabilities. +$P(A \cup B) = P(A) + P(B)$ + +## 3. Calculating Probability + +In the simplest case (where every outcome is equally likely), probability is a ratio of counting: + +$$ +P(A) = \frac{\text{Number of favorable outcomes}}{\text{Total number of outcomes in } S} +$$ + +### Complement Rule + +The probability that an event **does not** occur is 1 minus the probability that it does. + +$$ +P(A^c) = 1 - P(A) +$$ + +## 4. Types of Probability + +
+ +```mermaid +sankey-beta + %% source,target,value + Probability,Joint Probability,20 + Probability,Marginal Probability,20 + Probability,Conditional Probability,40 + Joint Probability,P(A and B),20 + Marginal Probability,P(A),20 + Conditional Probability,P(A | B),40 + +``` + +
+ +* **Marginal Probability:** The probability of an event occurring ($P(A)$), regardless of other variables. +* **Joint Probability:** The probability of two events occurring at the same time ($P(A \cap B)$). +* **Conditional Probability:** The probability of event A occurring **given** that B has already occurred ($P(A|B)$). + +## 5. Why Probability is the "Heart" of ML + +Machine Learning models are essentially **probabilistic estimators**. + +* **Classification:** When a model says an image is a "cat," it is actually saying: $P(\text{Class} = \text{Cat} \mid \text{Pixels}) = 0.94$. +* **Generative AI:** Large Language Models (LLMs) like GPT predict the "next token" by calculating the probability distribution of all possible words. +* **Anomaly Detection:** We flag data points that have a very low probability of occurring based on the training distribution. + +--- + +Knowing the basics is just the start. In ML, we often need to update our beliefs as new data comes in. This brings us to one of the most famous formulas in all of mathematics. \ No newline at end of file diff --git a/docs/machine-learning/probability/bayes-theorem.mdx b/docs/machine-learning/probability/bayes-theorem.mdx index e69de29..a5c5ec2 100644 --- a/docs/machine-learning/probability/bayes-theorem.mdx +++ b/docs/machine-learning/probability/bayes-theorem.mdx @@ -0,0 +1,94 @@ +--- +title: "Bayes' Theorem" +sidebar_label: "Bayes' Theorem" +description: "A deep dive into Bayes' Theorem: the formula for updating probabilities based on new evidence, and its massive impact on Machine Learning." +tags: [probability, bayes-theorem, inference, mathematics-for-ml, naive-bayes] +--- + +**Bayes' Theorem** is more than just a formula; it is a philosophy of how to learn. It describes the probability of an event based on prior knowledge of conditions that might be related to the event. In Machine Learning, it is the engine behind **Bayesian Inference** and the **Naive Bayes** classifier. + +## 1. The Formula + +Bayes' Theorem allows us to find $P(A|B)$ if we already know $P(B|A)$. + +$$ +P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)} +$$ + +### Breaking Down the Terms + +* **$P(A|B)$ (Posterior):** The probability of our hypothesis $A$ *after* seeing the evidence $B$. +* **$P(B|A)$ (Likelihood):** The probability of the evidence $B$ appearing *given* that hypothesis $A$ is true. +* **$P(A)$ (Prior):** Our initial belief about hypothesis $A$ *before* seeing any evidence. +* **$P(B)$ (Evidence/Marginal Likelihood):** The total probability of seeing evidence $B$ under all possible hypotheses. + +## 2. The Logic of Bayesian Updating + +Bayesian logic is iterative. Today's **Posterior** becomes tomorrow's **Prior**. + +
+ +```mermaid +flowchart LR + A[Initial Belief: Prior] --> B[New Evidence: Likelihood] + B --> C[Updated Belief: Posterior] + C -->|New Data Arrives| A + +``` + +
+ +```mermaid +sankey-beta + %% source,target,value + Prior_Knowledge,Posterior_Probability,50 + New_Evidence,Posterior_Probability,50 + Posterior_Probability,Final_Prediction,100 + +``` + +
+ +## 3. A Practical Example: Medical Testing + +Suppose a disease affects **1%** of the population (Prior). A test for this disease is **99%** accurate (Likelihood). If a patient tests positive, what is the probability they actually have the disease? + +1. $P(\text{Disease}) = 0.01$ +2. $P(\text{Pos} | \text{Disease}) = 0.99$ +3. $P(\text{Pos} | \text{No Disease}) = 0.01 (False Positive rate)$ + +### Using Bayes' Theorem: + +Even with a 99% accurate test, the probability of having the disease given a positive result is only **50%**. This is because the disease is so rare (low Prior) that the number of false positives equals the number of true positives. + +## 4. Bayes' Theorem in Machine Learning + +### A. Naive Bayes Classifier + +Naive Bayes is a popular algorithm for text classification (like spam detection). It assumes that every feature (word) is independent of every other feature (the "Naive" part) and uses Bayes' Theorem to calculate the probability of a category: + +$$ +P(\text{Spam} | \text{Words}) \propto P(\text{Words} | \text{Spam}) P(\text{Spam}) +$$ + +### B. Bayesian Neural Networks + +Unlike standard neural networks that have fixed weights, Bayesian Neural Networks represent weights as **probability distributions**. This allows the model to express **uncertainty**, it can say "I think this is a cat, but I'm only 60% sure." + +### C. Hyperparameter Optimization + +**Bayesian Optimization** is a strategy used to find the best hyperparameters for a model. It builds a probability model of the objective function and uses it to select the most promising hyperparameters to evaluate next. + +## 5. Summary Table + +| Concept | Traditional (Frequentist) | Bayesian | +| --- | --- | --- | +| **View of Probability** | Long-run frequency of events. | Measure of "degree of belief." | +| **Parameters** | Fixed, unknown constants. | Random variables with distributions. | +| **New Data** | Used to refine the estimate. | Used to update the entire belief (Prior \to Posterior). | + + +--- + + +Now that we can update our beliefs using Bayes' Theorem, we need to understand how these probabilities are spread across different outcomes. This brings us to Random Variables and Probability Distributions. \ No newline at end of file diff --git a/docs/machine-learning/probability/conditional-probability.mdx b/docs/machine-learning/probability/conditional-probability.mdx index e69de29..3a3813d 100644 --- a/docs/machine-learning/probability/conditional-probability.mdx +++ b/docs/machine-learning/probability/conditional-probability.mdx @@ -0,0 +1,86 @@ +--- +title: "Conditional Probability" +sidebar_label: Conditional Probability +description: "Understanding how the probability of an event changes given the occurrence of another event, and its role in predictive modeling." +tags: [probability, conditional-probability, dependency, mathematics-for-ml, bayes-rule] +--- + +In the real world, events are rarely isolated. The probability of it raining is higher **given** that it is cloudy. The probability of a user clicking an ad is higher **given** their past search history. This "given" is the essence of **Conditional Probability**. + +## 1. The Definition + +Conditional probability is the probability of an event $A$ occurring, given that another event $B$ has already occurred. It is denoted as $P(A|B)$. + +The formula is: + +$$ +P(A|B) = \frac{P(A \cap B)}{P(B)} +$$ + +Where: +* $P(A \cap B)$ is the **Joint Probability** (both $A$ and $B$ happen). +* $P(B)$ is the probability of the condition (the "new universe"). + +## 2. Intuition: Shrinking the Universe + +Think of probability as a "Universe" of possibilities. When we say "given $B$," we are throwing away every part of the universe where $B$ did not happen. Our new total area is just $B$. + +
+ +```mermaid +sankey-beta + %% source,target,value + OriginalUniverse,EventB_Happens,60 + OriginalUniverse,EventB_DoesNotHappen,40 + EventB_Happens,EventA_Happens_GivenB,20 + EventB_Happens,EventA_DoesNotHappen_GivenB,40 + +``` + +
+ +## 3. Independent vs. Dependent Events + +How do we know if one event affects another? We look at their conditional probabilities. + +### A. Independent Events + +Event A and B are independent if the occurrence of B provides **zero** new information about $A$. + +* **Mathematical Check:** $P(A|B) = P(A)$ +* **Example:** Rolling a 6 on a die given that you ate an apple for breakfast. + +### B. Dependent Events + +Event A and B are dependent if knowing B happened changes the likelihood of $A$. + +* **Mathematical Check:** $P(A|B) \neq P(A)$ +* **Example:** Having a cough $(A)$ given that you have a cold $(B)$. + +## 4. The Multiplication Rule + +We can rearrange the conditional probability formula to find the probability of both events happening: + +This is the foundation for the **Chain Rule of Probability**, which allows ML models to calculate the probability of a long sequence of events (like a sentence in an LLM). + +## 5. Application: Predictive Modeling + +In Machine Learning, almost every prediction is a conditional probability. + +```mermaid +flowchart LR + Input[Data Features X] --> Model[ML Model] + Model --> Output["P(Y | X)"] + style Output fill:#f9f,stroke:#333,color:#333,stroke-width:2px + +``` + +* **Medical Diagnosis:** $P(\text{Disease} \mid \text{Symptoms})$ +* **Spam Filter:** $P(\text{Spam} \mid \text{Words in Email})$ +* **Self-Driving Cars:** $P(\text{Pedestrian crosses} \mid \text{Camera Image})$ + + +--- + + +If we flip the question—if we know $P(A|B)$ but we want to find $P(B|A)$ we use the most powerful tool in probability theory. \ No newline at end of file diff --git a/docs/machine-learning/probability/pdf-pmf.mdx b/docs/machine-learning/probability/pdf-pmf.mdx index e69de29..aff1401 100644 --- a/docs/machine-learning/probability/pdf-pmf.mdx +++ b/docs/machine-learning/probability/pdf-pmf.mdx @@ -0,0 +1,102 @@ +--- +title: "PMF vs. PDF" +sidebar_label: PMF & PDF +description: "A deep dive into Probability Mass Functions (PMF) for discrete data and Probability Density Functions (PDF) for continuous data." +tags: [probability, pmf, pdf, statistics, mathematics-for-ml, distributions] +--- + +To work with data in Machine Learning, we need a mathematical way to describe how likely different values are to occur. Depending on whether our data is **Discrete** (countable) or **Continuous** (measurable), we use either a **PMF** or a **PDF**. + +## 1. Probability Mass Function (PMF) + +The **PMF** is used for discrete random variables. It gives the probability that a discrete random variable is exactly equal to some value. + +### Key Mathematical Properties: +1. **Direct Probability:** $P(X = x) = f(x)$. The "height" of the bar is the actual probability. +2. **Summation:** All individual probabilities must sum to 1. + $$ + \sum_{i} P(X = x_i) = 1 + $$ +3. **Range:** $0 \le P(X = x) \le 1$. + + +Probability Mass Function plot for a Binomial Distribution + +**Example:** If you roll a fair die, the PMF is $1/6$ for each value $\{1, 2, 3, 4, 5, 6\}$. There is no "1.5" or "2.7"; the probability exists only at specific points. + +## 2. Probability Density Function (PDF) + +The **PDF** is used for continuous random variables. Unlike the PMF, the "height" of a PDF curve does **not** represent probability; it represents **density**. + +### The "Zero Probability" Paradox +In a continuous world (like height or time), the probability of a variable being *exactly* a specific number (e.g., exactly $175.00000...$ cm) is effectively **0**. + +Instead, we find the probability over an **interval** by calculating the **area under the curve**. + +### Key Mathematical Properties: +1. **Area is Probability:** The probability that $X$ falls between $a$ and $b$ is the integral of the PDF: + $$ + P(a \le X \le b) = \int_{a}^{b} f(x) dx + $$ +2. **Total Area:** The total area under the entire curve must equal 1. + $$ + \int_{-\infty}^{\infty} f(x) dx = 1 + $$ +3. **Density vs. Probability:** $f(x)$ can be greater than 1, as long as the total area remains 1. + + +## 3. Comparison at a Glance + +```mermaid +graph LR + Data[Data Type] --> Disc[Discrete] + Data --> Cont[Continuous] + + Disc --> PMF["PMF: $$P(X=x)$$"] + Cont --> PDF["PDF: $$f(x)$$"] + + PMF --> P_Sum["$$\sum P(x) = 1$$"] + PDF --> P_Int["$$\int f(x)dx = 1$$"] + + PMF --> P_Val["Height = Probability"] + PDF --> P_Area["Area = Probability"] +``` + +| Feature | PMF (Discrete) | PDF (Continuous) | +| --- | --- | --- | +| **Variable Type** | Countable (Integers) | Measurable (Real Numbers) | +| **Probability at a point** | $P(X=x) = \text{Height}$ | $P(X=x) = 0$ | +| **Probability over range** | Sum of heights | Area under the curve (Integral) | +| **Visualization** | Bar chart / Stem plot | Smooth curve | + +--- + +## 4. The Bridge: Cumulative Distribution Function (CDF) + +The **CDF** is the "running total" of probability. It tells you the probability that a variable is **less than or equal to** $x$. + +* **For PMF:** It is a step function (it jumps at every discrete value). +* **For PDF:** It is a smooth S-shaped curve. + +$$ +F(x) = P(X \le x) +$$ + +```mermaid +graph LR + PDF["PDF (Density)
$$f(x)$$"] -- " Integrate:
$$\int_{-\infty}^{x} f(t) dt$$ " --> CDF["CDF (Cumulative)
$$F(x)$$"] + CDF -- " Differentiate:
$$\frac{d}{dx} F(x)$$ " --> PDF + + style PDF fill:#fdf,stroke:#333,color:#333 + style CDF fill:#def,stroke:#333,color:#333 +``` + +## 5. Why this matters in Machine Learning + +1. **Likelihood Functions:** When training models (like Logistic Regression), we maximize the **Likelihood**. For discrete labels, this uses the PMF; for continuous targets, it uses the PDF. +2. **Anomaly Detection:** We often flag a data point as an outlier if its PDF value (density) is below a certain threshold. +3. **Generative Models:** VAEs and GANs attempt to learn the underlying **PDF** of a dataset so they can sample new points from high-density regions (creating realistic images or text). + +--- + +Now that you understand how we describe probability at a point or over an area, it's time to meet the most important distribution in all of data science. \ No newline at end of file diff --git a/docs/machine-learning/probability/probability-distributions/binomial.mdx b/docs/machine-learning/probability/probability-distributions/binomial.mdx index e69de29..5c05935 100644 --- a/docs/machine-learning/probability/probability-distributions/binomial.mdx +++ b/docs/machine-learning/probability/probability-distributions/binomial.mdx @@ -0,0 +1,115 @@ +--- +title: "Bernoulli and Binomial Distributions" +sidebar_label: Binomial +description: "Understanding the foundations of binary outcomes: The Bernoulli trial and the Binomial distribution, essential for classification models." +tags: [probability, binomial, bernoulli, discrete-math, classification, mathematics-for-ml] +--- + +In Machine Learning, we often ask "Yes/No" questions: Will a user click this ad? Is this transaction fraudulent? Does the image contain a cat? These binary outcomes are modeled using the **Bernoulli** and **Binomial** distributions. + +## 1. The Bernoulli Distribution + +A **Bernoulli Distribution** is the simplest discrete distribution. It represents a single trial with exactly two possible outcomes: **Success** (1) and **Failure** (0). + +### The Math +If $p$ is the probability of success, then $1-p$ (often denoted as $q$) is the probability of failure. + +$$ +P(X = x) = p^x (1-p)^{1-x} \quad \text{for } x \in \{0, 1\} +$$ + +* **Mean ($\mu$):** $p$ +* **Variance ($\sigma^2$):** $p(1-p)$ + +## 2. The Binomial Distribution + +The **Binomial Distribution** is the sum of $n$ independent Bernoulli trials. It tells us the probability of getting exactly $k$ successes in $n$ attempts. + +### The 4 Conditions (B.I.N.S.) +For a variable to follow a Binomial distribution, it must meet these criteria: +1. **Binary:** Only two outcomes per trial (Success/Failure). +2. **Independent:** The outcome of one trial doesn't affect the next. +3. **Number:** The number of trials ($n$) is fixed in advance. +4. **Same:** The probability of success ($p$) is the same for every trial. + +### The Formula +The Probability Mass Function (PMF) is: + +$$ +P(X = k) = \binom{n}{k} p^k (1-p)^{n-k} +$$ + +Where $\binom{n}{k}$ is the "n-choose-k" combination formula: $\frac{n!}{k!(n-k)!}$. + +```mermaid +graph TD + Start["$$n$$ Independent Trials"] --> Success["Success (p)"] + Start --> Failure["Failure (1-p)"] + Success --> Binomial["Binomial Distribution: $$X \sim B(n, p)$$"] + style Binomial fill:#f3f,color:#333,stroke:#333,stroke-width:2px + +``` + +
+ +## 3. Visualizing the Trials + +If we have $n=3$ trials, the possible outcomes can be visualized as a tree. The Binomial distribution simply groups these outcomes by the total number of successes. + +```mermaid +graph LR + %% Main Tree Structure + Root([Start]) --> H1["H ($$p$$)"] + Root --> T1["T ($$q$$)"] + + H1 --> H2["HH ($$p^2$$)"] + H1 --> T2["HT ($$pq$$)"] + + T1 --> H3["TH ($$qp$$)"] + T1 --> T3["TT ($$q^2$$)"] + + %% Using a Subgraph to represent the "Note" + subgraph Logic ["The Binomial distribution"] + H2 + T2 + H3 + T3 + end + + %% Styling for clarity + style Logic fill:#f5f5f5,stroke:#333,color:#333,stroke-dasharray: 5 5 + style Root fill:#e1f5fe,color:#333,stroke:#01579b +``` + +
+ +## 4. Why this matters in Machine Learning + +### A. Binary Classification + +When you train a Logistic Regression model, you are essentially assuming your target variable follows a **Bernoulli distribution**. The model outputs the parameter $p$ (the probability of the positive class). + +### B. Evaluation (A/B Testing) + +If you show an ad to $1,000$ people ($n$) and $50$ click it, you use the Binomial distribution to calculate the confidence interval of your click-through rate. + +### C. Logistic Loss (Cross-Entropy) + +The "Loss Function" used in most neural networks is derived directly from the likelihood of a Bernoulli distribution. Minimizing this loss is equivalent to finding the p that best fits your binary data. + +$$ +\text{Loss} = -\frac{1}{n} \sum [y \log(p) + (1-y) \log(1-p)] +$$ + +## 5. Summary Table + +| Feature | Bernoulli | Binomial | +| --- | --- | --- | +| **Number of Trials** | $1$ | $n$ | +| **Outcomes** | $0$ or $1$| $0$, $1$, $2$, $\dots$, $n$ | +| **Mean** | $p$ | $np$ | +| **Variance** | $p(1-p)$ | $np(1-p)$ | + +--- + +The Binomial distribution covers discrete successes. But what if we are counting the number of events happening over a fixed interval of time or space? For that, we turn to the Poisson distribution. \ No newline at end of file diff --git a/docs/machine-learning/probability/probability-distributions/normal.mdx b/docs/machine-learning/probability/probability-distributions/normal.mdx index e69de29..9c70747 100644 --- a/docs/machine-learning/probability/probability-distributions/normal.mdx +++ b/docs/machine-learning/probability/probability-distributions/normal.mdx @@ -0,0 +1,78 @@ +--- +title: "The Normal (Gaussian) Distribution" +sidebar_label: Normal +description: "A deep dive into the Normal Distribution, the Central Limit Theorem, and why Gaussian assumptions are the backbone of many Machine Learning algorithms." +tags: [probability, gaussian, normal-distribution, clt, statistics, mathematics-for-ml] +--- + +The **Normal Distribution**, often called the **Gaussian Distribution**, is the most significant probability distribution in statistics and Machine Learning. It is characterized by its iconic symmetric "bell shape," where most observations cluster around the central peak. + +## 1. The Mathematical Definition + +A continuous random variable $X$ is said to be normally distributed with mean $\mu$ and variance $\sigma^2$ (denoted as $X \sim \mathcal{N}(\mu, \sigma^2)$) if its Probability Density Function (PDF) is: + +$$ +f(x) = \frac{1}{\sigma\sqrt{2\pi}} e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2} +$$ + +### Key Parameters: +* **Mean ($\mu$):** Determines the center of the peak (location). +* **Standard Deviation ($\sigma$):** Determines the "spread" or width of the bell (scale). + +## 2. The Empirical Rule (68-95-99.7) + +One of the most useful properties of the Normal Distribution is that we know exactly how much data falls within specific distances from the mean. + +```mermaid +graph TD + Mean["Mean: $$\mu$$"] --> P1["$$\mu \pm 1\sigma$$"] + Mean --> P2["$$\mu \pm 2\sigma$$"] + Mean --> P3["$$\mu \pm 3\sigma$$"] + + P1 -->|Contains| C1["68.2% of data"] + P2 -->|Contains| C2["95.4% of data"] + P3 -->|Contains| C3["99.7% of data"] + +``` + +## 3. The Standard Normal Distribution (Z) + +A **Standard Normal Distribution** is a special case where the mean is 0 and the standard deviation is $1$. + +$$ +Z \sim \mathcal{N}(0, 1) +$$ + +We can convert any normal distribution into a standard one using the **Z-score formula**. This process is called **Standardization**, a critical step in ML feature engineering. + +$$ +z = \frac{x - \mu}{\sigma} +$$ + +## 4. The Central Limit Theorem (CLT) + +Why is the Normal Distribution so "normal"? Because of the **Central Limit Theorem**. + +> **CLT:** If you take many independent random samples from *any* distribution and calculate their mean, the distribution of those means will approach a Normal Distribution as the sample size increases. + +This is why we assume errors in measurement or noise in data follow a Gaussian distribution—they are usually the sum of many small, independent random effects. + +## 5. Why Normal Distribution is the "King" of ML + +1. **Algorithm Assumptions:** Many models, like **Linear Regression** and **Logistic Regression**, assume that the residual errors are normally distributed. +2. **Gaussian Naive Bayes:** This classifier assumes that the continuous features associated with each class are normally distributed. +3. **Weight Initialization:** In Deep Learning, we often initialize neural network weights using a truncated normal distribution (like **He initialization** or **Xavier initialization**) to prevent gradients from exploding or vanishing. +4. **Gaussian Processes:** A powerful family of models used for regression and optimization that relies entirely on multivariate normal distributions. + +## 6. Summary Comparison + +| Feature | Description | +| --- | --- | +| **Symmetry** | Perfectly symmetric around the mean. | +| **Measures of Center** | Mean = Median = Mode. | +| **Asymptotic** | The tails approach but never touch the horizontal axis (x). | +| **Total Area** | Exactly equal to 1. | + +--- + +The Normal Distribution handles continuous data perfectly. But what if we are counting successes and failures in discrete steps? For that, we turn to the Binomial and Bernoulli distributions. \ No newline at end of file diff --git a/docs/machine-learning/probability/probability-distributions/poisson.mdx b/docs/machine-learning/probability/probability-distributions/poisson.mdx index e69de29..713016a 100644 --- a/docs/machine-learning/probability/probability-distributions/poisson.mdx +++ b/docs/machine-learning/probability/probability-distributions/poisson.mdx @@ -0,0 +1,87 @@ +--- +title: Poisson Distribution +sidebar_label: Poisson +description: "Understanding the Poisson distribution: modeling the number of events occurring within a fixed interval of time or space." +tags: [probability, poisson, discrete-math, stochastic-processes, mathematics-for-ml] +--- + +While the Binomial distribution counts successes in a fixed number of **trials**, the **Poisson Distribution** counts the number of times an event occurs in a fixed **interval** of time or space. + +## 1. What defines a Poisson Process? + +For a variable to follow a Poisson distribution, it must meet three specific criteria: + +```mermaid +graph TD + Start([Poisson Conditions]) --> C1["Independance: Events don't affect each other"] + Start --> C2["Constant Rate: Average frequency ($$\lambda$$) is stable"] + Start --> C3["Simultaneity: Two events cannot happen at the exact same instant"] +``` + +## 2. The Mathematical Formula + +The Probability Mass Function (PMF) of a Poisson distribution tells us the probability of observing $k$ events in an interval, given the average rate $\lambda$ (Lambda). + +$$ +P(X = k) = \frac{e^{-\lambda} \lambda^k}{k!} +$$ + +### Key Parameters: + +* **$\lambda$ (Lambda):** The average number of events per interval. +* **$k$:** The actual number of occurrences we want to find the probability for ($0, 1, 2, \dots$). +* **$e$:** Euler's constant ($\approx 2.718$). + +### Properties: + +* **Mean ($\mu$):** $\lambda$ +* **Variance ($\sigma^2$):** $\lambda$ + +:::tip Unique Property +The Poisson distribution is unique because its **Mean and Variance are equal**. If your data's variance is much higher than its mean (Overdispersion), a simple Poisson model might not be enough! +::: + +## 3. Poisson as the "Limit" of Binomial + +The Poisson distribution is actually a special case of the Binomial distribution. When you have a massive number of trials ($n \to \infty$) and a very small probability of success ($p \to 0$), the Binomial distribution $B(n, p)$ turns into a Poisson distribution $P(\lambda)$ where $\lambda = np$. + +```mermaid +graph LR + B["Binomial: $$B(n, p)$$"] -->|n is large, p is small| P["Poisson: $$P(\lambda)$$"] + style P fill:#f9f,stroke:#333,color:#333,stroke-width:2px + +``` + +## 4. Why this matters in Machine Learning + +### A. Modeling Rare Events + +Poisson is used to model things like the number of credit card frauds per day or the number of times a server crashes in a month. These are "rare" relative to the total number of opportunities for them to happen. + +### B. Natural Language Processing (NLP) + +In some classical NLP models, the frequency of a rare keyword in a document is modeled using a Poisson distribution. This helps in identifying if a word appears more often than "random chance" would suggest. + +### C. Traffic Prediction + +Predicting the number of queries reaching a database or the number of users logging into an app in a specific minute. This is vital for **Auto-scaling** infrastructure in cloud computing. + +### D. Poisson Regression + +This is a type of Generalized Linear Model (GLM) used when the target variable ($y$) is a **count** (e.g., predicting the number of insurance claims or the number of items sold). + +--- + +## 5. Summary Comparison + +| Feature | Binomial | Poisson | +| --- | --- | --- | +| **Interval** | Fixed number of trials ($n$) | Fixed unit of time/space | +| **Outcomes** | Binary (Success/Failure) | Non-negative counts ($0, 1, \dots$) | +| **Key Parameter** | $p$ (Probability) | $\lambda$ (Average rate) | +| **Limit** | $n$ is finite | $n$ is infinite (theoretically) | + + +--- + +Now that we've covered the most important discrete and continuous distributions, how do we use them to actually evaluate a model's performance? We need to look at how we measure the distance between two distributions. \ No newline at end of file diff --git a/docs/machine-learning/probability/probability-distributions/uniform.mdx b/docs/machine-learning/probability/probability-distributions/uniform.mdx index e69de29..250c955 100644 --- a/docs/machine-learning/probability/probability-distributions/uniform.mdx +++ b/docs/machine-learning/probability/probability-distributions/uniform.mdx @@ -0,0 +1,87 @@ +--- +title: Uniform Distribution +sidebar_label: Uniform +description: "Exploring the Discrete and Continuous Uniform distributions: the foundation of random sampling and model initialization." +tags: [probability, uniform-distribution, random-sampling, mathematics-for-ml] +--- + +The **Uniform Distribution** is the simplest probability distribution. It describes a scenario where every possible outcome is equally likely to occur. In Machine Learning, it is the bedrock of random number generation and the initial state of many neural networks. + +## 1. Two Flavors of Uniformity + +We distinguish between the Uniform distribution based on whether the data is countable (Discrete) or measurable (Continuous). + +```mermaid +graph LR + U[Uniform Distribution] --> D["Discrete: $$X \in \{x_1, x_2, \dots, x_n\}$$"] + U --> C["Continuous: $$X \in [a, b]$$"] + + D --> D_Ex[Example: A fair die roll] + C --> C_Ex[Example: Picking any number between 0 and 1] + +``` + +## 2. Discrete Uniform Distribution + +A discrete random variable $X$ has a uniform distribution if each of the $n$ values in its range has the same probability. + +### The Math + +$$ +P(X = x) = \frac{1}{n} +$$ + +* **Mean ($\mu$):** $\frac{a + b}{2}$ +* **Variance ($\sigma^2$):** $\frac{n^2 - 1}{12}$ (for consecutive integers) + +## 3. Continuous Uniform Distribution + +A continuous random variable X on the interval [a, b] has a uniform distribution if its probability density is constant across that interval. + +### The Math + +The Probability Density Function (PDF) is: + +$$ +f(x) = \begin{cases} \frac{1}{b - a} & \text{for } a \le x \le b \\ 0 & \text{otherwise} \end{cases} +$$ + +### Key Properties: + +* **Mean ($\mu$):** $\frac{a + b}{2}$ (The midpoint of the interval) +* **Variance ($\sigma^2$):** $\frac{(b - a)^2}{12}$ + +:::info The "Rectangle" Distribution +Because the height is constant ($1/(b-a)$) and the width is ($b-a$), the total area is always 1. This is why the continuous uniform distribution is often visualized as a perfect rectangle. +::: + +## 4. Why this matters in Machine Learning + +### A. Weight Initialization + +When we start training a Neural Network, we cannot set all weights to zero (this causes symmetry problems). Instead, we often initialize weights using a **Uniform Distribution** (e.g., between $-0.05$ and $0.05$) to give each neuron a unique starting point. + +### B. Random Sampling and Shuffling + +When we "shuffle" a dataset before training, we are using a discrete uniform distribution to ensure that every row has an equal probability of appearing in any given position in the batch. + +### C. Data Augmentation + +In computer vision, we might rotate an image by a random angle. We typically pick that angle from a continuous uniform distribution, such as $\text{Angle} \sim \mathcal{U}(-20^\circ, 20^\circ)$, to ensure we aren't biasing the model toward specific rotations. + +### D. Hyperparameter Search (Random Search) + +Instead of checking every single value (Grid Search), **Random Search** picks hyperparameter values from a uniform distribution. Statistically, this is often more efficient at finding the optimal "needle in the haystack." + +## 5. Summary Table + +| Feature | Discrete Uniform | Continuous Uniform | +| --- | --- | --- | +| **Notation** | $X \sim \mathcal{U}(n)$ | $X \sim \mathcal{U}(a, b)$ | +| **Height** | $1/n$ (Probability) | $1/(b-a)$ (Density) | +| **Shape** | Set of equal-height dots/bars | A flat rectangle | +| **Common Use** | Shuffling, Dice, Indices | Weight initialization, Augmentation | + +--- + +We have now covered the "Big Four" distributions: Normal, Binomial, Poisson, and Uniform. But how do we measure the "distance" between these distributions or the "information" they contain? \ No newline at end of file diff --git a/docs/machine-learning/probability/random-variables.mdx b/docs/machine-learning/probability/random-variables.mdx index e69de29..43a979a 100644 --- a/docs/machine-learning/probability/random-variables.mdx +++ b/docs/machine-learning/probability/random-variables.mdx @@ -0,0 +1,102 @@ +--- +title: Random Variables +sidebar_label: Random Variables +description: "Understanding Discrete and Continuous Random Variables, Probability Mass Functions (PMF), and Probability Density Functions (PDF)." +tags: [probability, random-variables, pmf, pdf, cdf, mathematics-for-ml] +--- + +In probability, a **Random Variable (RV)** is a functional mapping that assigns a numerical value to each outcome in a sample space. It allows us to move from qualitative outcomes (like "Rain" or "No Rain") to quantitative data that we can feed into a Machine Learning model. + +## 1. What exactly is a Random Variable? + +A random variable is **not** a variable in the algebraic sense (where $x = 5$). Instead, it is a **function** that maps the sample space $S$ to the real numbers $\mathbb{R}$. + +**Example:** If you flip two coins, the sample space is $\{HH, HT, TH, TT\}$. +We can define a Random Variable $X$ as the "Number of Heads." +* $X(HH) = 2$ +* $X(HT) = 1$ +* $X(TT) = 0$ + +## 2. Types of Random Variables + +Machine Learning handles two distinct types of data, which correspond to the two types of random variables: + +```mermaid +graph TD + RV[Random Variables] --> Discrete[Discrete Random Variables] + RV --> Continuous[Continuous Random Variables] + + Discrete --> D_Ex[Countable: 0, 1, 2, ...] + Discrete --> D_Tool[Probability Mass Function - PMF] + + Continuous --> C_Ex[Uncountable: 1.72, 3.14, ...] + Continuous --> C_Tool[Probability Density Function - PDF] + +``` + +### A. Discrete Random Variables + +These take on a finite or countably infinite number of distinct values. + +* **ML Example:** The number of clicks on an ad, the number of words in a sentence. +* **Function:** Uses a **Probability Mass Function (PMF)**, $P(X = x)$. + +### B. Continuous Random Variables + +These can take any value within a range or interval. + +* **ML Example:** The probability that a house will sell for a specific price, the weight of a person. +* **Function:** Uses a **Probability Density Function (PDF)**, $f(x)$. + +:::warning Important Distinction +For a continuous variable, the probability of the variable being **exactly** one specific number (e.g., $P(X = 1.700000...)$) is always **$0$**. Instead, we calculate the probability over an **interval**. +::: + +--- + +## 3. Describing Distributions + +To understand the behavior of a Random Variable, we use three primary functions: + +| Function | Symbol | Purpose | +| --- | --- | --- | +| **PMF / PDF** | $P(X)$ or $f(x)$ | The probability (or density) of a specific value. | +| **CDF** | $F(x)$ | The probability that $X$ will be **less than or equal to** $x$. | +| **Expected Value** | $\mathbb{E}[X]$ | The "long-term average" or center of the distribution. | + +### The Cumulative Distribution Function (CDF) + +The CDF is defined for both discrete and continuous variables: + +$$ +F(x) = P(X \le x) +$$ + +## 4. Expected Value and Variance + +In Machine Learning, we often want to know the "typical" value of a feature and how much it varies. + +### Expected Value (Mean) + +The weighted average of all possible values. + +* **Discrete:** $\mathbb{E}[X] = \sum x P(x)$ +* **Continuous:** $\mathbb{E}[X] = \int_{-\infty}^{\infty} x f(x) dx$ + +### Variance + +Measures the "spread" or "risk" of the random variable. It tells us how much the values typically deviate from the mean. + +$$ +\text{Var}(X) = \mathbb{E}[(X - \mu)^2] +$$ + +## 5. Why Random Variables Matter in ML + +1. **Features and Targets:** In the equation $y = f(x) + \epsilon$, $x$ and $y$ are random variables, and \epsilon (noise) is a random variable representing uncertainty. +2. **Loss Functions:** When we minimize a loss function, we are often trying to minimize the **Expected Value** of the error. +3. **Sampling:** Techniques like **Monte Carlo Dropout** or **Variational Autoencoders (VAEs)** rely on sampling from random variables to generate new data or estimate uncertainty. + +--- + +Now that we understand how to turn events into numbers, we can look at common patterns these numbers follow. This leads us into specific Probability Distributions. \ No newline at end of file diff --git a/static/img/tutorials/ml/probability-mass-function.jpg b/static/img/tutorials/ml/probability-mass-function.jpg new file mode 100644 index 0000000000000000000000000000000000000000..20f4f01163dcc3bfcda43360f0a865397a808ec2 GIT binary patch literal 57644 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 W6(LfZkjYCa0)+vjo)tM#KmXZuavj$I literal 0 HcmV?d00001