Support Vector Machine ile Ham & Spam Maillerin Tespit Edilmesi

Herkese Merhabalar!
Bu makale, SVM algoritmasının temel prensipleri, çalışma mekanizması ve sınıflandırma performansı üzerinde derinlemesine bir inceleme sunmaktadır. Ek olarak bu uygulamada, spam mailleri filtreleme üzerine bir demo uygulama geliştirerek SVM’nin pratik kullanımını da gösterilmektedir. Faydalı olması dileklerimle 🙂
Haydi Başlayalım!
Makine öğrenimi ve sınıflandırma problemlerini tanıyalım
Makine öğrenimi, bir bilgisayarın veri analizi yapabilmesi ve belirli bir problemi çözebilmesi için örüntüleri ve ilişkileri öğrenme yeteneği sağlayan bir yapay zeka alanıdır. Sınıflandırma, makine öğrenimi problemlerinin önemli bir alt kategorisidir ve temel olarak verileri farklı sınıflara ayırmak için kullanılır. Sınıflandırma problemleri, önceden belirlenmiş bir dizi sınıf veya kategoriye ait örneklerle çalışır. Amacı, verileri bu sınıflara doğru bir şekilde atamaktır. Örneğin, bir e-postanın spam veya spam olmayan kategoriye ait olup olmadığını belirlemek, görüntülerin içerdikleri nesnelere göre sınıflandırılması gibi durumlar sınıflandırma problemlerine örnek olarak verilebilir. Sınıflandırma problemlerini çözmek için farklı makine öğrenimi algoritmaları kullanılır. İşte sınıflandırma problemleri için yaygın olarak kullanılan bazı algoritmalar:
1. Karar Ağaçları (Decision Trees): Veriye dayalı bir ağaç yapısı oluşturarak sınıflandırma yapar. Her düğümde bir özellik kontrol edilir ve veriye göre dallanma yapılır.
2. Destek Vektör Makineleri (Support Vector Machines — SVM): Verileri sınıflandırırken bir hiper düzlem oluşturarak sınıflar arasındaki en iyi ayrımı bulmayı hedefler.
3. Naive Bayes: Bayes teoremine dayalı bir olasılık temelli sınıflandırma algoritmasıdır. Özelliklerin sınıf etiketlerine olan bağımlılığını modeller.
4. K-En Yakın Komşu (K-Nearest Neighbors — KNN): Belirli bir veri noktasını, en yakınındaki k komşu noktanın sınıfına dayanarak sınıflandırır.
5. Lojistik Regresyon (Logistic Regression): Giriş verileri ile çıktı sınıfları arasındaki ilişkiyi modellemek için kullanılır. Sınıflandırma problemlerinde olasılık tabanlı bir yaklaşım sunar.

Bu sadece sınıflandırma problemlerinde kullanılan bazı algoritmaların birkaç örneğidir. Makine öğrenimi alanında çok daha fazla algoritma ve teknik bulunmaktadır. Seçilen algoritma, veri setinin özelliklerine, problem alanına ve performans hedeflerine bağlı olarak değişebilir. Sınıflandırma problemleri, tıbbi teşhisler, doğal dil işleme, görüntü ve video analizi, pazarlama segmentasyonu ve daha pek çok alanda kullanılır. Bu problemler, makine öğrenimi modellerinin eğitilmesi, doğrulanması ve sonuçların değerlendirilmesi gerektiren önemli bir alanı temsil eder.
Support Vector Machine (SVM)’nin sınıflandırma problemlerindeki rolü nedir?
Destek Vektör Makineleri (Support Vector Machines — SVM), sınıflandırma problemlerinde etkili bir algoritmadır. SVM, özellikle doğrusal olarak ayrılabilen veri setlerinde ve yüksek boyutlu verilerde iyi performans gösterir. SVM’nin rolü, verileri sınıflara ayırmak için bir hiper düzlem oluşturmaktır. Bu hiper düzlem, sınıflar arasındaki en iyi ayrımı sağlamak üzere optimize edilir. İki sınıf arasındaki ayrımı sağlayan hiper düzlem, maksimum marjinal ayrımı elde etmek için veri noktalarından en uzak olan destek vektörleri kullanır.
Support Vector Machine(SVM) Çalışma Prensibi
1- Veri Hazırlığı: İlk adım, sınıflandırma problemi için kullanılacak veri setinin hazırlanmasıdır. Veri seti, etiketlenmiş örneklerden oluşur, yani her bir veri noktası bir sınıf etiketiyle ilişkilendirilir.
2- Özellik Çıkarma: Veri setindeki her bir veri noktası, bir dizi özellik veya özniteliklerle temsil edilir. Bu özellikler, verinin niteliklerini ve özelliklerini tanımlayan sayısal değerlerdir. Örneğin, bir görüntü sınıflandırma probleminde, piksel değerleri, renk histogramları veya kenar tespiti gibi özellikler kullanılabilir.
3- Model Oluşturma: SVM, veri noktalarını sınıflara ayırmak için bir hiper düzlem oluşturur. İki sınıf arasında maksimum marjinal ayrımı sağlamak için bu hiper düzlem, destek vektörleri kullanarak optimize edilir. Destek vektörleri, sınıflar arasındaki ayrımın belirlenmesinde en kritik noktalardır. SVM, destek vektörlerinin kullanılmasıyla genellemeyi artırır ve aşırı uymayı (overfitting) azaltır.
4- Hiper Düzlem ve Karar Sınırı: SVM’nin temel amacı, sınıflar arasında bir hiper düzlem oluşturmaktır. Bu hiper düzlem, veri noktalarını sınıflara ayırmak için kullanılır. SVM, doğrusal olarak ayrılabilir veri setlerinde doğrusal bir hiper düzlem kullanırken, doğrusal olarak ayrılamayan veri setleri için kernel fonksiyonları kullanarak doğrusal olmayan karar sınırları oluşturabilir.
5- Sınıflandırma: Model oluşturulduktan sonra, yeni veri noktaları sınıflandırılabilir. Yeni veri noktası, hiper düzlem üzerindeki pozisyonuna göre sınıflara atanır. Hiper düzlem üzerinde pozitif veya negatif bir yana düşme ile sınıflandırma yapılır.
SVM, maksimum marjinal ayrımı hedefleyen bir optimizasyon problemi olarak formüle edilir ve genellikle konveks optimizasyon teknikleri kullanılarak çözülür. Bu şekilde, SVM, verileri sınıflara ayırmak ve sınıflandırma problemlerini çözmek için kullanılan etkili bir algoritmadır.

Margin kavramı ve maksimum margin sınıflandırma
Margin: Makine öğrenimi ve sınıflandırma algoritmalarında “margin”, sınıflandırma modeli tarafından belirlenen karar sınırı (decision boundary) ile her sınıfın örnekleri arasındaki boşluğu ifade eder. Margin, bir veri noktasının karar sınırına olan uzaklığını temsil eder. Genel olarak, daha büyük bir margin, modelin daha iyi bir genelleme yapma eğiliminde olduğunu ve daha iyi performans gösterebileceğini gösterir. Margin, aynı zamanda sınıflar arasındaki ayrımı ve örneklerin ne kadar iyi sınıflandırıldığını da ölçmek için kullanılır.
Maksimum Margin Sınıflandırma: Maksimum margin sınıflandırma (Maximum Margin Classification), örnekleri sınıflara ayırmak için bir karar sınırı belirlerken margin’i maksimize etmeyi hedefleyen bir sınıflandırma yöntemidir. Özellikle destek vektör makineleri (SVM) algoritmasında kullanılır. Maksimum margin sınıflandırma, veri noktalarının birbirinden mümkün olduğunca uzakta olmasını sağlar, böylece yeni örneklerin daha iyi sınıflandırılması ve daha iyi genelleme yapılması beklenir. Bu yöntem, örnekleri doğru şekilde sınıflandıran bir karar sınırı bulmak için optimize edilirken, aynı zamanda veri noktaları ve karar sınırı arasındaki margin mesafesini maksimize etmeyi amaçlar.
Maksimum margin sınıflandırma, sınıflar arasındaki ayrımı en iyi şekilde sağlayan ve daha fazla genelleme yapabilen bir sınıflandırma yöntemidir. Bu sayede, doğru şekilde ayırt edilemeyen örneklerin daha iyi bir şekilde sınıflandırılması ve daha iyi bir model performansı elde edilmesi hedeflenir.

Hyperplane” ve “destek vektörler
Hyperplane: Hyperplane, bir veri kümesini sınıflara ayırmak için kullanılan bir karar sınırıdır. İki boyutta, bir hyperplane, bir çizgidir; üç boyutta bir düzlem; daha yüksek boyutlarda ise bir hiperdüzlemdir. Örneğin, iki sınıfı ayıran bir hyperplane, veri noktalarını birbirinden ayıran bir çizgidir. Hyperplane, sınıflandırma algoritmalarında kullanılır ve genellikle maksimum margin sınıflandırmada (örneğin, destek vektör makineleri) veya lojistik regresyonda kullanılan bir karar sınırını ifade eder.
Destek Vektörler: Destek vektörler, maksimum margin sınıflandırma (örneğin, destek vektör makineleri) yönteminde önemli bir rol oynar. Veri noktalarının sınıflandırma kararını etkileyen ve margin ile ilişkili olan noktalardır. Destek vektörler, hyperplane’e en yakın olan ve margin’i belirleyen noktalardır. Maksimum margin sınıflandırmada, destek vektörler margin’i maksimize eden ve sınıflar arasındaki ayrımı en iyi şekilde sağlayan veri noktalarıdır. Bu noktalar, sınıflandırma modelinin optimize edilmesinde ve karar sınırının belirlenmesinde önemli bir rol oynar.
SVM Sınıflandırma
SVM (Destek Vektör Makineleri), makine öğrenimi alanında yaygın olarak kullanılan bir sınıflandırma yöntemidir. SVM, bir veri kümesini iki veya daha fazla sınıfa ayırmak için kullanılır. SVM, maksimum margin sınıflandırma ilkesine dayanır, yani sınıflar arasında en geniş boşluğu sağlamaya çalışır.
Linear SVM
Linear SVM, SVM’nin bir varyasyonudur ve sınıfları lineer olarak ayırmayı hedefler. Lineer SVM, doğrusal bir karar sınırı kullanır ve veri noktalarını sınıflara ayırmak için bir lineer denklemi temsil eden bir hyperplane oluşturur. Linear SVM’nin adımları aşağıdaki gibidir.
1. Veri kümesi: İlk adım, sınıflandırmak istediğimiz etiketlenmiş örneklerden oluşan bir veri kümesinin hazırlanmasıdır.
2. Özellik vektörlerinin ölçeklendirilmesi: Özellik vektörleri genellikle ölçeklendirilir, böylece farklı özelliklerin aynı öneme sahip olmasını sağlar. Sıklıkla kullanılan ölçeklendirme yöntemleri arasında normalizasyon veya standartlaştırma bulunur.
3. Karar sınırının belirlenmesi: Lineer SVM, sınıfları ayırmak için bir lineer karar sınırı (hyperplane) oluşturur. Bu, bir doğru (2D) veya düzlem (3D) olabilir ve daha yüksek boyutlarda bir hiperdüzlem olarak ifade edilebilir.
4. Destek vektörlerin belirlenmesi: Lineer SVM, sınıflar arasındaki maksimum margin (boşluk) ile birlikte destek vektörleri belirler. Destek vektörler, karar sınırına en yakın olan ve sınıflandırma kararını etkileyen noktalardır.
5. Test verilerinin sınıflandırılması: Eğitilmiş lineer SVM modeli kullanılarak, yeni, gözlemlememiş veriler sınıflandırılır. Test verileri, karar sınırının hangi tarafında yer alıyorsa, ilgili sınıfa atanır.

NonLinear SVM
Nonlinear SVM (Non-Linear Destek Vektör Makineleri), sınıfları non-lineer olarak ayırmayı hedefleyen bir Destek Vektör Makineleri (SVM) yöntemidir. Nonlinear SVM, lineer olarak ayrılamayan veri kümesi için kullanılır ve veri noktalarını daha karmaşık bir karar sınırı ile sınıflandırmak için çekirdek fonksiyonlarını kullanır. Nonlinear SVM, veri kümesi lineer olarak ayrılamayan durumlarda etkili bir sınıflandırma yöntemidir. Çekirdek fonksiyonları sayesinde veri noktalarını daha yüksek boyutlu uzaylara taşıyarak lineer olarak ayrılabilir. Linear SVM’nin aşamalarından farklı olarak Çekirdek Fonksiyonun Seçilmesi aşaması vardır. Bu aşamada; lineer olarak ayrılamayan veri kümesini sınıflandırmak için bir çekirdek fonksiyonu kullanır. Çekirdek fonksiyonu, özellik vektörlerini daha yüksek boyutlu uzaylara taşıyarak lineer olarak ayrılabilir hale getirir. Örneğin, çoklu boyutlu polinomiyel, RBF (Radial Basis Function) veya sigmoid gibi çekirdek fonksiyonları kullanılabilir.

Kernel fonksiyonları ve kernel trick’inin kullanımı
Kernel Fonksiyonları: Kernel fonksiyonları, veri noktalarını daha yüksek boyutlu uzaylara taşıyarak lineer olarak ayrılamayan veri kümesini lineer olarak ayrılabilir hale getiren matematiksel fonksiyonlardır. Kernel fonksiyonları, veri noktaları arasındaki iç ürünün bir şekilde hesaplanmasını sağlar ve bu sayede lineer olmayan ilişkileri modelleyebilir. Örneğin, çoklu boyutlu polinomiyel, RBF (Radial Basis Function), sigmoid gibi kernel fonksiyonları yaygın olarak kullanılır.
Kernel Trick: Kernel trick, kernel fonksiyonlarının kullanıldığı bir tekniktir. Kernel trick, veri kümesini daha yüksek boyutlu bir uzaya taşımadan doğrudan kernel fonksiyonunu kullanmayı mümkün kılar. Bu, hesaplama açısından daha verimli bir yöntemdir çünkü veri noktalarını yüksek boyutlu uzaylara taşımak yerine, kernel fonksiyonunu kullanarak lineer olmayan ilişkileri modellemek için iç ürünü hesaplar.
Kernel trick’in kullanımı, SVM’nin non-lineer sınıflandırmalar için etkili bir araç haline gelmesini sağlar. Öncelikle, kernel fonksiyonu seçilir ve veri noktaları bu fonksiyona uygulanır. Daha sonra, SVM algoritması bu kernelize edilmiş veri kümesi üzerinde çalışır ve lineer olmayan bir karar sınırı oluşturur. Bu sayede, lineer olarak ayrılamayan veri kümesi daha iyi bir şekilde sınıflandırılabilir.
Kernel trick, SVM’nin genellemesini sağlayarak non-lineer verilerin sınıflandırılmasını kolaylaştırır. Bu sayede SVM, daha karmaşık ve esnek sınıflandırma modelleri oluşturabilir ve veri noktalarını daha yüksek boyutlu uzaylara taşımadan lineer olmayan ilişkileri yakalayabilir.

SVM Parametreleri
C parametresi
C Parametresi: C parametresi, SVM modelinin düzenlilik ve marjinal hata arasındaki dengeyi kontrol etmek için kullanılır. C parametresi, SVM modelinin sınıflandırma hatasını minimize etmek veya marjinal hatayı minimize etmek arasında bir tercih yapmanızı sağlar.
Küçük C değeri: Küçük bir C değeri, SVM modelinin daha genel bir sınıflandırma kararı almasını sağlar. Bu durumda, SVM modeli, daha fazla veri noktasını yanlış sınıflandırabilir, ancak marjinal hatayı minimize etmeye çalışır. Küçük C değerleri, modelin düzenliliği artırır ve aşırı uydurmaya (overfitting) karşı daha dirençli olmasını sağlar.
Büyük C değeri: Büyük bir C değeri, SVM modelinin sınıflandırma hatasını minimize etmeye odaklanmasını sağlar. Bu durumda, SVM modeli, daha az yanlış sınıflandırma yapmayı hedefler, ancak marjinal hatayı tolere etme eğilimindedir. Büyük C değerleri, modelin veriye daha fazla uymasını sağlar, ancak aşırı uydurmaya daha eğilimli olabilir. C parametresinin değeri, modelin performansını ve genelleme yeteneğini etkiler. Doğru C değeri, modelin veriye uyum sağlayabilmesini ve yeni verilerde iyi performans gösterebilmesini sağlar. C değeri, genellikle çapraz doğrulama (cross-validation) veya model optimizasyon teknikleri kullanılarak belirlenir. Özetlemek gerekirse, C parametresi SVM modelinin düzenlilik ve marjinal hatayı dengelemesini kontrol eden bir parametredir. Küçük C değerleri daha fazla düzenlilik sağlarken, büyük C değerleri daha fazla sınıflandırma doğruluğuna odaklanır. Optimal C değeri, modelin spesifik veri kümesi için belirlenmelidir.

Kernel fonksiyonu seçimi ve parametrelerinin ayarlanması
Bazı kernel fonksiyonları, ayarlanması gereken ek parametrelere sahiptir. Örneğin, polinomiyel kernelin derecesi, RBF kernelinin genlik (gamma) değeri ve sigmoid kernelinin hiperbolic tangent parametresi gibi. Bu parametreler, kernel fonksiyonunun sınıflandırma performansını etkiler. Parametrelerin optimal değerlerini belirlemek, genellikle model optimizasyon teknikleri veya çapraz doğrulama kullanılarak yapılır. Ayrıca, overfitting ve underfitting problemlerine dikkat etmek de önemlidir. Kernel parametrelerinin ayarlanması, modelin genelleme yeteneğini ve performansını artırır. Kernel fonksiyonu seçimi ve parametrelerinin ayarlanması, SVM modelinin başarısını etkiler. Doğru kernel fonksiyonunu ve parametreleri seçmek, veri kümesinin non-lineer ilişkilerini iyi bir şekilde yakalamak ve aşırı uyum veya yetersiz uyum gibi sorunlardan kaçınmak için önemlidir. Bu nedenle, veri kümesinin özelliklerini ve sınıflandırma hedeflerini dikkate alarak, uygun kernel fonksiyonunu seçmek ve parametreleri optimize etmek önemlidir.
SVM’de Overfitting ve underfitting ile mücadele
Overfitting: Overfitting, SVM modelinin eğitim verilerine aşırı uyum sağlaması durumudur. Model, eğitim verilerini çok iyi sınıflandırırken, yeni verilerde düşük performans sergileyebilir. Overfitting, genellikle SVM’nin karmaşık ve esnek bir karar sınırı oluşturma yeteneği nedeniyle ortaya çıkar. Overfitting sorununu gidermek için aşağıdaki adımlar atılabilir:
– Daha fazla eğitim verisi toplamak veya mevcut veriyi bölüştürmek.
– Daha az özellik kullanmak veya özellik seçimi yapmak.
– C parametresi gibi düzenlilik parametrelerini ayarlamak.
– Kernel parametrelerini optimize etmek.
– Çapraz doğrulama kullanarak modelin performansını değerlendirmek.
Underfitting: Underfitting, SVM modelinin eğitim verilerini yeterince iyi sınıflandıramaması durumudur. Model, eğitim verilerinde düşük bir performans sergiler ve genellikle verinin karmaşıklığına uygun bir karar sınırı oluşturamaz. Underfitting sorununu gidermek için aşağıdaki adımlar atılabilir:
– Daha fazla eğitim verisi toplamak veya mevcut veriyi daha iyi kullanmak.
– Daha karmaşık bir model kullanmak veya daha fazla özellik eklemek.
– C parametresi gibi düzenlilik parametrelerini ayarlamak.
– Kernel fonksiyonunu değiştirmek veya kernel parametrelerini optimize etmek.
Overfitting ve underfitting sorunları arasında denge kurmak, SVM modelinin iyi performans sergilemesi için önemlidir. Bu dengeyi sağlamak için, modelin eğitim verilerini iyi öğrenmesini sağlamak ve aynı zamanda yeni verilere de genelleme yapabilmesini sağlamak gereklidir. Optimal bir model elde etmek için, veri kümesinin doğası, boyutu ve karmaşıklığı göz önünde bulundurularak, uygun düzenlilik parametreleri ve kernel fonksiyonu seçilmelidir. Ayrıca, modelin performansını değerlendirmek için çapraz doğrulama gibi teknikler kullanmak da önemlidir.
SVM’nin gerçek dünya problemlerindeki kullanım alanları
Sınıflandırma: SVM, sınıflandırma problemlerinde etkili bir şekilde kullanılabilir. Örneğin, spam filtreleme, görüntü ve ses sınıflandırması, tıbbi teşhisler, finansal risk analizi gibi alanlarda SVM kullanılabilir. SVM, özellikle lineer olarak ayrılabilen veya non-lineer ilişkileri olan veri kümeleri için iyi bir performans gösterir.
Hastalık Teşhisi: SVM, tıbbi teşhislerde kullanılarak hastalık teşhisinde ve risk değerlendirmesinde yardımcı olabilir. Örneğin, kanser teşhisi, kalp hastalıklarının tespiti, nörolojik bozuklukların teşhisi gibi alanlarda SVM kullanılabilir. SVM, sağlık verileri üzerinde sınıflandırma yaparak, hastalıkların erken teşhisini ve tedavi planlamasını destekleyebilir.
Görüntü İşleme: SVM, görüntü sınıflandırma, nesne tanıma ve yüz tanıma gibi görüntü işleme problemlerinde kullanılabilir. SVM, özellikle yüksek boyutlu görüntü özellikleri üzerinde etkili bir şekilde çalışır ve genellikle verilerin iyi bir şekilde ayrılmasını sağlar.
Doğal Dil İşleme: SVM, metin sınıflandırma, duygu analizi, dil tespiti gibi doğal dil işleme problemlerinde kullanılabilir. SVM, metinler üzerindeki özelliklerin sınıflandırılması için kullanılarak, metin tabanlı verilerin analizinde etkili olabilir.
Finansal Analiz: SVM, finansal verilerin analizinde kullanılabilir. Örneğin, hisse senedi fiyat tahmininde, risk analizinde, kredi değerlendirmesinde SVM kullanılabilir. SVM, finansal verilerin karmaşıklığını ele alarak, trendleri ve desenleri belirlemek için kullanılabilir.
Bu sadece SVM’nin kullanılabileceği birkaç alanın bir örneğidir. SVM, genel olarak sınıflandırma ve regresyon problemlerinde kullanılan güçlü bir makine öğrenme algoritmasıdır ve veri analizi, görüntü işleme, biyomedikal mühendislik, finansal analiz, doğal dil işleme gibi birçok alanda başarılı sonuçlar elde etmek için kullanılabilir.
Avantajlar ve Dezavantajlar
Avantajları
– Yüksek Sınıflandırma Başarısı: SVM, doğru kernel fonksiyonu ve parametrelerle kullanıldığında yüksek bir sınıflandırma başarısı elde edebilir. SVM, lineer ve non-lineer veri kümelerinde iyi performans gösterebilir ve karmaşık karar sınırlarını modelleyebilir.
– Etkin Boyut Azaltma: SVM, özellikle yüksek boyutlu veri kümelerinde etkili bir boyut azaltma sağlar. SVM, destek vektörleri kullanarak önemli özellikleri belirleyebilir ve gereksiz özellikleri filtreleyebilir. Bu, veri kümesinin boyutunu azaltarak hesaplama yükünü azaltır ve aşırı uyum riskini azaltır.
– Outlierlara Direnç: SVM, destek vektörleri kullanarak sınıflandırma kararını destekleyen veri noktalarını belirler. Bu nedenle, SVM, veri setindeki aykırı değerlere karşı dirençlidir. Aykırı değerler, SVM modelinin genel performansını etkilemez ve modelin daha iyi genelleme yapmasını sağlar.
– Veri Kümesi Ölçeğinden Bağımsızlık: SVM, veri kümesinin ölçeğine bağımlı değildir. Verilerin standartlaştırılması veya normalleştirilmesi gibi ölçeklendirme adımlarına ihtiyaç duymaz. Bu, SVM’nin farklı ölçeklerdeki veri kümeleriyle etkili bir şekilde çalışabilmesini sağlar.
– Desteğe Dayalı Optimizasyon: SVM, sınıflandırma modelini oluştururken destek vektörleri kullanır. Destek vektörleri, karar sınırının belirlenmesinde önemli bir role sahiptir. Bu destek vektörleri kullanılarak optimize edilen model, genel veri dağılımını daha iyi yakalayabilir ve genellemeyi artırabilir.
– Veri Özelliklerine Dayalı Karar Sınırı: SVM, kernel fonksiyonları aracılığıyla veri kümesinin özelliklerine dayalı olarak esnek karar sınırları oluşturabilir. Bu, non-lineer ilişkileri modellemek için kullanılabilir ve veri kümesindeki karmaşıklığı ele alabilir.
SVM’nin bu avantajları, makine öğrenme ve veri analizi problemlerinde etkili bir araç olarak kullanılmasını sağlar. Ancak, her problemde olduğu gibi, SVM’nin de uygun parametrelerle iyi bir şekilde yapılandırılması önemlidir.
Dezavantajları
– Bellek ve Hesaplama Gereksinimi: SVM, büyük veri kümeleriyle çalışırken bellek ve hesaplama gereksinimleri yüksek olabilir. SVM’nin eğitimi, veri noktalarının çiftler arasındaki mesafelerini hesaplamayı gerektirir ve bu, büyük veri kümelerinde zaman alıcı olabilir.
– Duyarlılık Terimi Seçimi: SVM’de kernel fonksiyonu ve kernel parametreleri doğru bir şekilde seçilmelidir. Bu terimlerin yanlış seçilmesi, modelin performansını olumsuz etkileyebilir. Bu nedenle, uygun kernel ve parametrelerin belirlenmesi deneyime dayalı bir süreç olabilir.
– Yüksek Öğrenme Süresi: SVM’nin eğitimi, bazen diğer makine öğrenme algoritmalarına göre daha uzun sürebilir. SVM, çiftler arasındaki mesafelerin hesaplanması ve optimizasyon süreci nedeniyle zaman alıcı olabilir. Bu, büyük veri kümeleri veya karmaşık modellerle çalışırken özellikle belirgin olabilir.
– Kernel Seçimi Zorluğu: Non-lineer SVM modellerinde doğru kernel fonksiyonunun seçilmesi önemlidir. Farklı veri kümeleri için farklı kernel fonksiyonları en iyi sonuçları verebilir. Ancak, hangi kernel fonksiyonunun seçileceği önceden bilinmeyebilir ve deneme yanılma süreci gerektirebilir.
– Hiperparametre Ayarlaması: SVM’nin iyi performans göstermesi için doğru hiperparametrelerin ayarlanması önemlidir. Örneğin, C parametresi, hata toleransını ve karar sınırının düzgünlüğünü kontrol ederken, kernel parametreleri non-lineer ilişkileri belirler. Bu hiperparametrelerin doğru ayarlanması, modelin performansını etkileyebilir ve deneyime dayalı bir süreç gerektirebilir.
Bu dezavantajlar, SVM’nin kullanımında dikkate alınması gereken faktörlerdir. Bununla birlikte, SVM hala birçok uygulamada etkili bir şekilde kullanılan bir algoritmadır ve genellikle veri analizi, görüntü işleme, doğal dil işleme ve biyomedikal mühendislik gibi alanlarda başarılı sonuçlar verir.
Mail’in spam olup olmadığını tespit eden uygulama örneği
Bu proje, SVM (Support Vector Machine) algoritmasını kullanarak spam e-postalarını filtrelemek için bir uygulama geliştirmeyi amaçlamaktadır. Google Colab ortamında Python programlama dili kullanılarak oluşturulan bu uygulama, TfidfVectorizer ile metin vektörleştirme ve SVC (Support Vector Classification) ile SVM modeli eğitimi sağlamaktadır. Eğitim veri kümesi üzerindeki modelin performansı, test veri kümesiyle değerlendirilerek sınıflandırma raporu elde edilmektedir. Ayrıca, kullanıcıya gerçek zamanlı bir demo sunularak, kullanıcının girdiği metni SVM modeliyle değerlendirerek spam veya normal e-posta olarak sınıflandırmaktadır.
– Data olarak Kaggle üzerinden alınan bir dataset örneği kullanılmıştır. ( https://www.kaggle.com/datasets/venky73/spam-mails-dataset)
1. İlk olarak, gerekli kütüphaneleri import ediyoruz: pandas, train_test_split, TfidfVectorizer, SVC ve classification_report. Bu kütüphaneler, veri işleme, veri kümesi bölme, metin vektörleştirme, SVM modeli ve sınıflandırma raporu gibi işlemler için kullanılır.
pandas: Veri işleme ve manipülasyonu için kullanılan bir Python kütüphanesidir. Bu projede, veri setinin yüklenmesi ve kolonlara erişim için pandas kullanılıyor.
sklearn.model_selection.train_test_split: Veri kümesini eğitim ve test alt kümelerine bölmek için kullanılan bir fonksiyondur. Bu sayede, modelin eğitim verileri üzerinde eğitilmesi ve performansının test verileriyle değerlendirilmesi sağlanır.
sklearn.feature_extraction.text.TfidfVectorizer: Metin verilerini sayısal vektörlere dönüştürmek için kullanılan bir sınıftır. TfidfVectorizer, TF-IDF (Term Frequency-Inverse Document Frequency) yöntemini kullanarak metinlerin vektörel temsilini oluşturur. Bu projede, e-posta metinlerinin vektörleştirilmesi için kullanılır.
sklearn.svm.SVC: Support Vector Classification (SVC) algoritmasını uygulayan bir sınıftır. SVM algoritmasını kullanarak sınıflandırma problemlerini çözer. Bu projede, eğitim verileri üzerindeki SVM modelini oluşturmak ve eğitmek için kullanılır.
sklearn.metrics.classification_report: Sınıflandırma modelinin performansını değerlendirmek için kullanılan bir fonksiyondur. Precision, recall, f1-score ve support gibi metrikleri sağlar. Bu projede, modelin sınıflandırma performansını raporlamak için kullanılır.

2. spam_ham_dataset.csv dosyasını pandas kütüphanesi aracılığıyla yüklüyoruz ve data adlı değişkene atıyoruz. Bu veri kümesi, spam ve normal e-postaların etiketlendiği bir tablo şeklinde olmalıdır.

3. Veri kümesini özellikler (X) ve hedef değişken (y) olarak ayırıyoruz. text sütununu özellikler olarak, label sütununu ise hedef değişken olarak kullanıyoruz.

4. Veri kümesini eğitim ve test alt kümelerine bölmek için train_test_split fonksiyonunu kullanıyoruz. Burada, X ve y’yi X_train, X_test, y_train ve y_test olarak böldük. Test veri kümesi, toplam veri kümesinin %20’sini oluşturacak şekilde belirledik.

5. Metin verilerini sayısal vektörlere dönüştürmek için TfidfVectorizer’ı kullanıyoruz. Bu, metin verilerini TF-IDF (Terim Frekansı-Ters Belge Frekansı) değerlerine dönüştürmek için kullanılan bir tekniktir. X_train ve X_test verilerini ayrı ayrı vektörlere dönüştürüyoruz.

6. SVM (Support Vector Machine) modelini oluşturup eğitiyoruz. SVC sınıfını kullanarak varsayılan parametrelerle bir SVM modeli oluşturuyoruz. Eğitim veri kümesini (X_train_vectorized ve y_train) kullanarak modeli eğitiyoruz.

7. Modeli değerlendiriyoruz. Test veri kümesini (X_test_vectorized ve y_test) kullanarak tahminler yaparak bir sınıflandırma raporu yazdırıyoruz.

Bu kod, SVM modelinin performansını değerlendirmek için test veri kümesi üzerinde tahminler yapar ve bir sınıflandırma raporu yazdırır. y_pred = svm_model.predict(X_test_vectorized) satırı, eğitilmiş SVM modelini kullanarak X_test_vectorized veri kümesi üzerinde tahminler yapar ve bu tahminleri y_pred değişkenine atar.
classification_report(y_test, y_pred) satırı, y_test (gerçek etiketler) ve y_pred (tahmin edilen etiketler) arasındaki karşılaştırmayı yapar ve sınıflandırma performansını ayrıntılı bir rapor şeklinde yazdırır. Bu rapor, sınıflandırma modelinin her bir sınıf için precision (kesinlik), recall (duyarlılık), f1-score (F1 skoru) ve support (destek) değerlerini içerir.
Bu sınıflandırma raporu, modelin her bir sınıf için performansını değerlendirmenizi sağlar. Precision, recall ve F1 skorları ne kadar yüksek olursa, modelin o sınıfı doğru bir şekilde sınıflandırma yeteneği o kadar iyidir. Support değeri, veri kümesindeki sınıf dengesini gösterir.
Tablodaki verilere göre yorumlayacak olursak;
– Ham sınıfı için precision değeri 1.00’dır, yani modelin ham olarak tahmin ettiği örneklerin tamamı gerçekten hamdır.
– Spam sınıfı için precision değeri 0.96’dır, yani modelin spam olarak tahmin ettiği örneklerin %96’sı gerçekten spamdır.
– “Recall” (duyarlılık), gerçekten ham veya spam olan örneklerin model tarafından ne kadar doğru bir şekilde tespit edildiğini gösterir. Ham sınıfı için recall değeri 0.98’dir, yani gerçekten ham olan örneklerin %98’i doğru bir şekilde tespit edilmiştir. Spam sınıfı için recall değeri 0.99’dur, yani gerçekten spam olan örneklerin %99’u doğru bir şekilde tespit edilmiştir.
– “F1-score” ise precision ve recall değerlerinin harmonik ortalamasını temsil eder. Bu metrik, modelin hem precision hem de recall açısından ne kadar iyi performans gösterdiğini gösterir. Ham sınıfı için F1-score değeri 0.99’dur, yani modelin hem precision hem de recall açısından ham sınıfı iyi bir şekilde tahmin ettiğini gösterir. Spam sınıfı için F1-score değeri 0.97’dir, yani modelin hem precision hem de recall açısından spam sınıfını iyi bir şekilde tahmin ettiğini gösterir.
– “Support” değeri, her bir sınıf için veri kümesindeki örnek sayısını temsil eder. Bu tabloda, ham sınıfı için 742 örnek ve spam sınıfı için 293 örnek bulunmaktadır.
– Son olarak, “accuracy” (doğruluk) değeri, modelin doğru sınıflandırma oranını gösterir. Bu tabloda, 1035 örneğin %99’u doğru bir şekilde sınıflandırılmıştır.
Genel olarak, bu tablo modelin spam mailleri filtrelemedeki performansının oldukça yüksek olduğunu göstermektedir. Hem ham hem de spam sınıfı için yüksek precision, recall ve F1-score değerleri, modelin hem doğru ham tahminler yapabildiğini hem de spam maillerini başarılı bir şekilde tespit edebildiğini gösterir. Accuracy değeri de yüksek olduğundan, modelin genel olarak iyi bir performansa sahip olduğunu söyleyebiliriz.
8. Demo uygulamasını başlatıyoruz. Bir döngü içinde kullanıcıdan bir e-posta metni alıyoruz (user_input). Kullanıcının girdisi olan metni, vektörize etmek için vectorizer’ı kullanıyoruz. Ardından, SVM modeliyle (svm_model) tahmin yaparak sonucu alıyoruz. Eğer sonuç ‘spam’ ise kullanıcıya “Bu bir spam e-postasıdır.” mesajını gösteriyoruz, aksi takdirde “Bu bir normal e-postadır.” mesajını gösteriyoruz.

Uygulama Kodları
Projenin kodlarına ve detaylı README.md dosyasına https://github.com/KardelRuveyda/detect-email-spam-vs-ham linkinden ulaşabilirsiniz.
Bu çalışma ile birlikte SVM (Destek Vektör Makinesi) algoritmasının temel prensipleri üzerine bir inceleme sunmayı hedefledim. Ek olarak yapılan uygulama gerçek dünya verileri üzerinde SVM’nin etkinliğini ve doğruluğunu değerlendirmek için kullandım. Sonuç olarak, önce temellerinin anlatıldığı çalışma sonunda bir uygulama ile pekiştirilerek tamamlamaya çalıştım. Umarım faydalı olmuştur. Bir sonraki yazıda görüşmek üzere 🙂
Kaynakça
[2] Kaggle https://www.kaggle.com/datasets/venky73/spam-mails-dataset
[3] IEEE Explore https://ieeexplore.ieee.org/document/8674973
[4] Youtube https://www.youtube.com/watch?v=CKs_vxCqMlw
[5] Youtube https://www.youtube.com/watch?v=MHOJV07gSVw