2016-03-28 19 views
0

"İki dilli belgelerden komut dosyası tanımlaması" üzerinde çalışıyorum. Sayfaları/blokları Eng (sınıf 1), Hintçe (sınıf 2) veya matlab içinde libsvm kullanarak karışık olarak sınıflandırmak istiyorum. ama sorun şu ki, verdiğim eğitim verisi sadece Hintçe ve İngilizce sayfalara/bloklara karşılık gelen ancak karışık sayfalar olmayan örneklerden oluşuyor.SVM'de çok sınıflı sınıflandırma

Vermek istediğim test verileri karışık sayfalardan/bloklardan oluşabilir, bu durumda "Karışık" olarak sınıflandırılmasını istiyorum. Güven puanı veya olasılık değerleri kullanarak yapmayı planlıyorum. Sınıf 1'in prob değeri bir eşik değerinden büyük (örneğin 0.8) ve sınıf 2'nin prob değeri bir eşik değerinden (0,05) daha küçükse, o zaman sınıf 1 ve sınıf 2 tam tersi olarak sınıflandırılır. ama eğer yukarıda bahsedilen iki koşul tatmin olmazsa, onu “Karışık” olarak sınıflandırmak istiyorum.

"Libsvmpredict" öğesinden gelen üçüncü dönüş değeri prob_values'tır ve test verilerin Hintçe, İngilizce veya Karışık olup olmadığına karar vermek için bu prob_değerleri ile devam etmeyi planlıyorum. ama birkaç yerde "libsvmpredict" ın gerçek prob_değerlerini üretmediğini öğrendim. SVM'de sadece 2 sınıftan oluşan eğitim verilerini kullanarak test verilerini 3 sınıfa (Hintçe, İngilizce, Karışık) sınıflandırmam için bana yardımcı olabilecek herhangi bir yol var mıdır?.

+0

mi oldukça iyi dosyası vardır Matlab kullanabilirsiniz tür dosyaları oluşturmak için
Latin karakterleri? Değilse, bilgisayar açık bir şekilde İngilizce/Hintçe karakterleri doğru bir şekilde tanıdığı ve görüntülediği için bir sınıflandırıcıya ihtiyacınız olduğunu düşünmüyorum. Yani, bu dili (olası UTF-8) kodlanmış karakterlere bakarak tanımlayabilirsiniz. –

+0

Sahip olduğum belgeler 300dpi'de hintçe/ingilizce kitaplardan taranmış görüntülerdir. Projemin tüm amacı, giriş belgesi görüntüsünün betiğini tanımlamak ve tanımlanan betiğe dayanarak, görüntüyü bilgisayar tarafından okunabilir biçime dönüştüren uygun OCR'ye aktarılacaktır. –

cevap

0

Bu, SVM'ler için modus operandi değildir.
SVM'ler, herhangi bir sınıfı diğer tüm sınıflardan nasıl ayıracağını bilmeden, bir sınıfı bilmeden tanımlayamaz.

LibSVM'de svmpredict() işlevi aslında olasılık tahminlerini gösterir ve bu değer ne kadar büyükse, tahmininizle ilgili daha emin olabilirsiniz. Ancak, üçüncü bir sınıfı tahmin etmek için sadece iki sınıfa sahipseniz, böyle değerlere güvenemezsiniz: gerçekten svmpredict(), sınıflar olduğu kadar çok sayıda karar değerini döndürecektir.

Eşikleme sisteminize devam edebilirsiniz (yine SVM tabanlı değildir), ancak büyük olasılıkla başarısız olabilir veya kötü performanslar verebilirsiniz. Bunu bir düşünün: iki eşik oluşturmanız ve bunları mantıksal AND yönteminde kullanmanız gerekir. Karışık olmayan belgelerin doğru sınıflandırılması şansı gerçekten büyük ölçüde azalacaktır.

Benim önerim: eşik değerlerini ayarlamak yerine, kötü performanslar yüksek bir şansla yerine, bu metinlerden bazılarını bir araya getirin veya egzersiz verilerinize eklemek için bazı Hintçe ve bazı İngilizce satırlarla yeni dosyalar oluşturun Bazı uygun Karışık belgeler ve standart 3 sınıf SVM sistemi gerçekleştirin. siz de I/O fonksiyonları gibi fread() Hintçe metin yazılı, fwrite(), fprintf(), fscanf(), importdata() vb ...