+
+
diff --git a/src/content/articles/tr/linear-regression-nedir.mdx b/src/content/articles/tr/linear-regression-nedir.mdx
new file mode 100644
index 0000000..df24d76
--- /dev/null
+++ b/src/content/articles/tr/linear-regression-nedir.mdx
@@ -0,0 +1,217 @@
+---
+lang: 'tr'
+slug: 'linear-regression-nedir'
+title: 'Linear Regression Nedir?'
+excerpt: 'Linear regression etiketlenmiş veri setlerinden doğrusal ilişkiyi modellemek için kullanılan supervised makine öğrenmesi algoritmasıdır'
+category: 'machine-learning'
+tags: ['linear-regression', 'supervised-learning', 'teori']
+author: '@omerfdmrl'
+date: '2026-03-22'
+views: 0
+status: 'Published'
+---
+
+import ScatterChart3D from '../../../components/content/ScatterChart3D.astro'
+import ScatterChart from '../../../components/content/ScatterChart.astro'
+import CsvViewer from '../../../components/content/CsvViewer.astro'
+import JsonViewer from '../../../components/content/JsonViewer.astro'
+import Grid from '../../../components/content/Grid.astro'
+
+Linear regression etiketlenmiş veri setlerinden doğrusal ilişkiyi modellemek için kullanılan supervised makine öğrenmesi algoritmasıdır.
+Oluşturulan bu model, farklı bir veri seti üzerinde tahmin yapabilmemizi sağlar.
+Kullanabilmek için input ve output arasında linear bir ilişki olmalıdır, yani input noktası değiştikçe çıktının sabit bir oranla değişmesi gerekir.
+Bu sayede düz bir çizgi ile veriyi ayırabiliriz.
+
+
+
+
+
+
+
+
+Buradaki ilk grafikteki veri setimizi linear olduğu için ayırabiliriz, fakat ikinci örnekteki $y = x^2 + 4$ parabolünü ayıramayız.
+
+## Değişkenler ve Terminoloji
+
+İstatistik literatüründe input değerleri yordayıcı (predictor) veya daha çok kullanacağımız bağımsız değişken (independent variable) olarak adlandırılır.
+Çıktılar ise bağımlı değişken (dependent variable) olarak kullanılır.
+
+**Örneğin:** Öğrencilerin kaç saat ders çalıştığını ve aldığı sınav puanlarını tutan bir veri setimiz olsun.
+
+
+
+Verilerden yola çıkarak çalışma saati arttıkça notun da yükseldiğini görebiliriz.
+Yani bu örnekte sınav notu tahmini çalışma saatine göre yapılmaktadır.
+
+- **Bağımsız Değişken:** Çalışma saati çünkü kontrol edip gözlemleyebiliyoruz.
+- **Bağımlı Değişken:** Sınav sonucu çünkü kaaç saat ders çalıştığına bağlı.
+
+Bağımsız değişkeni (input) bağımlı değişkeni (output) tahmin etmek için kullanırız.
+Eğer bu örnğimizde olduğu gibi bir adet bağımlı ve bir adet bağımsız değişken varsa buna **basit (simple) linear regresyon** denir.
+
+
+
+
+
+
+
+
+Buradaki ilk örneğimizde olduğu gibi $y = a + bx$ basit bir regresyon örneğidir. Çünkü bağımsız değişkenimiz sadece `x`'dir.
+İkinci örnekte ise $y ≈ 5 + 4x + 2z$ formülünde `x` ve `z` bağımsız değişkendir yani toplam 2 adet bağımsız değişken vardır.
+Bu yüzden 1. örnekteki basit, ikinci örnekteki **çoklu (multiple) linear regression**'dur.
+
+Eğerki birden fazla bağımsız değişken (input) varsa ve birden fazla bağımlı (output) değişken tahmin etmeye çalışıyorsak **Çok Değişkenli (Multivariate) linear regression** denir.
+Yani diyelimki elimizde aşağıdaki gibi bir veri seti var:
+
+
+
+Burada çalışma saati ve çözdükleri deneme sayısıyla; matematik ve fizik sınav sonuçlarını tahmin etmeye çalışıyoruz.
+
+- $$y_1 = \beta_{01} + \beta_{11}x_1 + \beta_{21}x_2 + \epsilon_1$$
+- $$y_2 = \beta_{02} + \beta_{12}x_1 + \beta_{22}x_2 + \epsilon_2$$
+
+olarak iki farklı denklem ortaya çıkar ve buna da multivariate linear regression denir.
+
+## Çalışma Prensibi
+
+Linear Regresyon'da ilişkiler daha öncede örneklerini gösterdiğimiz gibi bilinmeyen parametreleri, bilinen verilerden **linear predictor functions** kullanarak modellenir.
+Yani model, tüm değişkenlerin olasılık dağılımından ziyade, elimizdeki girdilere bakarak "Bu şartlar altında beklenen çıktı nedir?" sorunusuna cevap verir.
+
+Linear regresyon, tarihsel olarak istatistikte titizlikle incelenen ve pratik uygulamalarda yaygın olarak kullanılan ilk regresyon analizi türüdür.
+Bunun temel sebebi, bilinmeyen parametrelerine doğrusal olarak bağlı olan modellerin matematiksel olarak çözülmesinin ve uyarlanmasının (fitting), doğrusal olmayan modellere göre çok daha kolay olmasıdır.
+
+## Makine Öğrenimindeki Yeri
+
+Linear regresyon sadece klasik bir istatistiksel yöntem değil, aynı zamanda temel bir **makine öğrenimi (machine learning)** algoritmasıdır. Daha spesifik olarak, **gözetimli öğrenme (supervised learning)** kategorisine girer.
+
+Öğrenci notu örneklerimizde olduğu gibi, modele hem girdileri (çalışma saati) hem de doğru cevapları yani etiketleri (sınav puanı) veririz. Algoritma bu etiketlenmiş veri setinden öğrenir ve veri noktalarını, yeni ve daha önce görülmemiş veriler üzerinde tahmin yapmak için kullanılabilecek en optimize doğrusal fonksiyona eşler.
+
+## Temel Kullanım Alanları
+
+Linear regresyonun pratik uygulamaları genellikle iki ana kategoriye ayrılır:
+
+- **Tahmin ve Öngörü (Predicting / Forecasting):** Amacımız hatayı azaltarak gelecekteki veya elimizde olmayan bir değeri tahmin etmekse linear regresyon harika bir araçtır. Mevcut verilerle öngörücü bir model eğitilir. Daha sonra, elimizde sadece girdi değerleri (örneğin çalışma saati) olan yeni bir durum için çıktının ne olacağı (sınav notu) tahmin edilir.
+- **İlişkileri Açıklamak ve Varyansı Anlamak:** Bazen amaç sadece tahmin yapmak değil, değişkenler arasındaki ilişkinin gücünü sayısal olarak ölçmektir. Örneğin; bağımsız değişkenlerdeki değişimin, bağımlı değişkende ne kadarlık bir değişime yol açtığını bulmak, bazı değişkenlerin sonuçla hiçbir ilgisi olmadığını kanıtlamak veya hangi değişkenlerin birbiriyle gereksiz/tekrar eden bilgiler içerdiğini tespit etmek için kullanılır.
diff --git a/src/content/articles/tr/supervised-learning-nedir.mdx b/src/content/articles/tr/supervised-learning-nedir.mdx
new file mode 100644
index 0000000..2615faf
--- /dev/null
+++ b/src/content/articles/tr/supervised-learning-nedir.mdx
@@ -0,0 +1,118 @@
+---
+lang: 'tr'
+slug: 'supervised-learning-nedir'
+title: 'Supervised Learning Nedir?'
+excerpt: 'Supervised Learning, etiketlenmiş veri setiyle input ve output verisi arasındaki ilişkiyi anlayan makine öğrenmesi tekniğidir'
+category: 'machine-learning'
+tags: ['supervised-learning', 'teori']
+author: '@omerfdmrl'
+date: '2026-03-21'
+views: 0
+status: 'Published'
+---
+
+import CsvViewer from '../../../components/content/CsvViewer.astro'
+
+Supervised Learning (Denetimli Öğrenme), etiketlenmiş veri setiyle input (girdi) ve output (çıktı) verisi arasındaki ilişkiyi anlayan makine öğrenmesi tekniğidir.
+Input verisi ve o veriye karşılık gelen output daha önceden hazırlanır ve daha önce görmediği verilerin sonucunu tahmin etmeye çalışır.
+
+Eğitim sırasında modelin algoritması, input ve output verileri arasındaki potansiyel korelasyonları keşfetmek için veri kümelerini işler.
+Ardından modelin başarısını, başarılı şekilde eğitilip eğitilmediğini bulmak için farklı bir test veri setiyle Cross-Validation (çapraz doğrulama) uygulanır.
+
+Örnek bir veri seti aşağıdaki gibi görünür.
+
+
+
+Yukarıdaki tabloda, çalışma saati (input) ile sınav puanı (output) arasındaki ilişkiyi görebiliriz. Modelimiz bu eğitim verisini inceleyerek aradaki matematiksel bağıntıyı öğrenir. Daha sonra, test verisindeki (örneğin 7 saat çalışma) bir durumu modele sorduğumuzda, daha önce öğrendiklerinden yola çıkarak bize tahmini bir sınav puanı (örneğin 82'ye yakın bir değer) üretir.
+
+## Çıktı Türlerine Göre Denetimli Öğrenme Çeşitleri
+
+Denetimli öğrenmede, tahmin etmeye çalıştığımız output'a göre kullanıcağımız yöntem de değişir. Temelde iki ana problem türü vardır:
+
+### Regresyon (Regression)
+
+Tahmin etmeye çalıştığımız çıktı nicel (quantitative) yani sürekli bir sayısal değerse, bu işleme regresyon denir.
+
+**Örneğin:** Yukarıdaki tabloda çalışma saatine bakarak sınav puanını (82.5, 90.1 gibi) tahmin etmek bir regresyon problemidir.
+Veya atmosferik ölçümlere bakarak yarınki ozon seviyesini tahmin etmek de bir nicel bir ölçümdür.
+
+### Sınıflandırma (Classification)
+
+Eğer tahmin etmeye çalıştığımız çıktı nitel (qualitative) yani belirli sınıf veya kategorilerden biriyse, buna sınıflandırma denir.
+Sınıflar arasında matematiksel olarak büyüklük-küçüklük ilişkisi yoktur.
+
+**Örneğin:** Meşhur _MNIST_ veriseti, el yazısı ile yazılmış rakam görseline bakıp bunun hangi rakam (0,1...8,9) olduğunu bulmak.
+
+Örnek bir veri göstermek gerekirse:
+
+
+
+Yukarıdaki tabloda, bir çiçeğin fiziksel ölçümleri olan Çanak ve Taç yaprak uzunlukları bizim girdilerimizdir (X). Bu girdilere bakarak tahmin etmeye çalıştığımız Tür (Setosa, Versicolor, Virginica) ise bizim kategorik çıktımızdır (G).
+Model, bu ölçümler ile çiçek türleri arasındaki örüntüyü öğrenerek, doğada yeni bulduğumuz bir çiçeğin yapraklarını ölçtüğümüzde onun hangi türe ait olduğunu sınıflandırabilir.
+
+### Topluluk Öğrenmesi (Ensemble Learning)
+
+Regresyon veya sınıflandırma problemlerini çözerken her zaman tek bir modele bel bağlamak zorunda değiliz. İşte bu noktada Ensemble Learning (Topluluk Öğrenmesi) devreye girer. Bu yöntem, aynı görev için birden fazla modelin eğitildiği ve sonuçlarının bir araya getirildiği bir "üst düzey (meta)" yaklaşımdır. Havuzdaki tüm modellerin tahminleri birleştirilerek (örneğin ortalaması alınarak veya oylama yapılarak) problemi çözmek için en güçlü genel sonuç elde edilir.
+
+Bu büyük topluluk yapısının içinde çalışan her bir bireysel algoritmaya zayıf öğreniciler (weak learners) veya temel modeller (base models) adı verilir.
+
+Peki neden birden fazla zayıf öğreniciye ihtiyaç duyarız?
+
+Bazı zayıf öğrenicilerin yanlılığı (bias) yüksek olabilir (veriyi fazla basite indirgerler).
+
+Bazılarının ise varyansı (variance) yüksek olabilir (eğitim verisine aşırı ezber yapıp, yeni verilerde çuvallarlar).
+
+Teorik olarak Ensemble Learning, her bir temel modelin en iyi yönlerini bir araya getirerek bu ünlü yanlılık-varyans açmazını (bias-variance tradeoff) hafifletir. Tıpkı zor bir hastalığın teşhisi için tek bir doktorun fikrine güvenmek yerine, farklı uzmanlıklara sahip bir doktorlar kurulundan (konsilyum) ortak bir karar çıkarmak gibidir. Biri yanılsa bile, çoğunluğun kararı genellikle gerçeğe en yakın olanı verir.
+
+## Notasyonlar
+
+Literatürde veya farklı kaynaklarda araştırma yaparken, bu input ve output değerlerinin her zaman belirli matematiksel sembollerle ifade edildiğini göreceksin:
+
+- X (Girdi / Input): Modele verdiğimiz özellikleri temsil eder. Gözlemlediğimiz değerler genellikle küçük `x` ile, matrisler (tüm veri seti) ise büyük ve kalın harflerle ifade edilir.
+- Y (Nicel Çıktı) / G (Nitel Çıktı): Hedeflediğimiz gerçek sonuçlardır. Kategorik (Grup) çıktılar için genellikle `G` harfi de kullanılır.
+- $\hat{Y}$ (Tahmin / Prediction): Modelimizin ürettiği tahmini değeri ifade eder. Asıl amacımız, elimizdeki eğitim verisini (Training Data) kullanarak $\hat{Y}$ değerini gerçek $Y$ değerine en yakın hale getirecek kuralları bulmaktır.
+
+## Kategorik Verileri Bilgisayara Aktarmak
+
+Peki çıktı değerimiz sayı değil de "Başarılı/Başarısız" veya "Kedi/Köpek" gibi metinsel (nitel) verilerse bilgisayar bunu nasıl anlar?
+
+Modeller matematiksel denklemlerle çalıştığı için bu kategorileri sayılara çevirmemiz (kodlamamız) gerekir:
+
+- İkili Sınıflar: En kolay yöntemdir. "Hayatta kaldı" için `1`, "Öldü" için `0` (veya `-1` ve `1`) gibi binary (ikili) değerler atanır. Model tahminde bulunurken `.5` eşik değerini baz alabilir ($\hat{Y} > 0.5$ ise 1. sınıftır gibi).
+- Çoklu Sınıflar (Dummy Variables): İkiden fazla kategori varsa (Örn: Kırmızı, Mavi, Yeşil), Dummy Variables adı verilen bir yöntem kullanılır. Her renk için ayrı bir sütun açılır ve o anki veri hangi renkse o sütun `1` (açık), diğerleri `1` (kapalı) olacak şekilde vektörler oluşturulur.
+
+
+
+Dikkat ederseniz, "Araç A" kırmızı olduğu için sadece Renk_Kirmizi sütunu 1 değerini aldı. Artık modelimiz metinlerle değil, tamamen 1 ve 0'lardan oluşan matematiksel matrislerle çalışmaya hazır!
diff --git a/src/data/tr/articles.json b/src/data/tr/articles.json
index fe51488..5a5299b 100644
--- a/src/data/tr/articles.json
+++ b/src/data/tr/articles.json
@@ -1 +1,12 @@
-[]
+[
+ {
+ "title": "Linear Regression Nedir?",
+ "slug": "linear-regression-nedir",
+ "category": "machine-learning"
+ },
+ {
+ "title": "Supervised Learning Nedir?",
+ "slug": "supervised-learning-nedir",
+ "category": "machine-learning"
+ }
+]
diff --git a/src/data/tr/categories.json b/src/data/tr/categories.json
index fe51488..2e489e4 100644
--- a/src/data/tr/categories.json
+++ b/src/data/tr/categories.json
@@ -1 +1,10 @@
-[]
+[
+ {
+ "id": "1",
+ "name": "Machine Learning",
+ "slug": "machine-learning",
+ "description": "Sadece kural yazmak yerine, makinelere veriden kendi kurallarını çıkarmayı öğrettiğimiz alan.",
+ "color": "#6366F1",
+ "articleCount": 2
+ }
+]
diff --git a/src/data/tr/tags.json b/src/data/tr/tags.json
index fe51488..85b9bb8 100644
--- a/src/data/tr/tags.json
+++ b/src/data/tr/tags.json
@@ -1 +1,23 @@
-[]
+[
+ {
+ "id": "1",
+ "name": "linear-regression",
+ "slug": "linear-regression",
+ "articleCount": 1,
+ "description": "Sürekli sayısal değerleri tahmin etmek için kullanılan, değişkenler arasındaki doğrusal ilişkiyi matematiksel olarak modelleyen temel makine öğrenmesi algoritması."
+ },
+ {
+ "id": "2",
+ "name": "supervised-learning",
+ "slug": "supervised-learning",
+ "articleCount": 2,
+ "description": "Modelin önceden etiketlenmiş eğitim verileriyle (girdi ve doğru çıktı eşleşmeleri) eğitilerek, yeni ve görülmemiş veriler üzerinde tahmin yapmasını sağlayan öğrenme yaklaşımı."
+ },
+ {
+ "id": "3",
+ "name": "teori",
+ "slug": "teori",
+ "articleCount": 2,
+ "description": "Algoritmaların sadece nasıl kodlandığını değil; arkasındaki matematiği, çalışma mantığını ve 'neden' sorusunun cevabını detaylandıran kavramsal içerikler."
+ }
+]
diff --git a/src/pages/categories/[slug].astro b/src/pages/categories/[slug].astro
index ba69e67..fbdb542 100644
--- a/src/pages/categories/[slug].astro
+++ b/src/pages/categories/[slug].astro
@@ -31,10 +31,7 @@ const langPrefix = catLang === 'en' ? '/en' : ''
const allArticles = await getCollection('articles')
const catArticles = allArticles.filter(
- (a) =>
- a.data.lang === catLang &&
- a.data.category.toLowerCase().replace(/\s+/g, '-') === category.slug &&
- a.data.status === 'Published',
+ (a) => a.data.lang === catLang && a.data.category === category.slug && a.data.status === 'Published',
)
---
diff --git a/src/pages/en/articles/[slug].astro b/src/pages/en/articles/[slug].astro
index 06f540c..2afe9b4 100644
--- a/src/pages/en/articles/[slug].astro
+++ b/src/pages/en/articles/[slug].astro
@@ -26,7 +26,7 @@ if (!article || article.data.status !== 'Published') {
const { Content, headings } = await render(article)
-const categorySlug = article.data.category.toLowerCase().replace(/\s+/g, '-')
+const categorySlug = article.data.category
const articleUrl = `${SITE.origin}/en/articles/${article.data.slug}`
const ogImageUrl = `/og/${article.data.slug}.png`
diff --git a/src/utils/chartUtils.ts b/src/utils/chartUtils.ts
new file mode 100644
index 0000000..47cf5cd
--- /dev/null
+++ b/src/utils/chartUtils.ts
@@ -0,0 +1,79 @@
+export interface DataPoint {
+ x: number
+ y: number
+ z?: number
+ label?: string
+ color?: string
+}
+
+export interface ChartThemeColors {
+ textColor: string
+ gridColor: string
+ axisColor: string
+}
+
+export function getThemeColors(): ChartThemeColors {
+ const isDark = document.documentElement.classList.contains('dark')
+
+ return {
+ textColor: isDark ? '#e5e7eb' : '#1e293b',
+ gridColor: isDark ? '#3f3f46' : '#cbd5e1',
+ axisColor: isDark ? '#52525b' : '#94a3b8',
+ }
+}
+
+export function getDefaultColors(): string[] {
+ return ['#3b82f6', '#22c55e', '#f59e0b', '#ef4444', '#8b5cf6', '#ec4899', '#14b8a6', '#f97316']
+}
+
+export function getColor(index: number, colors?: string[], color?: string): string {
+ if (color) return color
+ return (colors || getDefaultColors())[index % (colors?.length || 8)]
+}
+
+export function createTooltip(container: HTMLElement): HTMLElement {
+ const tooltip = document.createElement('div')
+ tooltip.className = 'chart-tooltip'
+ tooltip.style.cssText = `
+ position: absolute;
+ pointer-events: none;
+ background: oklch(0.15 0 0);
+ color: oklch(0.95 0 0);
+ padding: 8px 12px;
+ border-radius: 6px;
+ font-size: 13px;
+ font-weight: 500;
+ opacity: 0;
+ transition: opacity 0.15s ease;
+ box-shadow: 0 4px 12px rgba(0,0,0,0.3);
+ z-index: 9999;
+ white-space: nowrap;
+ pointer-events: none;
+ `
+ container.style.position = 'relative'
+ container.appendChild(tooltip)
+ return tooltip
+}
+
+export function showTooltip(tooltip: HTMLElement, x: number, y: number, content: string, containerRect: DOMRect) {
+ tooltip.innerHTML = content
+ tooltip.style.opacity = '1'
+
+ const tooltipRect = tooltip.getBoundingClientRect()
+ let left = x + 12
+ let top = y - 12
+
+ if (left + tooltipRect.width > containerRect.width) {
+ left = x - tooltipRect.width - 12
+ }
+ if (top < 0) {
+ top = y + 12
+ }
+
+ tooltip.style.left = `${left}px`
+ tooltip.style.top = `${top}px`
+}
+
+export function hideTooltip(tooltip: HTMLElement) {
+ tooltip.style.opacity = '0'
+}