REGRESYON DIŞINDA KALAN SIK KULLANILAN GÖZETİMLİ ÖĞRENME ALGORİTMALARI
Kaya Ridvan
REGRESYON DIŞINDA KALAN SIK KULLANILAN GÖZETİMLİ ÖĞRENME ALGORİTMALARI
K En Yakýn Komþu (K-Nearest Neighbors-K-NN)
K En Yakýn Komþu (K-Nearest Neighbors-K-NN) algoritmasý, bir veri noktasýnýn sýnýfýný, kendisine en yakýn k komþusunun sýnýflarýna göre belirleyen bir makine öðrenmesi yöntemidir. Hem sýnýflandýrma hem de regresyon problemlerinde kullanýlabilir.
K en yakýn komþu algoritmasý, bir veri noktasýnýn hangi kategoriye ait olduðunu belirlemek için, ona en yakýn olan diðer veri noktalarýna bakar. Bu algoritma, denetimli bir makine öðrenmesi algoritmasýdýr, yani veri noktalarýnýn hangi kategorilere ait olduðunu önceden biliyoruz.
Örneðin, bir çiçeðin türünü tahmin etmek istiyoruz. Çiçeðin yaprak uzunluðu ve geniþliði gibi bazý özelliklerine sahibiz. Bu özellikleri kullanarak, çiçeði bir grafikte gösterebiliriz.
K en yakýn komþu algoritmasýnýn temel mantýðýdýr. Bu algoritma, farklý veri türleri ve özellikleri için de kullanýlabilir. Örneðin, bir kiþinin gelirini, yaþýný, eðitimini, mesleðini gibi özelliklerine göre, kredi alýp alamayacaðýný tahmin etmek için de kullanýlabilir.
K en yakýn komþu algoritmasýnýn avantajlarý ve dezavantajlarý vardýr. Avantajlarý þunlardýr:
Basit ve anlaþýlýr bir algoritmadýr.
Eðitim aþamasý yoktur, yani veri noktalarýný önceden iþlemeye gerek yoktur.
Farklý veri türleri ve özellikleri için uygulanabilir.
Dezavantajlarý ise þunlardýr:
Tahmin aþamasý yavaþ olabilir, çünkü her yeni veri noktasý için, tüm veri setine bakmak gerekir.
Uzaklýk ölçütü, veri setinin özelliklerine göre seçilmelidir. Örneðin, özellikler arasýnda büyük farklar varsa, standartlaþtýrma yapmak gerekir.
K sayýsýnýn belirlenmesi, veri setine ve probleme göre deðiþir. K çok küçükse, gürültüye duyarlý olabilir. K çok büyükse, sýnýrlar belirsizleþebilir.
Python dilinde K-NN algoritmasýný uygulamak için, öncelikle gerekli kütüphaneleri içe aktarmalýyýz. Bu kütüphaneler þunlardýr:
pandas: Veri iþleme ve analizi için kullanýlýr.
sklearn: Makine öðrenmesi modelleri ve metrikleri içerir.
StandardScaler: Veriyi standartlaþtýrmak için kullanýlýr.
Ardýndan, veri setimizi okuyup, baðýmlý ve baðýmsýz deðiþkenleri ayýrmalýyýz. Veriyi standartlaþtýrmak, uzaklýk temelli yöntemlerde daha doðru sonuçlar elde etmemizi saðlar. Son olarak, KNeighborsClassifier sýnýfýndan bir model oluþturup, veriye uydurmalýyýz. Modelimizi yeni veriler üzerinde tahmin yapmak için kullanabiliriz.
Aþaðýda, bir veri seti üzerinde K-NN algoritmasýný uygulayan basit bir Python kodu örneði verilmiþtir. Kod bloðunda, her adýmýn ne yaptýðýný açýklayan yorum satýrlarý bulunmaktadýr.
# Gerekli kütüphaneleri içe aktarma
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier # K-NN modeli
from sklearn.preprocessing import StandardScaler # Veriyi standartlaþtýrmak
# Veri setini okuma
df = pd.read_csv("diabetes.csv")
# Baðýmlý ve baðýmsýz deðiþkenleri ayýrma
y = df["Outcome"] # Baðýmlý deðiþken
X = df.drop(["Outcome"], axis=1) # Baðýmsýz deðiþkenler
# Veriyi standartlaþtýrma
X_scaled = StandardScaler().fit_transform(X)
X = pd.DataFrame(X_scaled, columns=X.columns)
# K-NN modeli oluþturma ve veriye uydurma
knn_model = KNeighborsClassifier().fit(X, y)
# Yeni veriler üzerinde tahmin yapma
random_user = X.sample(5) # Rasgele 5 veri noktasý seçme
knn_model.predict(random_user) # Tahmin sonuçlarýný gösterme
Karar Aðacý (Decision Tree)
Karar aðacý algoritmasý, verileri sýnýflara ayýrmak veya bir deðer tahmin etmek için kullanýlan bir makine öðrenmesi yöntemidir. Verilerdeki özellikler, karar aðacýnýn dallarýný oluþturur. Her dalda, bir özelliðe göre veriler alt gruplara bölünür. Bu iþlem, verilerin homojenliði artana kadar devam eder. Karar aðacýnýn yapraklarý, verilerin son sýnýflarýný veya tahmin edilen deðerlerini gösterir.
Karar aðacý algoritmasý, hem sayýsal hem de kategorik verilerle çalýþabilir. Sayýsal verilerde, bir özelliðin belirli bir eþik deðerinden büyük veya küçük olmasý gibi koþullar kullanýlýr. Kategorik verilerde, bir özelliðin belirli bir kategoriye ait olmasý gibi koþullar kullanýlýr.
Karar aðacý algoritmasý, verileri bölmeden önce, hangi özelliðin en iyi bölünmeyi saðladýðýný belirlemek için bir ölçüt kullanýr. Bu ölçüt, verilerin sahip olduðu belirsizliði veya karmaþýklýðý azaltmayý amaçlar. Ölçüt olarak, entropi, gini indeksi veya varyans gibi farklý metrikler kullanýlabilir.
Karar aðacý algoritmasý, verileri çok fazla bölerek modelin aþýrý uyum (overfitting) yapmasýna neden olabilir. Aþýrý uyum, modelin eðitim verilerinde çok iyi performans göstermesine, ancak yeni verilerde kötü performans göstermesine yol açar. Aþýrý uyumu önlemek için, karar aðacýnýn büyümesini sýnýrlayan bazý parametreler kullanýlabilir. Örneðin, karar aðacýnýn maksimum derinliði, minimum yaprak sayýsý veya minimum bölünme örnek sayýsý gibi parametreler ayarlanabilir.
Karar aðacý algoritmasý, sýnýflandýrma veya regresyon problemlerinde kullanýlabilir. Sýnýflandýrma problemlerinde, verilerin bir sýnýfa ait olma olasýlýðýný tahmin eder. Regresyon problemlerinde, verilerin bir sayýsal deðerini tahmin eder.
Karar aðacý algoritmasýnýn performansýný deðerlendirmek için, farklý metrikler kullanýlabilir. Sýnýflandýrma problemlerinde, hata matrisi (confusion matrix), modelin doðru ve yanlýþ tahminlerini gösteren bir tablodur. Hata matrisinden, kesinlik (precision), geri çaðýrma (recall) ve doðruluk (accuracy) gibi metrikler hesaplanabilir. Kesinlik, modelin doðru tahmin ettiði sýnýfýn, tüm tahmin ettiði sýnýflar arasýndaki oranýný gösterir. Geri çaðýrma, modelin doðru tahmin ettiði sýnýfýn, gerçekten o sýnýfa ait olan tüm örnekler arasýndaki oranýný gösterir. Doðruluk, modelin tüm sýnýflarý doðru tahmin etme oranýný gösterir. Regresyon problemlerinde, ortalama mutlak hata (mean absolute error), ortalama karesel hata (mean squared error) veya kök ortalama karesel hata (root mean squared error) gibi metrikler kullanýlabilir. Bu metrikler, modelin tahmin ettiði deðerler ile gerçek deðerler arasýndaki farký ölçer.
Python dilinde, karar aðacý algoritmasý uygulamak için sklearn kütüphanesi kullanýlabilir. Sklearn kütüphanesi, karar aðacý oluþturmak, eðitmek, tahmin yapmak ve deðerlendirmek için farklý fonksiyonlar sunar. Ayrýca, karar aðacýnýn grafiksel olarak gösterilmesi için graphviz kütüphanesi kullanýlabilir.
Aþaðýda, sklearn kütüphanesi kullanýlarak karar aðacý algoritmasý uygulayan basit bir Python kodu örneði verilmiþtir. Bu kod, iris veri kümesini kullanarak, bir çiçeðin türünü tahmin etmeye çalýþýr. Kodun açýklamalarý yorum satýrlarý olarak verilmiþtir.
# Gerekli kütüphaneleri içe aktar
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, confusion_matrix
from sklearn import tree
import graphviz
# Iris veri kümesini yükle
iris = pd.read_csv("raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv")
# Veri kümesini baðýmsýz ve baðýmlý deðiþkenlere ayýr
X = iris.drop("species", axis=1) # Baðýmsýz deðiþkenler (çiçeðin özellikleri)
y = iris["species"] # Baðýmlý deðiþken (çiçeðin türü)
# Veri kümesini eðitim ve test verileri olarak böl
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Karar aðacý sýnýflandýrýcýsýný oluþtur
clf = DecisionTreeClassifier(criterion="gini", max_depth=3, random_state=42)
# Karar aðacý sýnýflandýrýcýsýný eðitim verileri ile eðit
clf.fit(X_train, y_train)
# Test verileri ile tahmin yap
y_pred = clf.predict(X_test)
# Model performansýný deðerlendir
print("Hata Matrisi:
", confusion_matrix(y_test, y_pred))
print("Sýnýflandýrma Raporu:
", classification_report(y_test, y_pred))
# Karar aðacýný grafiksel olarak göster
dot_data = tree.export_graphviz(clf, out_file=None, feature_names=X.columns, class_names=y.unique(), filled=True, rounded=True)
graph = graphviz.Source(dot_data)
graph.render("iris_decision_tree")
Destek Vektör Makineleri (SVM)
SVM, iki veya daha fazla sýnýf arasýndaki verileri ayýrmak için kullanýlan bir makine öðrenmesi yöntemidir. SVM, verileri en iyi þekilde ayýran bir doðru veya düzlem bulmaya çalýþýr. Bu doðru veya düzleme karar sýnýrý denir. Karar sýnýrý, iki sýnýfýn en yakýn noktalarýna (destek vektörleri) eþit uzaklýkta olmalýdýr. Bu uzaklýða marj denir. Marj ne kadar büyükse, sýnýflandýrma o kadar iyi olur.
SVM, doðrusal olarak ayrýlabilen veriler için iyi çalýþýr. Ancak bazý veriler doðrusal olarak ayrýlamaz. Bu durumda, SVM, verileri daha yüksek boyutlu bir uzaya aktararak sýnýflandýrma yapabilir. Buna kernel trick denir. Kernel trick, verilerin karmaþýklýðýný azaltmak için farklý fonksiyonlar kullanýr. Örneðin, polinom kernel, verileri polinom fonksiyonu ile çarparak daha yüksek boyutlu bir uzaya aktarýr. Gaussian RBF kernel, verilerin belirli bir noktaya ne kadar benzediðini normal daðýlým ile hesaplar.
Python’da SVM kullanmak için scikit-learn kütüphanesini kullanabilirsiniz. Bu kütüphanede SVC (Support Vector Classifier) ve SVR (Support Vector Regressor) sýnýflarý bulunur. SVC, sýnýflandýrma problemleri için, SVR ise regresyon problemleri için kullanýlýr. Ayrýca kernel, C, degree, gamma gibi hiperparametreleri ayarlayabilirsiniz. Bu hiperparametreler, SVM’in performansýný etkiler.
Aþaðýda, scikit-learn ile basit bir SVM örneði verilmiþtir. Bu örnekte, iris veri seti kullanýlmýþtýr. Iris veri seti, üç farklý türdeki iris çiçeðinin yaprak uzunluklarý ve geniþliklerini içerir. SVM, bu verileri kullanarak çiçek türlerini sýnýflandýrmaya çalýþýr.
python
# Kütüphaneleri içe aktarma
from sklearn import datasets
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# Veri setini yükleme
iris = datasets.load_iris()
X = iris.data # Özellikler
y = iris.target # Sýnýflar
# Veri setini eðitim ve test olarak bölme
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# SVM modelini oluþturma
svm = SVC(kernel="rbf", C=1.0, gamma=0.1) # RBF kernel, C=1.0, gamma=0.1 olarak ayarlandý
# Modeli eðitim verisi ile eðitme
svm.fit(X_train, y_train)
# Modeli test verisi ile deðerlendirme
y_pred = svm.predict(X_test) # Test verisinde tahmin yapma
acc = accuracy_score(y_test, y_pred) # Doðruluk skorunu hesaplama
print("Accuracy:", acc) # Doðruluk skorunu yazdýrma
Bu kodu çalýþtýrdýðýnýzda, doðruluk skorunun yaklaþýk olarak 0.95 olduðunu görebilirsiniz. Bu, SVM’in iris veri setini oldukça iyi sýnýflandýrdýðýný gösterir.
Topluluk Öðrenmesi (Ensemble Learning)
Topluluk öðrenmesi, birden fazla makine öðrenmesi modelinin bir arada kullanýlarak daha iyi sonuçlar elde etmeyi amaçlayan bir yöntemdir. Bu yöntemde, farklý modellerin tahminleri birleþtirilerek nihai bir karar verilir. Topluluk öðrenmesi, tek bir modelin yetersiz kaldýðý veya aþýrý uyum yaptýðý durumlarda faydalý olabilir. Topluluk öðrenmesi modelleri, temel modellerin nasýl eðitildiði ve nasýl birleþtirildiðine göre üç ana kategoriye ayrýlabilir: torbalama, yükseltme ve yýðma.
Torbalama, eðitim verisinin rastgele alt kümelerini alarak ayný türden modelleri paralel olarak eðitir. Bu modellerin tahminleri, sýnýflandýrma için çoðunluk oyu, regresyon için ise ortalama alma yöntemiyle birleþtirilir. Torbalama, modellerin varyansýný azaltarak daha kararlý bir sonuç verir. Torbalama yöntemlerinden en bilineni, karar aðaçlarýndan oluþan Rastgele Orman (Random Forest) algoritmasýdýr.
Yükseltme, eðitim verisinin bir alt kümesiyle bir model eðitir, sonra bu modelin hatalý tahmin ettiði örneklerin aðýrlýðýný artýrarak yeni bir model eðitir. Bu iþlem, belirli bir sayýda model elde edilene kadar tekrarlanýr. Bu modellerin tahminleri, sýnýflandýrma için aðýrlýklý oylama, regresyon için ise aðýrlýklý ortalama alma yöntemiyle birleþtirilir. Yükseltme, modellerin sapmasýný azaltarak daha doðru bir sonuç verir. Yükseltme yöntemlerinden en bilinenleri, AdaBoost, Gradient Boosting ve XGBoost algoritmalarýdýr.
Yýðma, farklý türden modelleri eðitim verisiyle eðitir, sonra bu modellerin tahminlerini yeni bir eðitim verisi olarak kullanarak bir üst model (meta model) eðitir. Bu üst model, temel modellerin tahminlerini birleþtirerek nihai bir sonuç verir. Yýðma, modellerin çeþitliliðini artýrarak daha esnek bir sonuç verir. Yýðma yöntemlerinden en bilineni, Stacking algoritmasýdýr.
Scikit-learn kütüphanesi, Python dilinde makine öðrenmesi uygulamalarý için popüler bir araçtýr. Bu kütüphanede, sklearn.ensemble modülü altýnda çeþitli topluluk öðrenmesi modellerine eriþilebilir. Bu modeller, veri analizi, sýnýflandýrma ve regresyon gibi görevler için kullanýlabilir.
Rastgele Orman (Random Forest)
Rastgele Orman algoritmasý, birden fazla karar aðacý kullanarak sýnýflandýrma veya regresyon problemlerini çözmek için tasarlanmýþ bir makine öðrenmesi algoritmasýdýr. Bu algoritma, eðitim verilerinin alt kümelerini rastgele seçerek (torbalama) ve her aðaçta kullanýlacak özellikleri rastgele belirleyerek (rastgele alt uzay) farklý karar aðaçlarý oluþturur. Bu þekilde, her aðaç verilere aþýrý uyum saðlamaz ve aðaçlar arasýndaki korelasyon azalýr. Sonuç olarak, aðaçlarýn tahminleri ortalamasý alýnarak (sýnýflandýrma için modu) daha doðru ve kararlý bir sonuç elde edilir.
GradientBoost ve XGBoost ise, yükseltme (boosting) adý verilen baþka bir topluluk yöntemidir. Bu yöntemde, her yeni aðaç, önceki aðaçlarýn hatalarýný düzeltmek için eðitilir. Böylece, her aðaç önceki aðaçlara bir iyileþtirme katkýsý saðlar. GradientBoost, kayýp fonksiyonunun gradyanýný hesaplayarak hatalarý minimize etmeye çalýþýr. XGBoost ise, GradientBoost’un geliþtirilmiþ bir versiyonudur. XGBoost, aðaçlarýn karmaþýklýðýný düzenlemek için L1 ve L2 düzenlileþtirme terimleri kullanýr. Ayrýca, eðitimi hýzlandýrmak ve bellek kullanýmýný azaltmak için verileri histogramlara dönüþtürür.
Python kodlarý ile Rastgele Orman, GradientBoost ve XGBoost algoritmalarýný kullanmak için aþaðýdaki örnekleri inceleyebilirsiniz.
python
# Rastgele Orman için
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
from sklearn.metrics import accuracy_score
# Rastgele bir sýnýflandýrma verisi oluþturalým
X, y = make_classification(n_samples=100, n_features=10, n_classes=2, random_state=42)
# Rastgele Orman sýnýflandýrýcýsýný tanýmlayalým
rfc = RandomForestClassifier(n_estimators=100, max_features="sqrt")
# Sýnýflandýrýcýyý verilere uyduralým
rfc.fit(X, y)
# Tahminleri alalým
y_pred = rfc.predict(X)
# Doðruluðu hesaplayalým
acc = accuracy_score(y, y_pred)
print("Rastgele Orman - Doðruluk: ", acc)
# GradientBoost için
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.datasets import make_classification
from sklearn.metrics import accuracy_score
# Rastgele bir sýnýflandýrma verisi oluþturalým
X, y = make_classification(n_samples=100, n_features=10, n_classes=2, random_state=42)
# GradientBoost sýnýflandýrýcýsýný tanýmlayalým
gbc = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1)
# Sýnýflandýrýcýyý verilere uyduralým
gbc.fit(X, y)
# Tahminleri alalým
y_pred = gbc.predict(X)
# Doðruluðu hesaplayalým
acc = accuracy_score(y, y_pred)
print("GradientBoost - Doðruluk: ", acc)
# XGBoost için
from xgboost import XGBClassifier
from sklearn.datasets import make_classification
from sklearn.metrics import accuracy_score
# Rastgele bir sýnýflandýrma verisi oluþturalým
X, y = make_classification(n_samples=100, n_features=10, n_classes=2, random_state=42)
# XGBoost sýnýflandýrýcýsýný tanýmlayalým
xgb = XGBClassifier(n_estimators=100, learning_rate=0.1, reg_lambda=1, reg_alpha=0)
# Sýnýflandýrýcýyý verilere uyduralým
xgb.fit(X, y)
# Tahminleri alalým
y_pred = xgb.predict(X)
# Doðruluðu hesaplayalým
acc = accuracy_score(y, y_pred)
print("XGBoost - Doðruluk: ", acc)
Sosyal Medyada Paylaşın:
(c) Bu şiirin her türlü telif hakkı şairin kendisine ve/veya temsilcilerine aittir.