희소성에 대한이 해석이 정확합니까?


10

패키지 의 removeSparseTerms기능 에 대한 문서에 따르면 tm, 이것은 희소성이 수반하는 것입니다.

A term-document matrix where those terms from x are removed which have at least a sparse percentage of empty (i.e., terms occurring 0 times in a document) elements. I.e., the resulting matrix contains only terms with a sparse factor of less than sparse.

sparse.99와 같다 면 이것을 올바르게 해석 하면 데이터의 최대 1 %에만 나타나는 용어를 제거하는 것입니까?


이 질문은 tm 및 텍스트 마이닝에 대한 태그가있는 Stackoverflow에 더 적합합니다.
Ken Benoit

답변:


16

그렇습니다 . 혼동을 이해하는 것은 이해가되지만, "상황"이라는 용어는이 문맥에서 명확하게 정의하기 어렵 기 때문입니다.

에 대한 sparse논쟁 의 의미 에서 removeSparseTerms(), 희소성은 용어에 대한 상대적인 문서 빈도 의 임계 값을 말하며 , 그 의 용어는 제거됩니다. 여기서 상대적 문서 빈도는 비율을 의미합니다. 명확하지는 않지만 명령에 대한 도움말 페이지는 1.0에 가까워 질 수록 희소성이 줄어 듭니다 . 희소성은 0 또는 1.0의 값을 사용할 수 없으며 그 사이의 값만 사용할 수 있습니다.

따라서 0.99보다 희소 한 sparse = 0.99용어 만 제거 한다는 해석이 정확합니다 . 정확한 해석 은 항에 대해 모든 항을 유지한다는 것입니다 . 여기서 은 문서 수입니다.이 경우 아마도 모든 항이 유지됩니다 (아래 예 참조). .sparse = 0.99제이에프제이>(10.99)

다른 극단적 인 경우 인 경우 sparse = .01모든 문서에 (거의) 나타나는 용어 ​​만 유지됩니다. (물론 이것은 용어의 수와 문서의 수에 따라 달라지며, 자연어에서는 "the"와 같은 일반적인 단어가 모든 문서에서 나타날 가능성이 높기 때문에 "스파 스"가 아닙니다.

희소성 임계 값 0.99의 예 (0.01 개 미만의 문서 (제 1 예) 및 0.01 개 이상의 문서에서 가장 많이 발생하는 용어) :

> # 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)

실제 텍스트와 용어가 포함 된 몇 가지 추가 예는 다음과 같습니다.

> 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

의 마지막 예 sparse = 0.34에서는 문서의 3 분의 2에서 발생하는 용어 만 유지되었습니다.

문서 빈도를 기준으로 문서 용어 행렬에서 용어를 트리밍하는 다른 방법은 텍스트 분석 패키지 quanteda 입니다. 여기서 동일한 기능은 희소성이 아니라 문서의 빈도 ( tf-idf 에서와 같이)를 직접적으로 나타냅니다 .

> 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

이 사용법은 훨씬 간단합니다.


1
Ken 사이트에 오신 것을 환영합니다. 당신의 훌륭한 답변에 감사드립니다. 우리가 더 당신을 볼 수 있기를 바랍니다.
Glen_b-복지 주 모니카
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.