Julia nedir?
Julia, ilk kez 2012’de yayımlanan görece yeni bir programlama dilidir. Julia yalnızca on yıldır ortada olmasına rağmen hızla büyümüştür ve Ekim 2022 TIOBE endeksine göre artık en popüler ilk 30 programlama dili arasındadır.

Julia’nın öne çıkan bir özelliği, bilimsel hesaplama için tasarlanmış olmasıdır. Bu da Julia’nın hem kullanımı kolay ve hızlı, hem de çok büyük veri miktarlarını ve karmaşık hesaplamaları son derece yüksek hızlarda işleyebiliyor olması demektir. Julia’nın meşhur sloganlarından biri “C gibi çalışır, Python gibi okunur.”
Julia, yorumlanan bir dil gibi okunan derlenen bir dildir. Hesaplama açısından yoğun problemleri çözebilen diğer geleneksel derlenen diller (C veya C++ gibi) kodun çalıştırılmadan önce makinenin okuyabileceği bir biçime derlenmesini gerektirir.
Öte yandan Julia, yorumlanan bir dilin (Python gibi) sadeliğiyle aynı performansı derleme adımı olmadan da elde edebilir. Bunun yerine, çalışma zamanında derleyen Bir Anda Derleyici (JIT) kullanır.
Neden Makine Öğrenmesi için Julia?
Python, veri bilimi ve makine öğrenmesi alanına uzun süredir hakim ve haklı nedenlerle: son derece güçlü ve esnek bir programlama dili. Ancak, Julia’da sorun olmayan bazı Python dezavantajları da var.
Julia ile karşılaştırıldığında Python’un bazı eksileri şunlardır:
- Python daha yavaş, yorumlanan bir dildir ve hızını artırmak için sınırlı seçenekler sunar. Bu durum, büyük veri makine öğrenmesi projelerini Julia’ya kıyasla verimsiz hale getirebilir.
- Python tekli gönderim (single dispatch) kullanır; bu da fonksiyonlar ve kütüphaneler arasında kullanılabilecek ve paylaşılabilecek türleri ciddi biçimde sınırlar.
- Paralel hesaplama ve iş parçacığı (threading) Python dilinin tasarımına gömülü değildir. Bazı iş parçacığına izin veren kütüphaneler olsa da bu optimal değildir.
Bu bölümde, Julia’nın makine öğrenmesi için neden harika bir tercih olduğuna dair çeşitli nedenleri ele alıyoruz.
Dilin yükselişini ve 2022’de Julia öğrenmeye değer mi başlıklı ayrı bir blog yazısında daha fazla inceleyebilirsiniz.
1. Sadelik ve Kullanım Kolaylığı
Julia’nın İngilizceye yakın, çok kullanıcı dostu bir sözdizimi vardır. Bu da öğrenmeyi ve alışmayı hızlandırır; çünkü kod genellikle sezgiseldir ve kolay anlaşılır.
Julia’yı kurmak ve hemen kullanmaya başlamak da hızlı ve kolaydır. Dilin özel dağıtımlarını (Python ve Anaconda’daki gibi) yüklemeye ya da karmaşık kurulum süreçlerini (C ve C++’da olduğu gibi) takip etmeye gerek yoktur.
Makine öğrenmesi uygulayıcıları için, programlama kaynaklı sürtünmeyi ne kadar çabuk ortadan kaldırırsanız, veri analizi yapmaya ve modeller kurmaya o kadar hızlı başlarsınız.
2. Hız
Julia’nın en büyük alametifarikalarından biri hızıdır. Yukarıda Julia’nın derlenen bir dil olduğundan ve yorumlanan dillere göre kayda değer hız kazanımları sağladığından bahsetmiştik.
Julia, C, C++ ve Fortran ile birlikte “petaflop kulübü”ndedir. Evet, bu ayrıcalıklı kulübün yalnızca dört üyesi vardır ve katılım için tek bir şart aranır: tepe performansta saniyede bir petaflop’a (yani bin trilyon işlem) ulaşmak.
Makine öğrenmesinde büyük miktarda veriyle karşılaşmak yaygındır; bu nedenle hızlı bir programlama dili kullanmak eğitim sürelerini ciddi şekilde kısaltabilir ve modelleri canlıya alırken maliyetleri azaltabilir.
3. Vektörize Edilmemiş Kod da Hızlıdır
Julia’da performansı artırmak için kodu vektörize etmeye gerek yoktur. Döngüler ve yerel fonksiyonlar şeklinde yazılan vektörize edilmemiş kod zaten hızlıdır. Julia’da kodu vektörize etmek küçük bir hız artışı sağlayabilir ama gerekli değildir.
Vektörize edilmemiş kod yazmak ve kullanmak, makine öğrenmesi modelleri kurarken size çok zaman kazandırır; çünkü hızı artırmak için kodu yeniden düzenlemeniz gerekmez.
4. Kod Yeniden Kullanımı ve Çoklu Gönderim
Julia, bir fonksiyon için uygun türü “tahmin etmek” amacıyla duck-typing kullanır. Bu özellik şu anlama gelir: Eğer ördek gibi yürüyorsa ve ördek gibi ses çıkarıyorsa, muhtemelen ördektir. Yani, bir fonksiyonun örtük koşullarını yerine getiren herhangi bir nesne desteklenir - açıkça belirtmeye gerek yoktur.
Ancak duck-typing her özel durum için uygun olmayabilir; işte burada çoklu gönderim devreye girer. Çoklu gönderimle bir fonksiyon için birden fazla özel durum tanımlayabilir ve hangi koşullar sağlanıyorsa çalışırken en uygun seçeneğin tercih edilmesini sağlayabilirsiniz.
Çoklu gönderim, makine öğrenmesinde kullanışlıdır; çünkü bir fonksiyona geçmesine izin verilebilecek tüm olası türleri önceden düşünmek zorunda kalmazsınız. Bunun yerine, Julia’daki paketler yüksek esnekliğini korurken farklı paketler arasında kod ve tür paylaşımı yapabilir.
Tarih biçimini düşünün: Kendi özel tarih ve tarih/saat biçimlerini kullanan çeşitli paketler vardır. Örneğin Python’un yerleşik datetime biçimi ve Pandas’ın datetime64[ns] biçimi. Julia’da ise yerleşik dates modülünden gelen, tüm paketlerce paylaşılan tek bir tarih tabanlı biçim vardır.
5. Yerleşik Paket Yönetimi
Paketler Julia’da Pkg ile otomatik olarak yönetilir. Pkg, Julia için Pip’in Python’daki karşılığıdır ama çok daha iyidir. Ortamlar Julia’da iki dosya aracılığıyla yönetilir: Project.toml ve Manifest.toml. Bu dosyalar, projede hangi paketlerin ve sürümlerinin kullanıldığını Julia’ya bildirir. Özel ortamları haricen tanımlamak yerine, Julia dosyalarınızın bulunduğu klasör (Project ve Manifest toml dosyalarını içeren) ortamın kendisi olur.
Bu tür yerleşik, sadeleştirilmiş paket yönetimi yaklaşımı, makine öğrenmesi projelerinizi ve analizlerinizi paylaşmayı ve yeniden üretmeyi kolaylaştırır.
6. İki Dilli Sorun
Python paketlerinin sadece %20-30’unun gerçekten Python kodundan oluştuğunu biliyor muydunuz?

Bu başka dillere bağımlılık, görevlerinde verimli ve etkili paketler geliştirmek için düşük seviyeli diller (C ve C++ gibi) kullanma zorunluluğundan kaynaklanır.
Bilimsel hesaplamada çözümler ve paketler geliştirmek genellikle iki programlama dilini içerir: hızlı bir ilk uygulama geliştirmek için kullanımı kolay prototip dili (Python gibi) ve nihai sürüm için tüm kodun yeniden yazıldığı hızlı dil (C++ gibi).
Tahmin edebileceğiniz gibi, bu yalnızca ilk geliştirme için değil, uzun vadeli bakım ve yeni özellikler için de yavaş ve verimsiz bir süreçtir.
Öte yandan, Julia’daki paketler Julia ile prototiplenebilir, geliştirilebilir ve sürdürülebilir. Sonuç olarak, tüm geliştirme döngüsü çok daha kısa bir zamana iner.
Julia Makine Öğrenmesi Paketleri
Julia’nın genel kayıt defterinde artık 7.400’den fazla paket bulunuyor. Bu, Python’daki (200.000’in üzerinde) paket sayısından çok uzak olsa da belirli bir sorunu çözecek doğru paketi bulmak yine de zor olabilir.
Bu bölümde, verileri analiz etmek ve makine öğrenmesi modelleri kurmak için ihtiyaç duyacağınız temel paketleri inceleyeceğiz.
Ancak Julia ile makine öğrenmesine yeni başlıyorsanız, önce araç kutusu niteliğindeki şu paketi deneyin: MLJ. Bu paket, en popüler makine öğrenmesi paketlerini tek, kolay erişilebilir bir yerde toplamak için özel olarak geliştirilmiştir; böylece projeniz için en iyi paketi bulmaya çalışırken zaman kaybetmezsiniz. MLJ şu anda 20’den fazla farklı makine öğrenmesi paketini destekliyor.
Aşağıda, makine öğrenmesi projelerinde - veriyi içe aktarmaktan temizlemeye ve görselleştirmeye, model kurmaya kadar - en sık karşılaşacağınız bazı paketlerin bir listesi yer alıyor:
- Notebook: Pluto, IJulia, Jupyter
- Paket/ortam yönetimi: Pkg
- Veri içe alma ve işleme: CSV, DataFrames
- Çizim ve çıktı: Plots, StatsPlots, LaTeXStrings, Measures, Makie
- İstatistik ve Matematik: Random, Statistics, LinearAlgebra, StatsBase, Distributions, HypothesisTests, KernelDensity, Lasso, Combinatorics, SpecialFunctions, Roots
- Tekil makine öğrenmesi paketleri:
- Genelleştirilmiş doğrusal modeller (örn. doğrusal regresyon, lojistik regresyon): GLM
- Derin Öğrenme: Flux, Knet
- Destek vektör makineleri: LIBSVM
- Karar ağacı, rastgele orman, AdaBoost: DecisionTree
- En yakın k-komşu: NearestNeighbors
- K-ortalamalar kümeleme: Clustering
- Temel bileşen analizi: MultivariateStats
Ayrıca Scikit-Learn ve Tensorflow gibi popüler Python paketleri için çok sayıda uygulama ve sarmalayıcı da mevcuttur. Ancak bu paketleri kullanmanız şart değildir; çünkü Julia’nın hız ve çoklu gönderim gibi güçlü avantajlarının bir kısmını kaybedebilirsiniz.
Makine Öğrenmesi için Julia ile Başlarken
Julia’ya başlamanın en iyi yollarından biri Pluto notebook ortamını kullanmaktır. Bu bölümde, özellikle veri bilimi yolculuğunuzun başında, Julia ile makine öğrenmesi projeleri kurmayı öğrenirken Pluto kullanmanın faydalarını ele alıyoruz. Ayrıca Julia ve makine öğrenmesi hakkında daha fazla bilgi edinmek için en iyi kaynaklardan bazılarını paylaşıyoruz.
Pluto

Pluto, kullanıcı dostu bir arayüze sahip, kullanımı kolay etkileşimli bir Notebook ortamıdır. Bu sadelik, Julia’ya yeni başlayanlar için onu çok uygun kılar. Pluto’nun, neredeyse zahmetsizce daha etkileyici makine öğrenmesi çözümleri geliştirmenizi sağlayan birçok ek özelliği de vardır:
Tepkisel
Bir hücre değerlendirilirken Pluto, hangi diğer hücrelerin de çalıştırılması gerektiğini dikkate alır. Bu özellik, bağımlı hücrelerin güncellenmesini ve mevcut hücre çalıştırılmadan önce hazır olmasını sağlar.
Pluto’nun harika yanı, tarayıcınızdaki not defterinizde bir yerde değişiklik yaptığınızda her hücreyi güncelleme ihtiyacıyla karşılaşmamanız için mevcut hücreye ek olarak çalışması gereken hücreleri tam olarak bilecek kadar akıllı olmasıdır.
Pluto ayrıca eski veya silinmiş kodu temizler ve buna bağlı hücrelerin çıktısını bu işlemi yansıtacak şekilde günceller. Bir hücrede bir değişken tanımlayıp daha sonra o hücreyi silerseniz, Pluto bu değişkeni de ad alanından kaldırır. Ek olarak, o değişkene bağımlı kod hücreleri artık ihtiyaç duyulan değişkenin silindiğini belirten bir hata mesajı gösterir.
Etkileşimli
Tepkisellik, hücreler arasında otomatik etkileşime yol açar. Bu, bir değişken değiştiğinde otomatik güncellenen etkileşimli grafikler veya nesneleri hızla oluşturmak için özellikle kullanışlıdır.
Pluto’nun güzelliği, bu değişkenin not defterindeki yerleşik bir kaydırıcı veya metin kutusu gibi etkileşimli bir bileşen olabilmesidir. Javascript biliyorsanız kendi bileşenlerinizi bile tasarlayabilirsiniz.
Tepkisellik ve etkileşim, makine öğrenmesi modellerinize ve veri analizlerinize dayalı dinamik raporlar ve panolar üretmenizi sağlar. Başarılı bir makine öğrenmesi projesinin anahtarı iletişimdir ve Pluto, projenizi göstermeyi ve açıklamayı çok daha kolay hale getirir.
Otomatik Paket Yönetimi
Pluto, not defterlerinizde otomatik paket yönetimine olanak tanımak için Pkg ile sorunsuz şekilde bütünleşir. Dahası, paketleri Pluto dışında kurmanız bile gerekmez. Pluto’nun (ve Julia’nın) not defterinizi çalıştırmak ve yeniden üretmek için ihtiyaç duyduğu tüm bilgiler doğrudan not defterinin içinde saklanır!
Bu, not defterinizi iş arkadaşlarınızla veya sınıf arkadaşlarınızla paylaşabileceğiniz ve not defterinin çalışması için gereken tüm doğru paketlerin onunla birlikte gideceğinden emin olabileceğiniz anlamına gelir.
Sürüm Kontrolü
Tüm Pluto not defterleri çalıştırılabilir .jl dosyaları olarak saklanır. Bir not defterini bir metin düzenleyicide açarsanız, tarayıcınızda gördüğünüz not defterinden biraz farklı görünür. Dosya; kod, hücre bağımlılıkları ve yürütme sırası gibi not defteri tarafından ihtiyaç duyulan tüm bilgileri içerir. Ancak bu dosyalar herhangi bir çıktı içermez. Tüm bunlar, Git ve GitHub kullanarak sürüm kontrolünü çok daha kolay hale getirir.
Dışa Aktarma ve Paylaşma
Pluto not defterleri .jl çalıştırılabilir dosya, statik PDF veya statik HTML dosyası olarak dışa aktarılabilir. HTML olarak dışa aktarırsanız, paylaştığınız kişi Julia makinesinde yüklü olmasa bile ham not defteri indirme ve düzenleme seçeneğine de sahip olur.
Pluto bunu, Pluto not defterlerini çevrimiçi barındıran ücretsiz bir platform olan Binder ile iş birliği yaparak gerçekleştirir (Python ve R gibi diğer programlama dilleriyle de çalışır).
Bu özellik, bir makine öğrenmesi iş akışının son adımıdır: önce analizlerinizi gerçekleştirirsiniz, ardından sonuçları göstermek için not defterinizde etkileşimli bir rapor oluşturursunuz ve son olarak not defterini hem analizi yeniden üretebilen ve düzenleyebilen teknik meslektaşlarınızla hem de teknik olmayan kişilerle paylaşabilirsiniz.
Julia Öğrenme Kaynakları
Julia programlama dili ve onu veri bilimi ile makine öğrenmesinde nasıl kullanacağınız hakkında en çok önerilen kaynaklardan bazıları şunlardır:
- Etkileşimli bir ortamda öğrenmekten hoşlanıyorsanız, Julia’ya Giriş kursumuz var
- Julia programlama dilinin kapsamlı bir açıklaması için Think Julia: How to Think Like a Computer Scientist kitabı en iyi kaynaklardan biridir.
- Julia’ya başlamak için adım adım bir rehber olan başlangıç seviyesindeki Julia eğitimimize göz atın
- Julia programlamanın temel unsurları için kullanışlı bir rehber olan özet kartımıza bakın.
