Ana içeriğe atla

PostgresML Eğitimi: SQL ile Makine Öğrenimi

PostgresML'de SQL deyimleri kullanarak makine öğrenimi yapmaya giriş niteliğinde bir makale.
Güncel 3 Eki 2026  · 11 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

Makine öğrenimindeki baskın eğilim, verilerin eğitim için modelin ortamına taşınmasıdır. Peki bunu tersine çevirsek ne olur? Günümüz veritabanları, makine öğrenimi modellerinden katbekat büyük olduğuna göre, modelleri veri kümelerine getirmek çok daha kolay olmaz mı?

PostgresML'in temel fikri tam da bu — veri yerinde kalır, siz kodunuzu veritabanına getirirsiniz. Bu tür ters mantıklı makine öğrenimi yaklaşımı, “veritabanı” kavramını yeniden düşünmenize neden olacak bir dizi gerçek dünya faydası sunar.

PostgresML nedir ve neden tercih edilmeli?

PostgresML, popüler PostgreSQL veritabanı üzerine inşa edilmiş kapsamlı bir makine öğrenimi platformudur. “Veritabanı içi” makine öğrenimi olarak adlandırılan yeni bir paradigma sunar ve birçok ML görevini her adımda ayrı araçlara ihtiyaç duymadan SQL içinde gerçekleştirmenize olanak tanır.

Geleneksel yapay zeka ile PostgresML'in karşılaştırıldığı bir illüstrasyon

Görece yeni olmasına rağmen, PostgresML şu garantili avantajları vaat eder:

  • Veritabanı içi ML: ML modellerini doğrudan PostgreSQL veritabanınız içinde eğitmenize, dağıtmanıza ve çalıştırmanıza imkân tanır. Bu, verileri veritabanı ile harici ML çerçeveleri arasında sürekli taşıma ihtiyacını ortadan kaldırarak her adımda verimliliği artırır ve gecikmeyi azaltır.
  • SQL API: Hem SQL’i hem de makine öğrenimini seviyorsanız, postgresml.org internetteki favori siteniz olabilir. Platform, SQL SELECT deyimleriyle makine öğrenimi modellerini eğitmenize, ince ayar yapmanıza ve dağıtmanıza olanak sağlar. Yarım düzine makine öğrenimi çerçevesinde derin bilgiye sahip olmayan veri analistleri ve bilimcileri için bu özellik günlük iş akışlarını tamamen yeniden tanımlayabilir.
  • Önceden eğitilmiş modeller: PostgresML, HuggingFace ile kolayca entegre olur ve Llama, Falcon, Bert, Mistral vb. yüzlerce önceden eğitilmiş modele erişim sağlar.
  • Özelleştirme ve esneklik: PostgresML; Scikit-learn, XGBoost, LGBM, PyTorch ve TensorFlow’dan 50+ algoritmayı destekler. Bu sayede denetimli öğrenmedeki birçok görevi doğrudan veritabanınızdan eğitip dağıtabilirsiniz.
  • Mevcut ekosistemlerle entegrasyon: PostgresML özünde bir veritabanı olduğundan, Postgres’i destekleyen herhangi bir ortamda (temelde her yerde) onunla etkileşime girebilirsiniz. Platform ayrıca SQL ile ML yapmak size fazla garip gelirse 16 dil için SDK sunar (JavaScript, Python ve Rust en iyi desteklenenlerdir).

PostgresML'in avantajları

Bu eğitimde tipik bir makine öğrenimi iş akışını izleyerek tüm bu özellikleri test edeceğiz:

  1. Veri yükleme
  2. Veri ön işleme
  3. Model eğitimi
  4. Hiperparametre ince ayarı
  5. Canlıya alma

…bunların hepsi bir Postgres veritabanının içinde. Hadi başlayalım!

PostgresML ile uçtan uca denetimli öğrenme iş akışı

Başlamadan önce: PostgresML ücretsiz katmanına kaydolun

Öncelikle, https://postgresml.org/signup adresinden ücretsiz bir hesap oluşturarak başlayacağız:

PostgresML kayıt sayfası

Ardından, cömert kaynaklar sunan ücretsiz katmanı seçin:

PostgresML'in sunduğu planlar

Kayıttan sonra PostgresML konsolunuza yönlendirileceksiniz. Burada farklı “Veritabanı içi ML” projelerini ve ilgili kaynaklarını yönetirsiniz.

Veritabanı oluşturulmuş PostgresML kontrol panelinin açılış sayfası

“Manage” bölümüne giderseniz, hesaplama gereksinimlerinize göre ortamınızı ölçekleyebilirsiniz:

Hesaplama gereksinimlerine göre PostgresML ortamlarını nasıl ölçeklendireceğinizi gösteren bir GIF.

1. Postgres'i kurun ve yapılandırın

İsminden de anlaşılacağı üzere, PostgresML'i kullanmak için sistemimizde PostgreSQL kurulu olmalıdır. Postgres’in ne olduğunu bilmiyorsanız, kendilerini “dünyanın en gelişmiş açık kaynak veritabanı” olarak tanımlıyorlar (web sitelerinde böyle yazıyor).

İşte platforma özel PostgreSQL kurulum rehberlerinin bağlantıları:

Ben WSL2 kullanıyorum, dolayısıyla şunu çalıştırabilirim:

$ sudo apt update
$ sudo apt install postgresql postgresql-contrib
$ sudo passwd postgres  # Set a new Postgres password
# Close and reopen your terminal and done!

Ardından kurulumu şu komutla doğrulayın:

$ psql --version
psql (PostgreSQL) 12.18 (Ubuntu 12.18-0ubuntu0.20.04.1)

psql, terminalde veritabanlarına bağlanmak ve yönetmek için resmi Postgres istemcisidir.

Çoğu kişi için SQL’i sade bir terminalde çalıştırmak ideal olmayabilir; bu nedenle Postgres’i kurduktan sonra aşağıdaki VSCode uzantısını da yükleyebilirsiniz:

VSCode'daki PostgreSQL uzantısı sayfası

2. Bir veritabanına bağlanın

PostgresML konsolunuzun açılış sayfasını hatırlıyor musunuz? Ayrı bir sekmede açık tutun:

PostgresML kontrol paneli sayfası.

Şimdi psql kullanarak, kendi kimlik bilgilerinizle aşağıdaki komutu yazıp PostgresML sunucusuna bağlanabilirsiniz:

$ psql -h "host" \
      -U "username" \
      -p 6432 \
      -d "database_name"

VSCode uzantısını kullanıyorsanız, aynı işlemi yapmak için (uzantının kurulum sayfasından alınan) şu adımları izleyin:

  1. Komut Paletini açın (Ctrl + Shift + P).
  2. ‘PostgreSQL: New Query’ ifadesini arayın ve seçin.
  3. Komut paletinde ‘Create Connection Profile’ seçeneğini belirleyin. Postgres örneğinizin ana bilgisayar adını, veritabanını, kullanıcı adını ve parolasını girmek için yönergeleri izleyin.

Ve böylece PostgresML veritabanınıza bağlanmış olacaksınız.

Bir sonraki adım, PostgresML işlevlerini çalıştırmamıza olanak tanıyacak pgml uzantısını oluşturmaktır:

CREATE EXTENSION IF NOT EXISTS pgml;

NOTICE:  extension "pgml" already exists, skipping
CREATE EXTENSION
-- Your output may be different.

Her şeyin başarılı olup olmadığını pgml sürümünü yazdırarak kontrol edin:

SELECT pgml.version();

2.8.2 (98f114891db58acd472e068c44272b198274b11d)

3. Veriyi yükleyin

Şimdi veritabanımıza biraz veri yükleyelim. Basit tutmak için Kaggle’daki Diamonds veri setini kullanarak tek bir tablo oluşturacağız. Bunu web sitesinden CSV olarak indirebilir veya aşağıdaki Python parçacığını kullanabilirsiniz:

import seaborn as sns

diamonds = sns.load_dataset("diamonds")
diamonds.to_csv("diamonds.csv", index=False)

Ardından, doğru şemayla aşağıdaki CREATE komutunu çalıştırın:

CREATE TABLE IF NOT EXISTS diamonds (
   index SERIAL PRIMARY KEY,
   carat FLOAT,
   cut VARCHAR(255),
   color VARCHAR(255),
   clarity VARCHAR(255),
   depth FLOAT,
   table_ FLOAT,
   price INT,
   x FLOAT,
   y FLOAT,
   z FLOAT
)

Bu komut, CSV dosyasındaki satırlarla doldurabileceğimiz diamonds adlı bir tablo oluşturacaktır:

INSERT INTO diamonds
   (carat, cut, color, clarity, depth, table_, price, x, y, z)
   FROM '~/full/path/to/diamonds.csv'
   DELIMITER ','
   CSV HEADER;

Son olarak, son komutun başarıyla çalıştığını doğrulamak için tablonun üst kısmını yazdıralım:

SELECT * FROM diamonds
LIMIT 10;

Diamonds veri setinin ilk beş satırının ekran görüntüsü

Artık bir model eğitmeye hazırız!

4. Bir model eğitin

Temel eğitim

Denetimli öğrenim için bir makine öğrenimi modelini eğitmek, pgml.train işleviyle yapılır. Temel yapısı şöyledir:

SELECT pgml.train(
 project_name => 'Diamond prices prediction',
 task => 'regression',
 relation_name => 'diamonds',
 y_column_name => 'price',
 algorithm => 'xgboost'
);

Yukarıdaki SQL deyimi, elmas fiyatlarını tahmin etmek için diamonds tablosuna bir XGBoost regresörü uydurur. Komutu çalıştırdığınızda fark edeceğiniz şeylerden biri, 50 binden fazla satır olmasına rağmen ne kadar hızlı olduğudur (neredeyse anında).

Görevleri de kolayca değiştirebilirsiniz. Çok sınıflı bir sınıflandırıcıyı böyle uydurursunuz (proje adını değiştirmeyi unutmayın):

SELECT pgml.train(
 project_name => 'Diamond cut quality prediction',
 task => 'classification',
 relation_name => 'diamonds',
 y_column_name => 'cut',
 algorithm => 'xgboost',
 test_size => 0.1
);

Bu kez test_size argümanını belirttiğimize dikkat edin – özel bölme de destekleniyor!

Ayrıca varsayılan linear algoritmasını xgboost ile değiştirdik ancak Scikit-learn’den ya da desteklenen başka bir çerçeveden herhangi bir model de olabilirdi.

Ön işleme

Bu kez bir rasgele orman modeli uydurmayı deneyelim:

…

Ama durun! Diamonds veri setinde kodlanması gereken metin özellikleri var. XGBoost kategorikleri yerel olarak kodladığı için önceki sorgularda hata almadık. Bu, rasgele ormanlar için geçerli olmayabilir. O hâlde sorgumuza bazı ön işleme adımları ekleyelim:

SELECT pgml.train(
   project_name => 'Diamond prices prediction',
   task => 'regression',
   relation_name => 'diamonds',
   y_column_name => 'price',
   algorithm => 'random_forest',
   preprocess => '{
       "carat": {"scale": "standard"},
       "depth": {"scale": "standard"},
       "table_": {"scale": "standard"},
       "cut": {"encode": "target", "scale": "standard"},
       "color": {"encode": "target", "scale": "standard"},
       "clarity": {"encode": "target", "scale": "standard"}
   }'::JSONB
);

Ön işleme mantığı, sütunları dönüşüm adımlarına eşleyen bir JSONB nesnesi içinde tanımlanır. Sayısal özellikler için standardizasyon kullanıyoruz (RF için şart olmasa da). Kategorik sütunlarda ise hedef kodlama ardından standardizasyon uyguluyoruz.

PostgresML alternatif ön işleme işlevleri de sunar. Mevcut kodlama seçeneklerinin tam listesi şöyledir:

PostgresML'deki kategorik kodlama işlevlerinin listesi

pgml standart değer atama (imputing) tekniklerini de destekler:

PostgresML'de mevcut eksik değer atama yöntemlerinin listesi

Ve işte ölçekleyicilerin listesi:

POstgresML'de mevcut standardizasyon işlevlerinin listesi

Scikit-learn’deki kadar geniş bir ön işleyici setiniz olmasa da, bunlar denetimli öğrenimdeki çoğu görev için yeterlidir.

Hiperparametreleri belirtme

Şimdiye kadar algoritmaların varsayılan parametrelerini kullandık. Ancak gerçek dünya problemlerinde varsayılanlar neredeyse hiç ideal değildir. Özel değerleri belirtmek için pgml.train işlevinin hyperparams argümanını kullanabiliriz:

SELECT pgml.train(
   project_name => 'Diamond prices prediction',
   task => 'regression',
   relation_name => 'diamonds',
   y_column_name => 'price',
   algorithm => 'xgboost',
   hyperparams => '{
       "n_estimators": 1000, "max_depth": 5, "eta": 0.01, "subsample": 0.7
   }'::JSONB
);

Bu kez, 1000 ağaçlı, maksimum derinliği 5 olan ve öğrenme oranı 0,01 olan bir XGBoost regresörü uyduruyoruz. Şimdilik biraz deneme-yanılmayla hareket ediyoruz, dolayısıyla bu hiperparametreler isabetli sonuçlar vermeyebilir.

Hiperparametre ince ayarı

Model sonuçlarını en üst düzeye çıkarmak için denetimli öğrenim görevlerinde her zaman hiperparametre ayarına ihtiyaç duyarız. Bu süreç, train işlevi içinde pgml tarafından da desteklenir. İşte küçük bir hiperparametre kombinasyonu kümesi üzerinde ızgara araması (grid search) yapma örneği:

SELECT pgml.train(
   'Diamond prices prediction',
   algorithm => 'xgboost',
   search => 'grid',
   search_params => '{
       "max_depth": [5, 7],
       "n_estimators": [1000, 1500],
       "eta": [0.1, 0.01, 0.001]
   }'::JSONB
);

Bu noktada ne yaptığımızı takdir etmenizi istiyorum. Bir XGBoost regresörünün hiperparametrelerini SQL kullanarak ayarlıyoruz! Böyle bir cümle yazacağımı hiç düşünmemiştim.

5. Modeli değerlendirin

Bu eğitimin yazıldığı sırada, PostgresML’in elinde yeterince olgun değerlendirme araçları yok. Yalnızca predict işlevi mevcut. Yeni, tek bir örnek üzerinde tahmin yapmak için şöyle kullanılır:

SELECT pgml.predict(
   project_name => 'Diamond prices prediction',
   features => ARRAY[0.7, "Ideal", "A", "IF", 67.9, 56.9, 7024, 5.85, 5.87, 3.71]
);

predict, deneylerinizdeki en iyi performanslı modeli otomatik olarak kullanır. Regresyonda bu, en yüksek R-kare değerine sahip modeldir; sınıflandırmada ise en yüksek F1 skorlu model kullanılır.

Belirli bir modeli tahmin için kullanmak isterseniz, kimliğini belirtebilirsiniz:

SELECT pgml.predict(
  2' -- Use model with ID of 2,
   features => ARRAY[0.7, "Ideal", "A", "IF", 67.9, 56.9, 7024, 5.85, 5.87, 3.71]
)

Peki model kimliklerini nasıl bulacaksınız? İşte tam da bu bilgiyi içeren güzel bir tabloyu yazdıran küçük bir parça:

SELECT models.id, models.algorithm, models.metrics
FROM pgml.models
JOIN pgml.projects
 ON projects.id = models.project_id
WHERE projects.name = 'Diamond prices prediction';

Bu deyimden, models.id, pgml.models, pgml.projects vb. gibi pgml ile ilgili birçok değişken ve ölçümü keşfedebilirsiniz. Ne yaptıklarını görmek için üzerlerinde `SELECT` deyimleri deneyin.

6. Modeli dağıtın

Geleneksel MLOps’un aksine, bu adım PostgresML’de en kolay olanıdır. pgml uzantısı, deneylerinizdeki en iyi performanslı modeli varsayılan olarak otomatik şekilde kullanıma açar. Böylece sunucuya gönderilen tüm SELECT pgml.predict deyimleri çıkarım için o modeli kullanır.

Daha ince ayarlı bir kontrolle hangi modelin üretime alınacağını belirlemek isterseniz, bunu pgml.deploy işleviyle yönetebilirsiniz. Yapısı şöyledir:

SELECT * FROM pgml.deploy(
   project_name TEXT,
   strategy TEXT DEFAULT 'best_score',
   algorithm TEXT DEFAULT NULL
)

best_score’ın yanı sıra most_recent ve rollback dağıtım stratejileri de mevcuttur:

PostgresML'de mevcut model dağıtım stratejilerinin listesi

strategy ve algorithm parametrelerini birleştirerek dağıtımı daha da daraltabilirsiniz. Örneğin, aşağıdaki deyim, tüm projenin en iyi performanslı modelini değil, en yüksek skorlu XGBoost modelini dağıtır.

SELECT * FROM pgml.deploy(
   project_name => 'Diamond prices prediction',
   strategy => 'best_score',
   algorithm => 'xgboost'
)

PostgresML ile başka neler yapabilirsiniz?

Denetimli öğrenim, PostgresML’in yalnızca küçük bir parçasıdır. Aslında PostgresML’in tüm değer önerisi “Postgres içinde yapay zekâ uygulamaları geliştirmek”tir. Bunu sergilemek için ana sayfaya küçük bir SQL düzenleyici bile koymuşlar:

PostgresML ana sayfasının ekran görüntüsü

Bu eğitimde kullandığınız ortamda da bu örnekleri doğrudan çalıştırabilirsiniz!

Peki PostgresML ile son kullanıcıya yönelik bir makine öğrenimi hizmeti geliştirmek isteseydiniz, nasıl yapardınız? İşte bazı olası adımlar (model hazır olduktan sonra):

  1. Bir kullanıcı arayüzü oluşturun — büyük olasılıkla bir web sitesi. Bugün, özellikle ML uygulamaları için tasarlanmış Streamlit ve Taipy gibi araçlarla birkaç saat içinde bir web sitesi hazırlayabilirsiniz.
  2. Arayüzü nasıl kurduğunuza bağlı olarak Python veya Node.js gibi sunucu taraflı bir dille bir arka uç bileşeni uygulayın.
  3. PostgresML veritabanınıza bağlanmak için psycopg2 (Python) veya pg-promise (JavaScript) gibi kitaplıkları kullanın.
  4. Gerekli verileri SQL sorguları ile veritabanı tablolarınızdan alın.
  5. Makine öğrenimi modeline beslemeden önce arka uç kodunuzda gerekli veri ön işleme adımlarını uygulayın.
  6. Bir kullanıcı arayüzle etkileşime girip bir tahmini tetiklediğinde, arka uç sunucusu ilgili bilgileri alır ve pgml.predict çağrılır.

Bu, kullanım senaryolarına göre önemli ölçüde değişebilecek kabaca bir taslaktır.

Sonuç

PostgresML, makine öğreniminde tamamen yeni bir paradigma sunar; bu nedenle onu ustalıkla kullanmak tek bir eğitimden daha fazlasını gerektirir. Anlayışınızı pekiştirmek ve PostgresML’in başka nasıl kullanılabileceğini keşfetmek için PostgresML dokümanlarının kullanım örnekleri bölümünü okuyun.

SQL becerileriniz biraz paslandıysa DataCamp’in PostgreSQL veritabanları oluşturma üzerine kısa kursunu ya da hatta tüm SQL ile Veri Analisti kariyer yolunu alabilirsiniz.

PostgresML yapay zekâya yoğunlaştığından, bazı temel AI konularını da öğrenebilirsiniz:


Bexruz (Bex) Tuychiev's photo
Author
Bexruz (Bex) Tuychiev
LinkedIn

2 yılı aşkın deneyime sahip bir veri bilimi içerik üreticisiyim ve Medium’da en büyük takipçi kitlelerinden birine sahibim. Yapay zekâ ve makine öğrenimi üzerine, biraz da alaycı bir üslupla yazılmış, ayrıntılı makaleler kaleme almayı seviyorum; çünkü onları biraz daha az sıkıcı hale getirmek için bir şeyler yapmak gerekiyor. 130’un üzerinde makale ve bir de DataCamp kursu ürettim; bir diğeri de hazırlık aşamasında. İçeriklerim 5 milyondan fazla kişi tarafından görüldü; bunların 20 bini Medium ve LinkedIn’de takipçim oldu. 

Konular
Yapay Zeka
SQL

Yapay Zekâ Yolculuğunuza Bugün Devam Edin!

Kurs

Large Language Models (LLMs) Kavramları

2 sa
112K
LLM uygulamaları, eğitim metodolojileri, etik hususlar ve en son araştırmaları kapsayan kavramsal kursumuzla LLM'lerin tüm potansiyelini keşfedin.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Devamını GörDevamını Gör