Bu proje, ML.NET kullanarak spam e-posta sınıflandırması yapan bir makine öğrenmesi uygulamasıdır.
Bu projenin temel amacı ML.NET öğrenmek ve makine öğrenmesi temellerini uygulamalı olarak anlamaktır. Spam mail sınıflandırması, makine öğrenmesine başlamak için ideal bir problemdir çünkü:
- Anlaşılması kolay bir problem
- İyi sonuçlar veren bir problem
- ML.NET'in temel özelliklerini öğrenmek için uygun
- Kaynak: Kaggle
- Dosya:
spam.csv - Toplam Veri: 5,574 satır
- Sütunlar:
v1: Etiket (ham/spam)v2: E-posta mesajı içeriği
Veri seti Kaggle'dan indirilmiştir ve proje içinde Data/spam.csv konumunda bulunmaktadır.
ML.NET-SpamMailTespit/
├── SpamClassifier/
│ ├── Data/
│ │ └── spam.csv # Veri seti
│ ├── Program.cs # Ana program
│ ├── SpamData.cs # Veri modeli
│ ├── SpamPrediction.cs # Tahmin modeli
│ └── SpamClassifier.csproj # Proje dosyası
└── README.md
- .NET 8.0
- ML.NET 5.0
- C#
- Projeyi klonlayın veya indirin
- .NET 8.0 SDK'nın yüklü olduğundan emin olun
- Proje dizinine gidin:
cd SpamClassifier - Bağımlılıkları yükleyin:
dotnet restore
- Projeyi çalıştırın:
dotnet run
CSV dosyasından veri yüklenir ve ML.NET'in IDataView formatına dönüştürülür.
Veri seti %80 eğitim ve %20 test olarak ayrılır:
- Eğitim Seti: Modeli eğitmek için kullanılır
- Test Seti: Modelin performansını ölçmek için kullanılır
ML.NET pipeline'ı şu adımlardan oluşur:
- MapValue: String label'ları ("ham"/"spam") Boolean değerlere dönüştürür
- FeaturizeText: Mesaj metnini sayısal özelliklere dönüştürür
- SdcaLogisticRegression: Binary sınıflandırma algoritması ile model eğitilir
Eğitim verisi kullanılarak model eğitilir. Model, spam ve ham mesajları ayırt etmeyi öğrenir.
Test verisi kullanılarak modelin performansı ölçülür. Aşağıdaki metrikler hesaplanır:
- Doğruluk (Accuracy): Doğru tahmin yüzdesi
- AUC: Modelin ayırt etme yeteneği
- F1 Skoru: Kesinlik ve duyarlılığın dengelenmiş ölçüsü
- Kesinlik (Precision): Spam olarak tahmin edilenlerin ne kadarı gerçekten spam?
- Duyarlılık (Recall): Gerçek spam'lerin ne kadarı yakalandı?
Model eğitildikten sonra aşağıdaki performans metrikleri elde edilmiştir:
- Doğruluk (Accuracy): %97.28
- AUC: 0.9906
- F1 Skoru: 0.8997
- Kesinlik (Precision): 0.9630
- Duyarlılık (Recall): 0.8442
Bu proje ile aşağıdaki ML.NET ve makine öğrenmesi kavramları öğrenilmiştir:
- MLContext: ML.NET'in ana sınıfı
- Veri Yükleme: CSV'den veri yükleme
- Train/Test Split: Veriyi eğitim ve test setlerine ayırma
- Pipeline: Veri işleme ve model eğitme adımları
- Transform: Veri dönüşümleri (MapValue, FeaturizeText)
- Trainer: Model algoritmaları (SdcaLogisticRegression)
- Fit: Model eğitimi
- Transform: Tahmin yapma
- Evaluate: Model performansını ölçme
- Overfitting: Aşırı öğrenme kavramı
- Binary Classification: İkili sınıflandırma
- Model her çalıştırmada yeniden eğitilir
- Veri seti Kaggle'dan indirilmiştir
- Proje eğitim amaçlıdır
Bu proje ML.NET öğrenmek amacıyla oluşturulmuştur.