Makine Öğrenimi (ML) ile Basit Projeler: Uygulama Odaklı Bir Rehber
Giriş
Makine öğrenimi (ML), günümüz teknolojisinin en hızlı gelişen ve dönüştürücü alanlarından biridir. Veriden öğrenme, tahminleme ve karar verme yetenekleri sayesinde, sağlık, finans, üretim, pazarlama gibi pek çok sektörde devrim yaratmaktadır. Ancak, ML’nin karmaşıklığı ve derinliği, özellikle yeni başlayanlar için göz korkutucu olabilir. Bu makale, makine öğrenimine adım atmak isteyenler için basit, uygulanabilir ve pratik projeler sunarak bu zorluğu aşmayı amaçlamaktadır. Hedefimiz, teorik bilgiyi somut uygulamalarla birleştirerek, ML temellerini sağlamlaştırmak ve kendi projelerinizi geliştirmeye başlamanızı sağlamaktır.
Bu rehberde, Python programlama dili ve popüler ML kütüphaneleri (Scikit-learn, Pandas, NumPy) kullanılarak gerçekleştirilebilecek basit projeleri adım adım ele alacağız. Her proje, temel ML kavramlarını anlamanıza ve uygulamanıza yardımcı olacak şekilde tasarlanmıştır. Ayrıca, karşılaşılabilecek sorunları gidermek ve daha derinlemesine öğrenmek için ipuçları ve kaynaklar sunacağız.
1. Makine Öğrenimine Giriş ve Temel Kavramlar
Makine öğrenimi, bilgisayarların açıkça programlanmadan deneyimlerinden öğrenmelerini sağlayan bir alandır. Temel prensibi, verilerden kalıpları ve ilişkileri otomatik olarak çıkarmak ve bu bilgiyi yeni verileri tahmin etmek veya sınıflandırmak için kullanmaktır.
- Veri: ML’nin temel taşıdır. Veri, sayılar, metinler, resimler, sesler veya videolar gibi çeşitli formatlarda olabilir. Verinin kalitesi ve miktarı, ML modelinin başarısını doğrudan etkiler.
- Özellik (Feature): Verinin her bir sütunu veya özelliğidir. Örneğin, bir evin özellikleri arasında boyutu, oda sayısı, konumu ve yaşı yer alabilir.
- Model: Veriden öğrenilen kalıpları temsil eden matematiksel bir yapıdır. Model, yeni verileri tahmin etmek veya sınıflandırmak için kullanılır.
- Eğitim (Training): Modelin veri üzerinde öğrenme sürecidir. Eğitim sırasında model, verideki kalıpları ve ilişkileri optimize etmeye çalışır.
- Test (Testing): Modelin eğitildikten sonra yeni veriler üzerinde ne kadar iyi performans gösterdiğini değerlendirme sürecidir.
- Doğruluk (Accuracy): Modelin tahminlerinin ne kadar doğru olduğunu ölçen bir metrik.
- Hata (Error): Modelin tahminlerinin ne kadar yanlış olduğunu ölçen bir metrik.
ML Algoritmaları:
ML algoritmaları, farklı türde problemleri çözmek için kullanılan farklı yöntemlerdir. En yaygın ML algoritmaları şunlardır:
- Denetimli Öğrenme (Supervised Learning): Modelin, giriş verisi ve karşılık gelen çıktı etiketi ile eğitildiği bir öğrenme türüdür.
- Sınıflandırma (Classification): Giriş verisini belirli kategorilere ayırmak için kullanılır. Örneğin, bir e-postanın spam olup olmadığını belirlemek.
- Regresyon (Regression): Giriş verisine dayanarak bir sürekli değeri tahmin etmek için kullanılır. Örneğin, bir evin fiyatını tahmin etmek.
- Denetimsiz Öğrenme (Unsupervised Learning): Modelin, etiketlenmemiş veri üzerinde öğrenme gerçekleştirdiği bir öğrenme türüdür.
- Kümeleme (Clustering): Veriyi benzer özelliklere sahip gruplara ayırmak için kullanılır. Örneğin, müşteri segmentasyonu.
- Boyut İndirgeme (Dimensionality Reduction): Verideki özellik sayısını azaltmak için kullanılır. Örneğin, veri görselleştirmesini kolaylaştırmak.
- Pekiştirmeli Öğrenme (Reinforcement Learning): Bir ajanın, bir ortamda hareket ederek ve ödüller alarak öğrenme gerçekleştirdiği bir öğrenme türüdür. Örneğin, bir oyun oynayan bir bilgisayar.
2. Gerekli Araçlar ve Kurulum
ML projelerine başlamak için aşağıdaki araçlara ihtiyacınız olacaktır:
- Python: ML için en popüler programlama dilidir.
- Python’ı indirmek ve kurmak için: https://www.python.org/downloads/
- Paket Yöneticisi (pip): Python paketlerini kurmak ve yönetmek için kullanılır.
- Geliştirme Ortamı (IDE): Kodu yazmak ve çalıştırmak için kullanılır. Önerilen IDE’ler:
- Visual Studio Code (VS Code): Ücretsiz, açık kaynaklı ve çok yönlü bir IDE’dir.
- Jupyter Notebook: Veri analizi ve ML projeleri için ideal, etkileşimli bir ortamdır.
- PyCharm: Özellikle Python geliştirme için tasarlanmış, ücretli bir IDE’dir.
- ML Kütüphaneleri:
- NumPy: Sayısal hesaplamalar için kullanılır.
- Pandas: Veri analizi ve manipülasyonu için kullanılır.
- Scikit-learn: ML algoritmaları, model seçimi ve değerlendirme araçları içerir.
- Matplotlib ve Seaborn: Veri görselleştirme için kullanılır.
Kurulum Adımları:
- Python’ı indirin ve kurun. Kurulum sırasında "Add Python to PATH" seçeneğini işaretleyin.
- Komut istemini (Windows) veya terminali (macOS/Linux) açın.
Aşağıdaki komutları kullanarak gerekli kütüphaneleri kurun:
bash
pip install numpy pandas scikit-learn matplotlib seaborn- İstediğiniz IDE’yi indirin ve kurun.
- IDE’nizi açın ve Python yorumlayıcısını ayarlayın.
3. Basit ML Projeleri ve Uygulama Örnekleri
Aşağıda, yeni başlayanlar için uygun olan ve farklı ML kavramlarını uygulamaya yönelik basit projeler sunulmaktadır. Her proje, adım adım açıklanacak ve örnek kodlar ile desteklenecektir.
3.1. Iris Veri Seti ile Sınıflandırma:
- Amaç: Iris veri setini kullanarak farklı türdeki iris çiçeklerini (setosa, versicolor, virginica) sınıflandırmak.
- Kullanılan Algoritma: K-En Yakın Komşular (K-Nearest Neighbors – KNN)
- Veri Seti: Scikit-learn kütüphanesinde yerleşik olarak bulunan Iris veri seti.
Adımlar:
Veri Yükleme ve İnceleme:
python
from sklearn.datasets import load_iris
import pandas as pdiris = load_iris()
data = pd.DataFrame(data=iris[‘data’], columns=iris[‘feature_names’])
data[‘target’] = iris[‘target’]
data[‘target_names’] = data[‘target’].map({0: ‘setosa’, 1: ‘versicolor’, 2: ‘virginica’})print(data.head())
Veriyi Eğitim ve Test Setlerine Ayırma:
python
from sklearn.model_selection import train_test_splitX = data[iris[‘feature_names’]]
y = data[‘target’]X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # %30 test verisi
KNN Modelini Eğitme:
python
from sklearn.neighbors import KNeighborsClassifierknn = KNeighborsClassifier(n_neighbors=3) # K değeri 3 olarak seçildi
knn.fit(X_train, y_train)Modeli Test Etme ve Doğruluğu Değerlendirme:
python
from sklearn.metrics import accuracy_scorey_pred = knn.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)print(f"Doğruluk: {accuracy}")
- Yeni Veri Üzerinde Tahmin Yapma:
pythonnew_flower = [[5.1, 3.5, 1.4, 0.2]]
prediction = knn.predict(new_flower)
print(f"Yeni çiçeğin türü: {iris[‘target_names’][prediction][0]}")
3.2. Ev Fiyatı Tahmini (Regresyon):
- Amaç: Evlerin özelliklerine (boyut, oda sayısı, konum vb.) dayanarak fiyatlarını tahmin etmek.
- Kullanılan Algoritma: Doğrusal Regresyon (Linear Regression)
- Veri Seti: Kamuya açık bir veri seti (örneğin, Boston Housing Dataset veya benzeri bir veri seti). Scikit-learn’de bulunan Boston Housing dataset kullanılabilir ancak etik olmadığına dair uyarılar bulunmaktadır. Bu nedenle daha modern bir veri seti kullanılması önerilir. Alternatif olarak Kaggle’dan bir ev fiyatı veri seti indirilebilir.
Adımlar:
Veri Yükleme ve İnceleme: (Örnek bir veri setine göre)
python
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_errordata = pd.read_csv(‘house_prices.csv’) # Kaggle’dan indirilen bir veri seti
print(data.head())data = data.fillna(data.mean())
data = pd.get_dummies(data, columns=[‘Neighborhood’]) # Semt bilgisini sayısal veriye dönüştürme
Veriyi Eğitim ve Test Setlerine Ayırma:
python
X = data.drop(‘SalePrice’, axis=1) # Fiyat dışındaki tüm sütunlar
y = data[‘SalePrice’]X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # %20 test verisi
Doğrusal Regresyon Modelini Eğitme:
python
model = LinearRegression()
model.fit(X_train, y_train)
Modeli Test Etme ve Hata Payını Değerlendirme:
python
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print(f"Ortalama Karesel Hata (MSE): {mse}")Yeni Veri Üzerinde Tahmin Yapma:
pythonnew_house = pd.DataFrame({
‘LotArea’: [8000],
‘OverallQual’: [7],
‘OverallCond’: [5],
‘YearBuilt’: [2005],
‘TotalBsmtSF’: [1000],
‘1stFlrSF’: [1000],
‘2ndFlrSF’: [500],
‘GrLivArea’: [1500],
‘BsmtFullBath’: [1],
‘HalfBath’: [1],
‘BedroomAbvGr’: [3],
‘TotRmsAbvGrd’: [7],
‘Fireplaces’: [1],
‘GarageCars’: [2],
‘GarageArea’: [500],
‘Neighborhood_NAmes’: [0], # Eğer ‘NAmes’ semti için
‘Neighborhood_CollgCr’: [1] # Eğer ‘CollgCr’ semti için (diğer semtler 0 olmalı)
})predicted_price = model.predict(new_house)
print(f"Tahmini ev fiyatı: {predicted_price[0]}")
3.3. Spam Filtreleme (Doğal Dil İşleme – NLP):
- Amaç: E-postaları spam veya spam değil olarak sınıflandırmak.
- Kullanılan Algoritma: Naive Bayes Sınıflandırıcısı
- Veri Seti: Kamuya açık bir spam e-posta veri seti (örneğin, UCI Machine Learning Repository’den).
Adımlar:
Veri Yükleme ve İnceleme:
python
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, classification_reportdata = pd.read_csv(‘spam.csv’, encoding=’latin1′) # Veri setine göre encoding değişebilir
data = data.drop([‘Unnamed: 2’, ‘Unnamed: 3’, ‘Unnamed: 4’], axis=1) # Gereksiz sütunları silme
data = data.rename(columns={‘v1’: ‘label’, ‘v2’: ‘text’}) # Sütun isimlerini değiştirme
print(data.head())Veriyi Hazırlama (Metin İşleme):
python
data[‘label’] = data[‘label’].map({‘ham’: 0, ‘spam’: 1})
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(data[‘text’])
y = data[‘label’]Veriyi Eğitim ve Test Setlerine Ayırma:
python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Naive Bayes Modelini Eğitme:
python
model = MultinomialNB()
model.fit(X_train, y_train)Modeli Test Etme ve Performansı Değerlendirme:
python
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"Doğruluk: {accuracy}")print(classification_report(y_test, y_pred))
Yeni Veri Üzerinde Tahmin Yapma:
pythonnew_email = ["Congratulations! You have won a prize. Click here to claim it."]
new_email_vectorized = vectorizer.transform(new_email)
prediction = model.predict(new_email_vectorized)
print(f"Bu e-posta: {‘spam’ if prediction[0] == 1 else ‘spam değil’}")
4. Daha Derinlemesine Öğrenme ve Kaynaklar
Bu projeler, ML’nin temellerini anlamanıza ve uygulamanıza yardımcı olacak bir başlangıç noktasıdır. Daha derinlemesine öğrenmek için aşağıdaki kaynakları kullanabilirsiniz:
- Online Kurslar:
- Coursera (Andrew Ng’nin Makine Öğrenimi kursu)
- edX
- Udacity
- DataCamp
- Kitaplar:
- "Hands-On Machine Learning with Scikit-Learn, Keras & TensorFlow" – Aurélien Géron
- "Python Data Science Handbook" – Jake VanderPlas
- "The Elements of Statistical Learning" – Hastie, Tibshirani, Friedman
- Kaggle: ML yarışmalarına katılabilir, veri setlerini inceleyebilir ve diğer insanların çözümlerini görebilirsiniz.
- Scikit-learn Dokümantasyonu: Scikit-learn kütüphanesinin resmi dokümantasyonu, algoritmalar ve fonksiyonlar hakkında detaylı bilgi içerir.
5. Sıkça Sorulan Sorular (SSS)
- Soru: Makine öğrenimine başlamak için hangi programlama dilini öğrenmeliyim?
- Cevap: Python, ML için en popüler ve yaygın olarak kullanılan programlama dilidir. Geniş kütüphane desteği ve kolay okunabilir sözdizimi sayesinde yeni başlayanlar için idealdir.
- Soru: Hangi ML kütüphanelerini öğrenmeliyim?
- Cevap: NumPy, Pandas, Scikit-learn, Matplotlib ve Seaborn, temel ML projeleri için gerekli olan temel kütüphanelerdir.
- Soru: ML projeleri için nereden veri seti bulabilirim?
- Cevap: Kaggle, UCI Machine Learning Repository, Google Dataset Search gibi kaynaklardan kamuya açık veri setlerine ulaşabilirsiniz.
- Soru: Bir ML projesi geliştirirken hangi adımları izlemeliyim?
- Cevap: Veri toplama ve hazırlama, model seçimi ve eğitimi, modelin değerlendirilmesi ve optimize edilmesi, modelin dağıtımı ve izlenmesi adımlarını izlemelisiniz.
- Soru: Modelin doğruluğu düşükse ne yapmalıyım?
- Cevap: Veri setini daha iyi inceleyebilir, farklı özellikler ekleyebilir, farklı bir algoritma deneyebilir, hiperparametreleri ayarlayabilir veya daha fazla veri toplayabilirsiniz.
- Soru: Bir proje için hangi algoritmayı seçeceğimi nasıl bilebilirim?
- Cevap: Problemin türüne (sınıflandırma, regresyon, kümeleme vb.), verinin özelliklerine ve performans gereksinimlerine göre farklı algoritmalar deneyebilirsiniz. Kaggle gibi platformlarda benzer problemleri çözen diğer kişilerin yaklaşımlarını inceleyebilirsiniz.
- Soru: Makine öğrenmesi sadece büyük şirketler için mi?
- Cevap: Hayır, makine öğrenmesi küçük işletmelerden büyük şirketlere kadar her ölçekteki işletme için değerlidir. Veriden elde edilen bilgilerle iş süreçlerini iyileştirmek, maliyetleri azaltmak ve müşteri deneyimini geliştirmek mümkündür.
Sonuç
Bu makalede, makine öğrenimine adım atmak isteyenler için basit ve uygulanabilir projeler sunarak bir rehber oluşturduk. Her bir proje, temel ML kavramlarını anlamanıza ve uygulamanıza yardımcı olacak şekilde tasarlanmıştır. Unutmayın ki, ML öğrenmek sürekli bir süreçtir ve pratik yaparak, deneyerek ve yeni şeyler öğrenerek kendinizi geliştirebilirsiniz. Başarılar dileriz!