Makine Öğrenmesine Giriş

Makine öğrenmesi (Machine Learning - ML), bilgisayar sistemlerinin açıkça programlanmadan verilerden öğrenmesini sağlayan yapay zeka (AI) alt dalıdır. Makine öğrenmesi algoritmaları, verilerdeki kalıpları ve ilişkileri tanımlayarak, gelecekteki veriler hakkında tahminler veya kararlar alabilir. Bu, spam e-posta filtrelemeden tıbbi teşhise, finansal piyasa tahminlerinden otonom sürüşe kadar geniş bir uygulama yelpazesine sahiptir.
Makine öğrenmesinin temel amacı, bir modelin belirli bir görevi gerçekleştirmek için deneyimden (veri) öğrenmesini sağlamaktır. Bu öğrenme süreci genellikle bir dizi eğitim verisi üzerinde algoritmaların çalıştırılmasıyla gerçekleşir. Algoritma, bu verilerdeki gizli yapıları keşfeder ve bu bilgiyi yeni, görünmeyen veriler üzerinde genelleme yapmak için kullanır.

Makine Öğrenmesi Türleri

Makine öğrenmesi genellikle üç ana kategoriye ayrılır:
1.Denetimli Öğrenme (Supervised Learning): Bu türde, algoritma etiketlenmiş veri kümeleri üzerinde eğitilir. Yani, her girdi verisi için doğru çıktı (etiket) önceden bilinir. Algoritmanın amacı, girdi ile çıktı arasındaki eşlemeyi öğrenmektir. Regresyon (sayısal değer tahmini) ve sınıflandırma (kategorik değer tahmini) denetimli öğrenmenin yaygın görevleridir.
Örnekler: E-posta spam tespiti (spam/değil), müşteri churn tahmini (ayrılacak/kalacak), ev fiyatı tahmini.
2.Denetimsiz Öğrenme (Unsupervised Learning): Bu türde, algoritma etiketlenmemiş veri kümeleri üzerinde eğitilir. Algoritmanın amacı, verilerdeki gizli yapıları, kalıpları veya ilişkileri kendi başına keşfetmektir. Kümeleme (clustering) ve boyut indirgeme (dimensionality reduction) denetimsiz öğrenmenin yaygın görevleridir.
Örnekler: Müşteri segmentasyonu, anomali tespiti, genetik veri analizi.
3.Pekiştirmeli Öğrenme (Reinforcement Learning): Bu türde, bir ajan (agent) bir ortamda (environment) eylemler gerçekleştirerek öğrenir. Ajan, eylemlerinin sonuçlarına göre ödüller veya cezalar alır ve bu geri bildirimleri kullanarak zamanla performansını optimize etmeyi öğrenir. Genellikle oyunlar, robotik ve otonom sistemlerde kullanılır.
Örnekler: Satranç oynayan AI, robotların yürüme öğrenmesi, otonom araçların karar verme sistemleri.

Scikit-learn Kütüphanesine Giriş

Scikit-learn, Python için popüler ve kullanımı kolay bir makine öğrenmesi kütüphanesidir. Denetimli ve denetimsiz öğrenme algoritmalarının geniş bir yelpazesini sunar ve veri madenciliği ile veri analizi için güçlü araçlar sağlar. NumPy, SciPy ve Matplotlib gibi diğer Python bilimsel kütüphaneleriyle entegre çalışır.
Scikit-learn'in temel özellikleri şunlardır:
Basit ve Tutarlı API: Tüm algoritmalar benzer bir arayüze sahiptir (.fit(), .predict(), .transform()). Bu, farklı modelleri denemeyi ve karşılaştırmayı kolaylaştırır.
Çok Çeşitli Algoritmalar: Sınıflandırma, regresyon, kümeleme, boyut indirgeme, model seçimi ve ön işleme için birçok algoritma içerir.
Verimli Uygulamalar: Çoğu algoritma C veya Cython'da optimize edilmiştir, bu da yüksek performans sağlar.
Açık Kaynak: BSD lisansı altında yayınlanmıştır ve geniş bir topluluk tarafından desteklenmektedir.

Kurulum

Scikit-learn'i kurmak için pip kullanabilirsiniz:
pip install scikit-learn

Temel Scikit-learn İş Akışı

Bir Scikit-learn modelini kullanmanın genel adımları şunlardır:
1.Veri Yükleme ve Hazırlama: Verilerinizi NumPy dizileri veya Pandas DataFrame'leri olarak yükleyin. Özellikler (X) ve hedef (y) değişkenlerini ayırın.
2.Model Seçimi: Görevinize (sınıflandırma, regresyon vb.) ve veri türünüze uygun bir makine öğrenmesi modeli seçin.
3.Model Eğitimi: Seçilen modeli eğitim verileri üzerinde .fit() metodu ile eğitin.
4.Tahmin Yapma: Eğitilmiş modeli yeni, görünmeyen veriler üzerinde .predict() metodu ile tahminler yapmak için kullanın.
5.Model Değerlendirme: Modelin performansını değerlendirmek için uygun metrikleri kullanın (örn. doğruluk, kesinlik, geri çağırma, F1 skoru, MSE, R²).

Örnek: Basit Bir Sınıflandırma Uygulaması (Iris Veri Seti)

Bu örnekte, Scikit-learn'in dahili Iris veri setini kullanarak çiçek türlerini sınıflandırmak için bir K-En Yakın Komşu (K-Nearest Neighbors - KNN) sınıflandırıcısı eğiteceğiz.
Iris veri seti, üç farklı iris çiçeği türünün (setosa, versicolor, virginica) taç yaprağı ve çanak yaprağı uzunlukları ve genişlikleri hakkında ölçümler içerir. Amacımız, bu ölçümlere dayanarak bir çiçeğin türünü tahmin etmektir.
import numpy as np from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score # 1. Veri Yükleme iris = load_iris() X = iris.data # Özellikler (features) y = iris.target # Hedef (target) - çiçek türleri # Veri setini eğitim ve test setlerine ayırma # test_size=0.30: Verinin %30'u test için ayrılır # random_state=42: Sonuçların tekrarlanabilirliği için rastgelelik tohumu X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=42) print(f"Eğitim seti boyutu: {X_train.shape[0]} örnek") print(f"Test seti boyutu: {X_test.shape[0]} örnek") # 2. Model Seçimi ve Oluşturma # K-En Yakın Komşu sınıflandırıcısı, n_neighbors=3 ile knn = KNeighborsClassifier(n_neighbors=3) # 3. Model Eğitimi knn.fit(X_train, y_train) # 4. Tahmin Yapma y_pred = knn.predict(X_test) # 5. Model Değerlendirme dogruluk = accuracy_score(y_test, y_pred) print(f"Modelin doğruluk skoru: {dogruluk:.2f}") # Yeni bir örnek üzerinde tahmin yapma # Örneğin, taç yaprağı ve çanak yaprağı ölçüleri: [5.1, 3.5, 1.4, 0.2] new_flower = np.array([[5.1, 3.5, 1.4, 0.2]]) predicted_species_index = knn.predict(new_flower) predicted_species_name = iris.target_names[predicted_species_index[0]] print(f"Yeni çiçeğin tahmini türü: {predicted_species_name}")

Kod Açıklaması:

load_iris(): Scikit-learn'in dahili Iris veri setini yükler.
train_test_split(): Veri setini eğitim ve test kümelerine böler. Bu, modelin görmediği veriler üzerinde nasıl performans gösterdiğini değerlendirmek için kritik öneme sahiptir.
KNeighborsClassifier(n_neighbors=3): K-En Yakın Komşu sınıflandırıcısını 3 komşu ile başlatır. Bu, yeni bir veri noktasının sınıfını belirlemek için en yakın 3 eğitim noktasının çoğunluk sınıfına bakılacağı anlamına gelir.
knn.fit(X_train, y_train): Modeli eğitim verileri (X_train) ve ilgili etiketleri (y_train) üzerinde eğitir.
knn.predict(X_test): Eğitilmiş modeli test verileri (X_test) üzerinde tahminler yapmak için kullanır.
accuracy_score(y_test, y_pred): Modelin test setindeki doğruluk skorunu hesaplar. Doğruluk, doğru tahmin edilen örneklerin toplam örnek sayısına oranıdır.

Makine Öğrenmesi ve Masaüstü Uygulamaları

Makine öğrenmesi modellerini masaüstü uygulamalarına entegre etmek, uygulamalarınıza akıllı yetenekler kazandırır. Örneğin:
Görüntü Tanıma: Bir masaüstü fotoğraf düzenleme uygulamasında nesne tanıma veya yüz algılama.
Metin Analizi: Bir not alma uygulamasında duygu analizi veya metin özetleme.
Öneri Sistemleri: Bir medya oynatıcıda kullanıcının dinleme alışkanlıklarına göre şarkı önerme.
Veri Analizi Araçları: Finansal verileri analiz eden ve tahminler yapan bir masaüstü aracı.
Bu entegrasyonlar genellikle eğitilmiş ML modellerini (örneğin, .pkl veya .h5 formatında kaydedilmiş) masaüstü uygulamanızın koduna yükleyerek ve bu modelleri kullanıcı girdileri üzerinde tahminler yapmak için kullanarak gerçekleştirilir. Scikit-learn, modelleri kolayca kaydedip yüklemek için joblib veya pickle modüllerini kullanmanıza olanak tanır.
import joblib # Eğitilmiş modeli kaydetme joblib.dump(knn, 'knn_model.pkl') # Modeli yükleme loaded_knn_model = joblib.load('knn_model.pkl') # Yüklenen modelle tahmin yapma predicted_species_index_loaded = loaded_knn_model.predict(new_flower) predicted_species_name_loaded = iris.target_names[predicted_species_index_loaded[0]] print(f"Yüklenen modelle yeni çiçeğin tahmini türü: {predicted_species_name_loaded}")

Sonuç

Bu derste, makine öğrenmesinin temel kavramlarını ve Scikit-learn kütüphanesinin nasıl kullanılacağını öğrendiniz. Scikit-learn, Python'da makine öğrenmesi projeleri geliştirmek için güçlü ve esnek bir araçtır. Bir sonraki derslerde, daha karmaşık yapay zeka konularına ve masaüstü uygulamalarına entegrasyonlarına odaklanacağız.