Makine öğrenimi (Machine Learning), yapay zekanın bir alt dalı olarak, bilgisayarların açıkça programlanmadan öğrenmesini sağlayan algoritmaların geliştirilmesi ve uygulanmasıdır. Günümüzde, veri analizinden, tahmin modellemesine, görüntü tanımadan doğal dil işlemeye kadar birçok alanda kullanılan makine öğrenimi, Python programlama dili ile kolayca hayata geçirilebiliyor. Bu yazıda, makine öğrenimine yeni başlayanlar için Python ile Makine Öğrenimini nasıl sağlayacağımızı, kütüphane kullanımlarının nasıl yapıldığını ele alacağız.
Python’ın zengin kütüphane ekosistemi, makine öğrenimi projelerini kolaylaştırmak için adeta bir hazine niteliğindedir. Python ile makine öğrenimini kullanabileceğiniz kütüphaneler şunlardır:
- NumPy: Sayısal hesaplamalar içindir.
- Pandas: Veri işleme ve analiz için kullanılır.
- Matplotlib ve Seaborn: Veri görselleştirme için kullanılır.
- Scikit-learn: Makine öğrenimi algoritmaları ve araçları için kullanılır.
NumPy
NumPy (Numerical Python), bilimsel hesaplamalar için temel bir kütüphanedir. Özellikle çok boyutlu diziler (array) ve matrisler üzerinde hızlı ve etkili işlemler yapmayı sağlar. Makine öğrenimi algoritmaları genellikle bu diziler üzerinde çalıştığı için NumPy burada çok mühimdir.
Numpy kütüphanesinin örnek kullanımı için, diziler üzerinde işlem yaptığımız kodu inceleyelim:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import numpy as np # Tek boyutlu bir dizi oluşturuyoruz. Ardından oluşturduğumuz dizi numpy dizisine dönüştürüyoruz. array_1d = np.array([1, 2, 3, 4, 5]) print("1D Dizi:", array_1d) # İki boyutlu, iç içe geçmiş bir dizi oluşturuyoruz. Bu dizi iki satır ve üç sütundan oluşur. array_2d = np.array([[1, 2, 3], [4, 5, 6]]) print("2D Dizi:\n", array_2d) # Dizi boyutunu öğrenmek için shape özelliğini kullanıyoruz. # Shape özelliği, bir numpy dizisinin boyutlarını verir. print("1D Dizi Boyutu:", array_1d.shape) print("2D Dizi Boyutu:", array_2d.shape) # Diziler üzerinde matematiksel işlemler print("1D Dizi Toplamı:", np.sum(array_1d)) print("2D Dizi Ortalaması:", np.mean(array_2d)) |
np.array()
: Dizi veya liste olarak tanımlamış olduğumuz datasetlerini numpy dizisine çevirmek için kullanılır. Bir nevi çevirici fonksiyon olarak düşünebiliriz.shape
: Oluşturulan numpy dizisinin boyutunu verir.np.sum()
venp.mean()
: Diziler üzerinde toplama ve ortalama hesaplar.
Kod Çıktısı:
1 2 3 4 5 6 7 8 | 1D Dizi: [1 2 3 4 5] 2D Dizi: [[1 2 3] [4 5 6]] 1D Dizi Boyutu: (5,) 2D Dizi Boyutu: (2, 3) 1D Dizi Toplamı: 15 2D Dizi Ortalaması: 3.5 |
Pandas
Pandas, veri analizi için kullanılan bir kütüphanedir. Özellikle tablo verileri (DataFrame) üzerinde çalışmak için idealdir. Elinizde bulunan veri setleri üzerinde işlemleri kolayca yapabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import pandas as pd # Sözlükten DataFrame oluşturma data = { "İsim": ["Oktay", "Mustafa", "Mert"], "Yaş": [25, 27, 26], "Şehir": ["Denizli", "Konya", "İstanbul"] } df = pd.DataFrame(data) print("DataFrame:\n", df) # Belirli bir sütunu seçme print("İsimler:\n", df["İsim"]) # Yeni sütun ekleme df["Meslek"] = ["IT Uzmanı", "Kalite Kontrolcü", "Yazılım Geliştirici"] print("Yeni Sütun Eklendi:\n", df) # Veri filtreleme filtre = df["Yaş"] > 26 print("26 Yaşından Büyükler:\n", df[filtre]) |
pd.DataFrame(data)
: bu sözlüğü birpandas
DataFrame’ine dönüştürür. DataFrame, bir tablo gibi düşünülebilir; satırlar ve sütunlardan oluşur.df["sütun_adi"]
ifadesi, belirli bir sütunu seçmek için kullanılır.- Yeni bir sütun eklemek için
df["yeni_sütun"] = değerler
şeklinde bir atama yapılır.
Kod Çıktısı:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | DataFrame: İsim Yaş Şehir Oktay 25 Denizli Mustafa 27 Konya Mert 26 İstanbul İsimler: Oktay Mustafa Mert Name: İsim, dtype: object Yeni Sütun Eklendi: İsim Yaş Şehir Meslek Oktay 25 Denizli IT Uzmanı Mustafa 27 Konya Kalite Kontrolcü Mert 26 İstanbul Yazılım Geliştirici 26 Yaşından Büyükler: İsim Yaş Şehir Meslek Mustafa 27 Konya Kalite Kontrolcü |
Matplotlib
Matplotlib, verileri görselleştirmek için kullanılan bir kütüphanedir. Grafikler, çizgiler, çubuklar ve daha fazlasını oluşturabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 | import matplotlib.pyplot as plt # Veri oluşturma x = [1, 2, 3, 4, 5] y = [10, 20, 25, 30, 40] # Çizgi grafiği oluşturma plt.plot(x, y, marker="o", linestyle="-", color="blue") plt.title("KodKampusu.com - Python ile Makine Öğrenimi") plt.xlabel("X Ekseni") plt.ylabel("Y Ekseni") plt.grid(True) plt.show() |
plt.plot()
: Çizgi grafiği oluşturur.plt.title()
,plt.xlabel()
,plt.ylabel()
: Grafiğe başlık ve eksen etiketleri ekler.plt.grid()
: Izgara çizgilerini gösterir.
Kod Çıktısı:
Seaborn
Seaborn, Matplotlib üzerine inşa edilmiş ve istatistiksel veri görselleştirme için kullanılan bir kütüphanedir.
Seaborn kütüphanesinin içerisinde bulunan örnek dataseti üzerinde bir işlem yapalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import seaborn as sns # Seaborn kütüphanesini içe aktar import matplotlib.pyplot as plt # Görselleştirme için Matplotlib kullanılır # Örnek bir veri seti yükleyelim (Seaborn'un hazır veri setlerinden biri olan 'tips' veri seti) tips = sns.load_dataset("tips") # İlk birkaç satırı görüntüleyelim print(tips.head()) # Veri setine göz atmak için # Bir kategoriye göre dağılımı göstermek için bir Seaborn çubuk grafik çizelim sns.barplot(x="day", y="total_bill", data=tips) # Günlere göre toplam hesap dağılımı # Grafik başlığını ve eksen etiketlerini ekleyelim plt.title("Günlere Göre Ortalama Toplam Hesap") plt.xlabel("Günler") plt.ylabel("Ortalama Toplam Hesap ($)") # Grafiği ekranda göster plt.show() |
sns.barplot()
: fonksiyonu, Seaborn kütüphanesindeki bir veri görselleştirme aracıdır ve kategorik veriler arasındaki ilişkileri görselleştirmek için kullanılır.sns.load_dataset()
: Seaborn’un içinde yer alan hazır veri setlerini kolayca yüklemek için kullanılır.
Kod Çıktısı:
1 2 3 4 5 6 | total_bill tip sex smoker day time size 0 16.99 1.01 Female No Sun Dinner 2 1 10.34 1.66 Male No Sun Dinner 3 2 21.01 3.50 Male No Sun Dinner 3 3 23.68 3.31 Male No Sun Dinner 2 4 24.59 3.61 Female No Sun Dinner 4 |
Scikit-learn
Scikit-learn, makine öğrenimi modelleri oluşturmak ve eğitmek için kullanılan en popüler kütüphanelerden biridir. Sınıflandırma, regresyon, kümeleme gibi birçok algoritmayı destekler.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | from sklearn.model_selection import train_test_split # Veri setini bölmek için from sklearn.linear_model import LinearRegression # Doğrusal regresyon modeli from sklearn.metrics import mean_squared_error, r2_score # Performans metrikleri import numpy as np import matplotlib.pyplot as plt # Örnek veri seti oluşturalım # Bağımsız değişken (X) ve bağımlı değişken (y) np.random.seed(0) # Rastgelelik için sabit bir tohum X = 2 * np.random.rand(100, 1) # 100 örnekli 1 özellikli veri y = 4 + 3 * X + np.random.randn(100, 1) # Doğrusal bir ilişki ve biraz gürültü # Veri setini eğitim (%80) ve test (%20) olarak ayır X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) # Modeli tanımla ve eğit model = LinearRegression() model.fit(X_train, y_train) # Tahmin yap y_pred = model.predict(X_test) # Performans ölçümleri mse = mean_squared_error(y_test, y_pred) # Ortalama kare hatası r2 = r2_score(y_test, y_pred) # R^2 skoru print(f"Modelin katsayıları (Coefficients): {model.coef_}") print(f"Modelin sabit terimi (Intercept): {model.intercept_}") print(f"Mean Squared Error: {mse}") print(f"R^2 Skoru: {r2}") # Sonuçları görselleştirme plt.scatter(X_test, y_test, color='blue', label='Gerçek Değerler') plt.plot(X_test, y_pred, color='red', linewidth=2, label='Tahmin Edilen Doğru') plt.title('Linear Regression - Test Seti') plt.xlabel('X Değeri') plt.ylabel('y Değeri') plt.legend() plt.show() |
- Grafik, X ile y arasındaki doğrusal ilişkiyi gösterir. “Linear regression, iki değişken arasındaki doğrusal ilişkiyi bulmaya çalışır.”
- Model, elimizdeki veriye bakarak bu doğruyu tahmin eder.
- Doğrusal regresyon, özellikle tahmin ve eğilim analizi için çok kullanışlıdır.
- Sonuç görselleştirmek için; Mavi noktalar → Gerçek veriyi temsil ederken; Kırmızı çizgi → Modelin öğrendiği doğruyu temsil eder.
LinearRegression()
kullanarak, modelX_train
vey_train
verilerinden en iyi tahmin eden doğrusal bağıntıyı öğreniyor.- Test setindeki
X_test
değerlerini alıp, modelin bunlar için tahmin ettiğiy_pred
değerlerini hesaplıyoruz.
Kod Çıktısı:
1 2 3 4 | Modelin katsayıları (Coefficients): [[2.93647151]] Modelin sabit terimi (Intercept): [4.32235853] Mean Squared Error: 1.0434333815695165 R^2 Skoru: 0.7424452332071367 |