<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Optimization on Yahel Uffenheimer</title><link>https://yahel1216.github.io/tags/optimization/</link><description>Recent content in Optimization on Yahel Uffenheimer</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Tue, 31 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://yahel1216.github.io/tags/optimization/index.xml" rel="self" type="application/rss+xml"/><item><title>Clarkson's Algorithm for Linear Programming</title><link>https://yahel1216.github.io/posts/clarksons-lp-algorithm/</link><pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/clarksons-lp-algorithm/</guid><description>&lt;h1 id="clarksons-algorithm-for-linear-programming"&gt;Clarkson&amp;rsquo;s Algorithm for Linear Programming&lt;/h1&gt;
&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 Programming:&lt;/strong&gt; Feasibility, optimality, and the standard form of an LP.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Linear Algebra:&lt;/strong&gt; Rank, linear independence, matrix inverses, and spanning sets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Probability:&lt;/strong&gt; Expectation and Markov&amp;rsquo;s inequality.&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;hr&gt;
&lt;p&gt;Linear programs arise throughout combinatorial optimization, machine learning, and operations research. In many practical settings the number of constraints $n$ is enormous compared to the ambient dimension $d$ — think of $n = 10^6$ constraints in $d = 50$ dimensions. Standard algorithms like the simplex method take time proportional to $n$ per pivot, and interior-point methods scale as $O(n^{3.5})$ in the worst case. When $n \gg d$, most constraints are redundant: the optimal solution is determined by only $d$ of them.&lt;/p&gt;</description></item><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>Approximating the Cut-Norm - Part 1</title><link>https://yahel1216.github.io/posts/cut-norm/</link><pubDate>Mon, 12 Jan 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/cut-norm/</guid><description>&lt;div
 class="alert alert-note 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-note) 10%, transparent);
 border-left-color: var(--color-note);
 --hover-bg: color-mix(in srgb, var(--color-note) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-note) 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; Eigenvalues, PSD matrices, Tensor products.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Convex Optimization:&lt;/strong&gt; Basic familiarity with Semidefinite Programming (SDP).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Probability:&lt;/strong&gt; Expectations, Markov&amp;rsquo;s inequality.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Graph Theory:&lt;/strong&gt; Basic definitions, Cuts, Regularity.&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;Consider the following problem: Given an undirected graph $G=(V,E)$, let $A,B\subset V$ denote non-empty disjoint sets. Let $E(A,B)$ denote the set of edges in $E$ that cross from $A$ to $B$. Denote $D(A,B)=\frac{\left|E(A,B)\right|}{\left|A\right|\left|B\right|}$ to be the &lt;strong&gt;density&lt;/strong&gt; of edges crossing from $A$ to $B$.&lt;/p&gt;</description></item><item><title>Approximating the Cut-Norm - Part 2</title><link>https://yahel1216.github.io/posts/cut-norm-2/</link><pubDate>Mon, 12 Jan 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/cut-norm-2/</guid><description>&lt;div
 class="alert alert-note 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-note) 10%, transparent);
 border-left-color: var(--color-note);
 --hover-bg: color-mix(in srgb, var(--color-note) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-note) 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; Eigenvalues, PSD matrices, Tensor products.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Convex Optimization:&lt;/strong&gt; Basic familiarity with Semidefinite Programming (SDP).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Probability:&lt;/strong&gt; Expectations, Markov&amp;rsquo;s inequality.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Graph Theory:&lt;/strong&gt; Basic definitions, Cuts, Regularity.&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;We are interested in computing the cut norm of a matrix, defined by $$\|A\|_C=\max_{I\subset R,J\subset S}\left|\sum_{i\in I,j\in J}a_{i,j}\right|$$
where $A=(a_{i,j})_{i\in R,j\in S}$. We&amp;rsquo;ve seen this is a hard problem, and it is often equivalent to computing the $\infty\mapsto 1$ norm, defined by $$\|A\|_{\infty\mapsto 1}=\max_{x\in \set{\pm 1}^R, y\in \set{\pm1}^S} \sum_{i\in R,j\in S} a_{i,j}\cdot x_i\cdot y_j$$
We&amp;rsquo;ve already seen that computing the latter norm can be done by solving an integer quadratic program, which has a relaxation to a quadratically constrained quadratic program given by $$\max \sum_{i,j}a_{i,j}\cdot \langle u_i, v_j\rangle \quad\text{subject to}\quad \|u_i \|^2 = \|v_j\|^2=1$$ where the optimization is over vectors $u_1,\ldots,u_n$ and $v_1,\ldots ,v_m$. We&amp;rsquo;ve seen that this problem can be solved using semi-definite programming, and we&amp;rsquo;ve seen one method to round the solution, giving an approximation factor of $\approx 0.03$. In this post, we&amp;rsquo;ll see another method, which is much cleaner, and uses randomized rounding of this SDP.&lt;/p&gt;</description></item><item><title>The Conjugate Gradient Method for Linear Equations</title><link>https://yahel1216.github.io/posts/conj-gradient/</link><pubDate>Sun, 11 Jan 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/conj-gradient/</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; Eigenvalues, eigenvectors, positive (semi-)definite (PSD) matrices, and the notion of orthogonality.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calculus:&lt;/strong&gt; Gradients and basic convexity.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimization:&lt;/strong&gt; Gradient Descent (GD) basics.&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;One of the most common tasks in numerical algorithms is to solve a linear equation—that is, find $x$ for which
$$Ax=b$$
for a given matrix $A$ and vector $b$. This can be solved via Gaussian elimination, which generally has a high runtime ($O(n^3)$). We will show how to improve upon this using optimization ideas. This is one instance of a problem for which we can find an &lt;strong&gt;approximate&lt;/strong&gt; solution much faster using &lt;strong&gt;calculus&lt;/strong&gt; tools, compared with using a close-form exact algebraic solution.&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>