Garfield
YZF Admin
Naive Bayes sınıflandırıcısını scikit-learn ile kullanmak için veriyi eğitim ve test kümelerine ayırıp uygun Naive Bayes modelini seçmeniz, modeli
Naive Bayes, özelliklerin sınıfa göre koşullu olarak bağımsız olduğu varsayımıyla olasılık hesaplayan hızlı bir sınıflandırma yaklaşımıdır. Gerçek veriler bu varsayımı tam olarak karşılamasa bile özellikle küçük veri kümelerinde ve metin sınıflandırmada iyi bir başlangıç modeli olabilir.
Ön koşul olarak Python ve scikit-learn kurulmalıdır. Kurulum yapacaksanız terminalde şu komutu çalıştırın:
Ardından aşağıdaki örneği bir Python dosyasına kaydedip çalıştırabilirsiniz. Veriler öğretici olması için varsayımsaldır; gerçek bir modelin başarısını temsil eden test sonucu değildir.
Kod bloğundaki
Naive Bayes modelini veri türüne göre seçmek, algoritmanın adından daha önemlidir. Aşağıdaki ayrım, başlangıç kararını kolaylaştırır.
Tablodaki seçimler başlangıç noktasıdır; en iyi model veri kümesine göre değişir. Özellikle etiketlerden biri çok daha sık görülüyorsa yalnızca
Yeni veriyi tahmin etmeden önce eğitim sırasında kullanılan metin temizleme ve vektörleştirme işlemlerinin aynı biçimde uygulanması gerekir.
Girdi metin değil, örneğin yaş, gelir ve işlem sayısı gibi sayısal sütunlardan oluşuyorsa
Buradaki çıktı, modelin eğitim örneklerinden öğrendiği sınıflardan biri olur. Bu küçük örnek yalnızca API kullanımını gösterir; dört satırlık veriyle anlamlı bir gerçek dünya kararı verilemez. Gerçek kullanımda eksik değerleri, sınıf dengesini, ölçüm hatalarını ve bağımsız bir test kümesindeki performansı ayrıca kontrol etmelisiniz.
Naive Bayes hızlı ve anlaşılır bir temel modeldir; ancak özellikler arasındaki ilişkiler güçlü olduğunda veya karar sınırları karmaşıklaştığında başka sınıflandırıcılarla karşılaştırılması gerekebilir. İlk sonraki adım, aynı veri bölünmesini koruyarak uygun birkaç modeli aynı ölçütlerle değerlendirmek ve yalnızca doğruluk değil sınıf bazlı sonuçlara göre seçim yapmaktır.
fit() ile eğitmeniz ve predict() ile tahmin almanız yeterlidir. Metin sınıflandırmada en pratik başlangıç, TfidfVectorizer ile metni sayısal özelliklere dönüştürüp MultinomialNB kullanmaktır. Aşağıdaki örnek, kısa metinleri "olumlu" ve "olumsuz" olarak sınıflandırır; çalıştırıldığında yeni bir cümlenin sınıfını ve sınıf olasılıklarını üretir.Hangi Naive Bayes modeli seçilmeli?
Naive Bayes, özelliklerin sınıfa göre koşullu olarak bağımsız olduğu varsayımıyla olasılık hesaplayan hızlı bir sınıflandırma yaklaşımıdır. Gerçek veriler bu varsayımı tam olarak karşılamasa bile özellikle küçük veri kümelerinde ve metin sınıflandırmada iyi bir başlangıç modeli olabilir.
- MultinomialNB: Kelime sayıları veya TF-IDF gibi negatif olmayan metin özellikleri için uygundur.
- BernoulliNB: Bir özelliğin var/yok olması gibi ikili göstergelerle çalışır.
- GaussianNB: Sürekli sayısal özelliklerin yaklaşık normal dağıldığı durumlarda kullanılır.
- ComplementNB: Özellikle sınıfların dengesiz olduğu bazı metin sınıflandırma görevlerinde alternatif olarak denenebilir.
MultinomialNB modeline veremezsiniz; önce kelimeleri sayısal özelliklere dönüştürmeniz gerekir. Bu dönüşümü modelle birlikte Pipeline içine almak, eğitim ve tahmin sırasında aynı işlemlerin uygulanmasını sağlar.Metin sınıflandırma için çalışan örnek
Ön koşul olarak Python ve scikit-learn kurulmalıdır. Kurulum yapacaksanız terminalde şu komutu çalıştırın:
Python:
python -m pip install scikit-learn
Ardından aşağıdaki örneği bir Python dosyasına kaydedip çalıştırabilirsiniz. Veriler öğretici olması için varsayımsaldır; gerçek bir modelin başarısını temsil eden test sonucu değildir.
Python:
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, classification_report
metinler = [
"ürün çok kaliteli ve kullanışlı",
"hızlı teslimat ve başarılı hizmet",
"uygulama oldukça pratik",
"üründen memnun kaldım",
"kalitesiz ve kullanışsız ürün",
"teslimat çok gecikti",
"uygulama sürekli hata veriyor",
"üründen memnun kalmadım",
"hizmet beklediğimden kötüydü",
"ürün fiyatına göre başarılı"
]
etiketler = [
"olumlu", "olumlu", "olumlu", "olumlu", "olumsuz",
"olumsuz", "olumsuz", "olumsuz", "olumsuz", "olumlu"
]
X_egitim, X_test, y_egitim, y_test = train_test_split(
metinler,
etiketler,
test_size=0.3,
random_state=42,
stratify=etiketler
)
model = Pipeline([
("vektor", TfidfVectorizer()),
("siniflandirici", MultinomialNB())
])
model.fit(X_egitim, y_egitim)
tahminler = model.predict(X_test)
print("Doğruluk:", accuracy_score(y_test, tahminler))
print(classification_report(y_test, tahminler, zero_division=0))
yeni_metinler = [
"teslimat hızlı ve ürün çok başarılı",
"uygulama kullanışsız ve sürekli hata veriyor"
]
siniflar = model.predict(yeni_metinler)
olasiliklar = model.predict_proba(yeni_metinler)
for metin, sinif, olasilik in zip(yeni_metinler, siniflar, olasiliklar):
print("Metin:", metin)
print("Tahmin:", sinif)
print("Olasılıklar:", dict(zip(model.classes_, olasilik)))
Kod bloğundaki
tahminler satırının başında boşluk olmamalıdır. Doğru satır şöyledir:
Python:
tahminler = model.predict(X_test)
Kodun çalışma sırası
- Veriyi hazırlayın.
metinlergiriş cümlelerini,etiketlerise her cümlenin doğru sınıfını içerir. İki listenin uzunluğu aynı olmalıdır. - Veriyi ayırın.
train_test_split(), modelin görmediği test örnekleri oluşturur.stratify=etiketler, küçük veri kümelerinde sınıf dağılımının mümkün olduğunca korunmasına yardımcı olur. - Dönüşüm ve sınıflandırıcıyı birleştirin.
TfidfVectorizermetinleri sayısal vektörlere çevirir;MultinomialNBbu vektörlerden sınıf tahmini yapar. - Modeli eğitin.
model.fit(X_egitim, y_egitim)çağrısı vektörleştiriciyi yalnızca eğitim metinleriyle öğrenir ve sınıflandırıcıyı bu özelliklerle eğitir. - Test sonucunu ölçün.
accuracy_scoredoğru tahmin oranını verir.classification_reportise her sınıf için precision, recall ve F1-score değerlerini gösterir. - Yeni metinleri sınıflandırın.
predict()en olası sınıfı,predict_proba()ise modelin öğrendiği sınıflara ait olasılık tahminlerini döndürür.
Model seçimi ve sonuçların yorumu
Naive Bayes modelini veri türüne göre seçmek, algoritmanın adından daha önemlidir. Aşağıdaki ayrım, başlangıç kararını kolaylaştırır.
| Veri türü | Başlangıç modeli | Dikkat edilmesi gereken nokta |
|---|---|---|
| Kelime sayısı veya TF-IDF özellikleri | MultinomialNB | Özellik değerleri negatif olmamalıdır. |
| Kelime var/yok bilgisi | BernoulliNB | İkili özellik temsili kullanılmalıdır. |
| Sürekli sayısal ölçümler | GaussianNB | Özelliklerin dağılımı ve ölçeği incelenmelidir. |
| Dengesiz metin sınıfları | ComplementNB | Sonuçlar sınıf bazında ayrıca değerlendirilmelidir. |
accuracy değerine bakmayın. Az görülen sınıfın recall ve F1-score değerlerini de inceleyin. Modelin bir sınıfı sürekli tahmin etmesi, yüksek doğruluk görülse bile veriyi iyi öğrendiği anlamına gelmez.Yeni veriyi tahmin etmeden önce eğitim sırasında kullanılan metin temizleme ve vektörleştirme işlemlerinin aynı biçimde uygulanması gerekir.
Pipeline bunu otomatik yaptığı için, eğitimde kullanılan TfidfVectorizer nesnesinden ayrı bir vektörleştiriciyle tahmin yapmak yerine doğrudan model.predict() kullanın. Ayrıca test verisini eğitim sırasında modele vermeyin; aksi durumda ölçüm verisi modele sızar ve sonuç gerçekte olduğundan iyi görünebilir.Yeni sayısal verilerde kullanım
Girdi metin değil, örneğin yaş, gelir ve işlem sayısı gibi sayısal sütunlardan oluşuyorsa
GaussianNB ile benzer bir akış kullanabilirsiniz:
Python:
from sklearn.naive_bayes import GaussianNB
X = [
[25, 30000, 2],
[42, 85000, 8],
[31, 50000, 4],
[55, 120000, 10]
]
y = ["dusuk", "yuksek", "orta", "yuksek"]
model = GaussianNB()
model.fit(X, y)
sonuc = model.predict([[35, 60000, 5]])
print(sonuc)
Buradaki çıktı, modelin eğitim örneklerinden öğrendiği sınıflardan biri olur. Bu küçük örnek yalnızca API kullanımını gösterir; dört satırlık veriyle anlamlı bir gerçek dünya kararı verilemez. Gerçek kullanımda eksik değerleri, sınıf dengesini, ölçüm hatalarını ve bağımsız bir test kümesindeki performansı ayrıca kontrol etmelisiniz.
Naive Bayes hızlı ve anlaşılır bir temel modeldir; ancak özellikler arasındaki ilişkiler güçlü olduğunda veya karar sınırları karmaşıklaştığında başka sınıflandırıcılarla karşılaştırılması gerekebilir. İlk sonraki adım, aynı veri bölünmesini koruyarak uygun birkaç modeli aynı ölçütlerle değerlendirmek ve yalnızca doğruluk değil sınıf bazlı sonuçlara göre seçim yapmaktır.
Son düzenleme: