Sonuç sadece eğitim durumundaki olumlu vakalarla nasıl tahmin edilir?


21

Sadelik adına, spam / spam olmayan e-postaların klasik örneği üzerinde çalışıyorum diyelim.

20.000 e-posta setim var. Bunlardan 2000'in spam olduğunu biliyorum ama spam olmayan e-postalardan hiçbir örneğim yok. Kalan 18000’in spam olup olmadığını tahmin etmek istiyorum. İdeal olarak, aradığım sonuç, e-postanın spam olma olasılığı (veya bir p değeri).

Bu durumda mantıklı bir tahmin yapmak için hangi algoritmaları kullanabilirim?

Şu anda, e-postalarımın bilinen bir spam e-postasıyla ne kadar benzer olduğunu söyleyen bir mesafeye dayalı bir yöntem düşünüyorum. Hangi seçeneklere sahibim?

Daha genel olarak, denetimli bir öğrenme yöntemi kullanabilir miyim, yoksa bunu yapmak için eğitim setimde mutlaka olumsuz vakalara ihtiyacım var mı? Denetlenmeyen öğrenme yaklaşımlarıyla sınırlı mıyım? Yarı denetimli yöntemlerden ne haber?


1
Kullanacağınız herhangi bir öğrenme algoritması, tüm e-postaların spam olmasını öngörecektir. Mantıklı bir öğrenme için iki kategoriden örnekler almalısınız.
JohnRos

Tamam, bu klasik bir denetimli öğrenme yaklaşımını dışlardı. Ancak, bir tür benzerlik ölçütleri döndüren bir algoritma var mı? Örn: bu e-posta spam e-postaya çok benzer, diğeri de değildir.
enricoferrero

6
@ JohnRos doğru değil, pozitif ve etiketlenmemiş verilerden öğrenmek yarı denetimli öğrenmede büyük bir konudur ve sizin tarif ettiğiniz gibi değildir.
Marc Claesen

5
@ MarcClaesen: Bu (çok güzel) araştırma hattını bilmiyordum. Büyünün, etiketlenmemiş verilerin spam ile spam olmayan bir karışımı olduğu varsayımıyla görüyorum, bu da sorunu çözülebilir hale getiriyor.
JohnRos

Yanıtlar:


19

Buna pozitif ve etiketsiz verilerden öğrenme veya kısaca PU öğrenme denir ve yarı denetimli öğrenmenin aktif bir yeridir.

Kısaca, etiketlenmemiş verilerin öğrenme sürecinde kullanılması önemlidir, çünkü sadece bilinen pozitifler üzerinde eğitilen tek sınıflı sınıflayıcılar üzerinde önemli ölçüde gelişmiş modeller sağlar. Etiketlenmemiş veriler birkaç yolla birleştirilebilir, baskın olan aşağıdaki gibidir:

  • Her nasılsa etiketlenmemiş verilerden bir dizi olası negatif çıkarır ve daha sonra bilinen pozitifleri bu çıkarılmış negatiflerden ayırmak için denetlenen bir model geliştirir.
  • etiketlenmemiş seti negatif olarak kabul edin ve bir şekilde mevcut olduğu bilinen etiket gürültüsünü hesaba katın.

Bu alanda aktif olarak çalışıyorum ve burada sizin için özetlemek yerine, alanım hakkında genel bir bilgi edinmek için iki makalemi ve buradaki referansları okumanızı öneriyorum:


1
Mükemmel! Referanslar için çok teşekkürler. RESVM ve torbalı SVM, PU öğrenme ortamında benzer şekilde performans göstermektedir. Herhangi bir algoritmanın uygulamalarını (tercihen R cinsinden) önerebilir misiniz? Ne yazık ki, ne de karete dahil gibi görünüyor.
enricoferrero

1
@enricoferrero Evet, yanlış (bilinen) pozitifler olmadığı sürece benzer şekilde performans gösterirler; bu durumda RESVM, torbalama SVM'sini önemli ölçüde daha iyi performans gösterir (üzerinde çalıştığım uygulamanın yanlış pozitifleri olduğundan RESVM'yi tasarladım). Kolayca R uygulamaları olduğunu sanmıyorum, ancak kernlabya da gibi bir SVM uygulamasını silerek her ikisini de kolayca uygulayabilirsiniz e1071. Hem torbalı SVM hem de RESVM'nin, Optunity kütüphanesini tavsiye ettiğim (bir R arayüzü olan) optimize etmeniz gereken bir dizi hiperparametreye sahip olduğunu unutmayın .
Marc Claesen 28:15

1
@enricoferrero github.com/claesenm/resvm adresinde bulunan RESVM'in komut satırı uygulamasına sahibim ; Bu özel repo Python'da yazılmıştır ve EnsembleSVM paketi için bir sürücü olarak kullanılır .
Marc Claesen 28:15

Torbalı bir SVM algoritması için başka iyi bir seçenek gibi görünüyor ki, R'deki mlr paketini bir SVM öğrencisinin etrafındaki bir torba sarmalayıcıyla kullanmak olabilir .
enricoferrero

7

18000 durumunuzda pek çok spam olayı olmadığını farz ediyorum. Bunun için denetimli bir öğrenme yaklaşımı kullanmak için verilerinizde 1'den fazla kategori / sınıf olması gerekir. 2000 vakanın spam olduğunu bildiğinizden, geri kalan 18000 vakayı 'bilinmeyen kategori' olarak etiketleyebilir ve bir vakanın spam veya bilinmeyen kategoride olup olmadığını tahmin etmek için denetlenen herhangi bir öğrenme modelini eğitebilirsiniz. Ardından, modelin 2 kategoriyi birbirinden ayırmak için ne kadar iyi performans gösterdiğini görmek için örnekleme modelinizin doğruluğunu kontrol edin. İyi performans gösteriyorsa, 'bilinmeyen' kategorisindeki birkaç spam durumunun varsayımı garanti altındadır. İyi performans göstermezse, verilerinizdeki ayrı homojen grupları kümelemek ve tanımlamak için denetlenmemiş bir öğrenci (kmeans, vb.) Kullanmanız gerekir. Ardından, 2000 spam e-postalarından en çok hangi kümelerin içerdiğini belirleyin, ve hangileri bunu yapmaz ve sırasıyla spam ve spam olmayan olarak etiketler. Daha sonra, daha önce tarif ettiğim gibi denetimli bir öğrenci kullanarak modellemeye devam edebilirsiniz.


2

OP'nin bahsettiği şey, çok zorlu olan bir sınıf sınıflandırma görevidir.

Bu konuda farklı araştırma alanlarında birçok makale var. Ben de bir tane yazdım , Topluluk Öğrenmeye Dayalı Etkin bir İçsel Yazarlık Doğrulama Düzeni . Spam'ı sınıflandırmak ve uyarlamak yerine yazar yerine uyarlamak çok kolaydır. Bir deneyin ve daha fazla ayrıntıya ihtiyacınız olursa haber verin ...


Bağlantınızı takip ederken 404 hatası alıyorum.
enricoferrero

Bir yazım hatası vardı. Bunun için üzgünüm, şimdi çalışması gerekir ;-)
İşlenmeyen istisna
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.