Evet , buradaki karışıklığınız anlaşılabilir olsa da, "sparisite" teriminin bu bağlamda açıkça tanımlanması zordur.
sparse
Tartışması anlamında removeSparseTerms()
, uzama , üzerinde terimin kaldırılacağı bir terim için göreli belge sıklığı eşiğini ifade eder . Burada göreli belge sıklığı bir oran anlamına gelir. Komutun yardım sayfası (çok açık olmasa da), 1.0'a yaklaştıkça sparisite daha küçüktür . (Sparitenin 0 veya 1.0 değerlerini alamayacağını, yalnızca aradaki değerleri alacağını unutmayın.)
Yani yorumunuz doğrudur, sparse = 0.99
sadece 0,99'dan daha seyrek olan terimleri kaldıracaktır . İçin kesin yorum sparse = 0.99
şudur:j, tüm şartları koruyacaksınız
dfj> N∗ ( 1 - 0.99 ), nerede N- belge sayısıdır - bu durumda muhtemelen tüm terimler korunur (aşağıdaki örneğe bakın).
Diğer uç noktaya yakınsa, sparse = .01
yalnızca her belgede (neredeyse) görünen terimler korunur. (Tabii ki bu, terimlerin sayısına ve belge sayısına bağlıdır ve doğal dilde, "the" gibi ortak kelimelerin her belgede olması muhtemeldir ve bu nedenle asla "seyrek" olmaz.)
0.99'luk bir uzama eşiği örneği, burada en fazla (ilk örnek) 0.01'den az belgede ve (ikinci örnek) 0.01'den biraz fazla belgede ortaya çıkan bir terim:
> # second term occurs in just 1 of 101 documents
> myTdm1 <- as.DocumentTermMatrix(slam::as.simple_triplet_matrix(matrix(c(rep(1, 101), rep(1,1), rep(0, 100)), ncol=2)),
+ weighting = weightTf)
> removeSparseTerms(myTdm1, .99)
<<DocumentTermMatrix (documents: 101, terms: 1)>>
Non-/sparse entries: 101/0
Sparsity : 0%
Maximal term length: 2
Weighting : term frequency (tf)
>
> # second term occurs in 2 of 101 documents
> myTdm2 <- as.DocumentTermMatrix(slam::as.simple_triplet_matrix(matrix(c(rep(1, 101), rep(1,2), rep(0, 99)), ncol=2)),
+ weighting = weightTf)
> removeSparseTerms(myTdm2, .99)
<<DocumentTermMatrix (documents: 101, terms: 2)>>
Non-/sparse entries: 103/99
Sparsity : 49%
Maximal term length: 2
Weighting : term frequency (tf)
Aşağıda gerçek metin ve terimler içeren birkaç ek örnek verilmiştir:
> myText <- c("the quick brown furry fox jumped over a second furry brown fox",
"the sparse brown furry matrix",
"the quick matrix")
> require(tm)
> myVCorpus <- VCorpus(VectorSource(myText))
> myTdm <- DocumentTermMatrix(myVCorpus)
> as.matrix(myTdm)
Terms
Docs brown fox furry jumped matrix over quick second sparse the
1 2 2 2 1 0 1 1 1 0 1
2 1 0 1 0 1 0 0 0 1 1
3 0 0 0 0 1 0 1 0 0 1
> as.matrix(removeSparseTerms(myTdm, .01))
Terms
Docs the
1 1
2 1
3 1
> as.matrix(removeSparseTerms(myTdm, .99))
Terms
Docs brown fox furry jumped matrix over quick second sparse the
1 2 2 2 1 0 1 1 1 0 1
2 1 0 1 0 1 0 0 0 1 1
3 0 0 0 0 1 0 1 0 0 1
> as.matrix(removeSparseTerms(myTdm, .5))
Terms
Docs brown furry matrix quick the
1 2 2 0 1 1
2 1 1 1 0 1
3 0 0 1 1 1
İle son örnekte sparse = 0.34
, sadece belgelerin üçte ikisinde meydana gelen terimler korunmuştur.
Belge frekansına dayalı olarak belge terimi matrislerinden terimleri kırpmak için alternatif bir yaklaşım, metin analiz paketi quanteda'dır . Burada aynı işlevsellik, seyrekliği değil, doğrudan terimlerin belge sıklığını ifade eder ( tf-idf'deki gibi ).
> require(quanteda)
> myDfm <- dfm(myText, verbose = FALSE)
> docfreq(myDfm)
a brown fox furry jumped matrix over quick second sparse the
1 2 1 2 1 2 1 2 1 1 3
> trim(myDfm, minDoc = 2)
Features occurring in fewer than 2 documents: 6
Document-feature matrix of: 3 documents, 5 features.
3 x 5 sparse Matrix of class "dfmSparse"
features
docs brown furry the matrix quick
text1 2 2 1 0 1
text2 1 1 1 1 0
text3 0 0 1 1 1
Bu kullanım benim için çok daha basit görünüyor.