<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Machine Learning on Yahel Uffenheimer</title><link>https://yahel1216.github.io/categories/machine-learning/</link><description>Recent content in Machine Learning on Yahel Uffenheimer</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Tue, 20 Jan 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://yahel1216.github.io/categories/machine-learning/index.xml" rel="self" type="application/rss+xml"/><item><title>The Nystrom Method: Spectral Action</title><link>https://yahel1216.github.io/posts/kernel-4/</link><pubDate>Tue, 20 Jan 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/kernel-4/</guid><description>&lt;div
 class="alert alert-abstract my-6 overflow-hidden rounded-lg transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 style="background-color: color-mix(in srgb, var(--color-) 10%, transparent);
 border-left-color: var(--color-);
 --hover-bg: color-mix(in srgb, var(--color-) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-) 10%, transparent)'"
 role="alert"
 aria-labelledby="alert-0-title"&gt;
 
 &lt;div
 class=" flex items-center justify-between px-6 py-6"
 &gt;
 &lt;div class="flex items-center gap-3"&gt;
 
 &lt;h4
 id="alert-0-title"
 class="m-0 font-semibold text-foreground/90"&gt;
 Prerequisites
 &lt;/h4&gt;
 &lt;/div&gt;

 
 
 &lt;/div&gt;

 
 &lt;div
 id="alert-0-content"
 class="alert-content px-6 pb-6"&gt;
 &lt;div class="prose prose-sm text-foreground/90 max-w-none"&gt;
 &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Linear Algebra:&lt;/strong&gt; Eigen-decompositions, positive definite matrices, rank.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Functional Analysis:&lt;/strong&gt; Hilbert spaces, $L^2$ spaces, operators.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kernel Methods:&lt;/strong&gt; Previous posts in the series.&lt;/li&gt;
&lt;/ul&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;&lt;script&gt;
function toggleAlert(alertId) {
 const content = document.getElementById(alertId + '-content');
 const chevron = document.getElementById(alertId + '-chevron');
 const header = content.previousElementSibling;
 
 if (content.classList.contains('hidden')) {
 content.classList.remove('hidden');
 chevron.style.transform = 'rotate(0deg)';
 header.setAttribute('aria-expanded', 'true');
 } else {
 content.classList.add('hidden');
 chevron.style.transform = 'rotate(-90deg)';
 header.setAttribute('aria-expanded', 'false');
 }
}


document.addEventListener('DOMContentLoaded', function() {
 const collapsedAlerts = document.querySelectorAll('.alert-content.hidden');
 collapsedAlerts.forEach(function(content) {
 const alertId = content.id.replace('-content', '');
 const chevron = document.getElementById(alertId + '-chevron');
 if (chevron) {
 chevron.style.transform = 'rotate(-90deg)';
 }
 });
});
&lt;/script&gt;

&lt;p&gt;Continuing our series on kernel methods, recall that these methods allow us to operate in high-dimensional spaces using the &amp;ldquo;kernel trick&amp;rdquo;. However, they suffer from a major computational bottleneck: constructing and manipulating the Gram matrix requires $O(N^2)$ memory and $O(N^3)$ time for operations like inversion or eigen decomposition, where $N$ is the dataset size. When $N$ reaches hundreds of thousands, exact computation becomes infeasible. In this post, I will explore the &lt;strong&gt;Nystrom method&lt;/strong&gt;, a powerful technique for constructing low-rank approximations of these matrices. Rather than treating it merely as a linear algebra heuristic, I want to derive it from first principles: starting with the spectral properties of integral operators on Hilbert spaces and showing how the discretization of these operators naturally leads to the matrix approximation formulas we use in practice.&lt;/p&gt;</description></item><item><title>Random Fourier Features</title><link>https://yahel1216.github.io/posts/kernel-2/</link><pubDate>Fri, 09 Jan 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/kernel-2/</guid><description>&lt;div
 class="alert alert-info my-6 overflow-hidden rounded-lg transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 style="background-color: color-mix(in srgb, var(--color-) 10%, transparent);
 border-left-color: var(--color-);
 --hover-bg: color-mix(in srgb, var(--color-) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-) 10%, transparent)'"
 role="alert"
 aria-labelledby="alert-0-title"&gt;
 
 &lt;div
 class=" flex items-center justify-between px-6 py-6"
 &gt;
 &lt;div class="flex items-center gap-3"&gt;
 
 &lt;h4
 id="alert-0-title"
 class="m-0 font-semibold text-foreground/90"&gt;
 Prerequisites
 &lt;/h4&gt;
 &lt;/div&gt;

 
 
 &lt;/div&gt;

 
 &lt;div
 id="alert-0-content"
 class="alert-content px-6 pb-6"&gt;
 &lt;div class="prose prose-sm text-foreground/90 max-w-none"&gt;
 &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Analysis:&lt;/strong&gt; Basic Fourier Analysis (transforms, exponentials).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Probability:&lt;/strong&gt; Concentration inequalities (Hoeffding), expectation, and Gaussian distributions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kernel Methods:&lt;/strong&gt; Familiarity with the basic kernel trick (see &lt;a href="https://yahel1216.github.io/posts/kernel-1"&gt;previous post&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;&lt;script&gt;
function toggleAlert(alertId) {
 const content = document.getElementById(alertId + '-content');
 const chevron = document.getElementById(alertId + '-chevron');
 const header = content.previousElementSibling;
 
 if (content.classList.contains('hidden')) {
 content.classList.remove('hidden');
 chevron.style.transform = 'rotate(0deg)';
 header.setAttribute('aria-expanded', 'true');
 } else {
 content.classList.add('hidden');
 chevron.style.transform = 'rotate(-90deg)';
 header.setAttribute('aria-expanded', 'false');
 }
}


document.addEventListener('DOMContentLoaded', function() {
 const collapsedAlerts = document.querySelectorAll('.alert-content.hidden');
 collapsedAlerts.forEach(function(content) {
 const alertId = content.id.replace('-content', '');
 const chevron = document.getElementById(alertId + '-chevron');
 if (chevron) {
 chevron.style.transform = 'rotate(-90deg)';
 }
 });
});
&lt;/script&gt;

&lt;p&gt;In the previous post, we introduced the idea of kernels as a way to lift a separation problem to a much larger space (potentially infinite-dimensional) while keeping the computation tractable via the &amp;ldquo;Kernel Trick.&amp;rdquo; We also mentioned that when the number of points in the dataset is very large—which is the case in most modern applications—the kernel method is less useful, as it requires computing and storing a huge $n \times n$ matrix.&lt;/p&gt;</description></item><item><title>Tensor Sketch: Polynomial Kernels</title><link>https://yahel1216.github.io/posts/kernel-3/</link><pubDate>Fri, 09 Jan 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/kernel-3/</guid><description>&lt;div
 class="alert alert-info my-6 overflow-hidden rounded-lg transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 style="background-color: color-mix(in srgb, var(--color-) 10%, transparent);
 border-left-color: var(--color-);
 --hover-bg: color-mix(in srgb, var(--color-) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-) 10%, transparent)'"
 role="alert"
 aria-labelledby="alert-0-title"&gt;
 
 &lt;div
 class=" flex items-center justify-between px-6 py-6"
 &gt;
 &lt;div class="flex items-center gap-3"&gt;
 
 &lt;h4
 id="alert-0-title"
 class="m-0 font-semibold text-foreground/90"&gt;
 Prerequisites
 &lt;/h4&gt;
 &lt;/div&gt;

 
 
 &lt;/div&gt;

 
 &lt;div
 id="alert-0-content"
 class="alert-content px-6 pb-6"&gt;
 &lt;div class="prose prose-sm text-foreground/90 max-w-none"&gt;
 &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Linear Algebra:&lt;/strong&gt; Inner products, tensor products, and vectorization.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Probability:&lt;/strong&gt; Hash functions, independence, and variance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Algorithms:&lt;/strong&gt; Fast Fourier Transform (FFT) and basic convolution.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kernel Methods:&lt;/strong&gt; Familiarity with the Polynomial Kernel.&lt;/li&gt;
&lt;/ul&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;&lt;script&gt;
function toggleAlert(alertId) {
 const content = document.getElementById(alertId + '-content');
 const chevron = document.getElementById(alertId + '-chevron');
 const header = content.previousElementSibling;
 
 if (content.classList.contains('hidden')) {
 content.classList.remove('hidden');
 chevron.style.transform = 'rotate(0deg)';
 header.setAttribute('aria-expanded', 'true');
 } else {
 content.classList.add('hidden');
 chevron.style.transform = 'rotate(-90deg)';
 header.setAttribute('aria-expanded', 'false');
 }
}


document.addEventListener('DOMContentLoaded', function() {
 const collapsedAlerts = document.querySelectorAll('.alert-content.hidden');
 collapsedAlerts.forEach(function(content) {
 const alertId = content.id.replace('-content', '');
 const chevron = document.getElementById(alertId + '-chevron');
 if (chevron) {
 chevron.style.transform = 'rotate(-90deg)';
 }
 });
});
&lt;/script&gt;

&lt;p&gt;In previous posts, we discussed the Radial Basis Function (RBF) kernel and how to approximate it using &lt;strong&gt;Random Fourier Features&lt;/strong&gt;. Today, we turn our attention to another fundamental kernel—the &lt;strong&gt;Polynomial Kernel&lt;/strong&gt;—and a powerful algebraic technique to approximate it called &lt;strong&gt;Tensor Sketching&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>The Kernel Method</title><link>https://yahel1216.github.io/posts/kernel-1/</link><pubDate>Thu, 08 Jan 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/kernel-1/</guid><description>&lt;div
 class="alert alert-info my-6 overflow-hidden rounded-lg transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 style="background-color: color-mix(in srgb, var(--color-) 10%, transparent);
 border-left-color: var(--color-);
 --hover-bg: color-mix(in srgb, var(--color-) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-) 10%, transparent)'"
 role="alert"
 aria-labelledby="alert-0-title"&gt;
 
 &lt;div
 class=" flex items-center justify-between px-6 py-6"
 &gt;
 &lt;div class="flex items-center gap-3"&gt;
 
 &lt;h4
 id="alert-0-title"
 class="m-0 font-semibold text-foreground/90"&gt;
 Prerequisites
 &lt;/h4&gt;
 &lt;/div&gt;

 
 
 &lt;/div&gt;

 
 &lt;div
 id="alert-0-content"
 class="alert-content px-6 pb-6"&gt;
 &lt;div class="prose prose-sm text-foreground/90 max-w-none"&gt;
 &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Linear Algebra:&lt;/strong&gt; Inner product spaces, positive definite matrices, spectral decomposition, projections.&lt;/li&gt;
&lt;/ul&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;&lt;script&gt;
function toggleAlert(alertId) {
 const content = document.getElementById(alertId + '-content');
 const chevron = document.getElementById(alertId + '-chevron');
 const header = content.previousElementSibling;
 
 if (content.classList.contains('hidden')) {
 content.classList.remove('hidden');
 chevron.style.transform = 'rotate(0deg)';
 header.setAttribute('aria-expanded', 'true');
 } else {
 content.classList.add('hidden');
 chevron.style.transform = 'rotate(-90deg)';
 header.setAttribute('aria-expanded', 'false');
 }
}


document.addEventListener('DOMContentLoaded', function() {
 const collapsedAlerts = document.querySelectorAll('.alert-content.hidden');
 collapsedAlerts.forEach(function(content) {
 const alertId = content.id.replace('-content', '');
 const chevron = document.getElementById(alertId + '-chevron');
 if (chevron) {
 chevron.style.transform = 'rotate(-90deg)';
 }
 });
});
&lt;/script&gt;

&lt;p&gt;In this post, we will explore the idea of kernels in machine learning. In future posts, we will explore different ways to approximate specific kernel computations. Approximation is useful for big data applications due to the prohibitively high cost of exact kernel computations.&lt;/p&gt;</description></item></channel></rss>