첫 번째 질문은 "+ 1
"입니다.
# create some files
td = tempfile()
dir.create(td)
write(c("dog", "cat", "mouse"), file=paste(td, "D1", sep="/"))
write(c("ham", "mouse", "sushi"), file=paste(td, "D2", sep="/"))
write(c("dog", "pet", "pet"), file=paste(td, "D3", sep="/"))
# LSA
data(stopwords_en)
myMatrix = textmatrix(td, stopwords=stopwords_en)
myMatrix = lw_logtf(myMatrix) * gw_idf(myMatrix)
myLSAspace = lsa(myMatrix, dims=dimcalc_share())
as.textmatrix(myLSAspace)
D1 D2 D3
cat 0.3616693 0.6075489 0.3848429
dog 0.4577219 0.2722711 1.2710784
mouse 0.5942734 1.3128719 0.1357196
ham 0.6075489 1.5336529 -0.1634938
sushi 0.6075489 1.5336529 -0.1634938
pet 0.6099616 -0.2591316 2.6757285
그래서, lsa
는 입력 행렬 (기본 0.5) 주어진 공유를 기반으로 dimcalc_share()
에서 치수를 얻고 매핑 특이 값 분해를 실행합니다
의 이러한 기능이 작동하는 방법을 살펴 보자 원래의 TDM은 새로운 LSAspace
으로 변경되었습니다.
이러한 차원은 LSA의 차원 감소에 대한 특이 값의 수입니다. dimcalc_share()
은 특이 값 s의 내림차순 시퀀스에서 첫 번째 위치를 찾습니다.이 값의 합계 (모든 값의 합계로 나눔)는 지정된 공유를 충족하거나 초과합니다.
기능이 d
이 max()
위치 <= share
동일하도록 작성 :
> # Break it apart
> s <- myMatrix
> share <- .5
>
> any(which(cumsum(s/sum(s)) <= share)) #TRUE
[1] TRUE
> cumsum(s/sum(s)) <= share
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> d = max(which(cumsum(s/sum(s)) <= share)) + 1
> d
[1] 10
당신은 단지 당신에게 9 대신 10 줄 것 d -1
를 사용하는 경우에, 당신은 대신에 위치이있을 것이다 cumsum
은 여전히 <=
~ share
입니다. 즉 작동하지 않을 것입니다 :
> myMatrix = lw_logtf(myMatrix) * gw_idf(myMatrix)
> myLSAspace2 = lsa(myMatrix, dims=d-1)
Error in SVD$u[, 1:dims] : subscript out of bounds
동등하게
> dims = 9
> myLSAspace = lsa(myMatrix, dims)
Error in SVD$u[, 1:dims] : subscript out of bounds
그래서 기능
dimshare_calc()
가
+ 1
사용에 맞습니다.
첫 번째 값이> 공유 일 경우 두 번째 질문은 "dimcalc_share() = 18 대신 = 1이됩니까?"입니다. 첫 번째 값이 > share
을한다면 당신은 가정으로
다음 첫 번째 if
조건은 대신 18
당신은 확인하는 CrossValidated에 대한 질문 후속 수있는 length(s)
을 사용, false를 반환과 것이다 당신의 직감은 = 1
이 맞아야합니다 (그래도 나에게 의미가 있음). 그렇다면 d = 1
이라는 함수를 else
으로 다시 작성하는 것이 간단합니다.
게다가, 원본 데이터와 LSA 공간에서 재구성 된 TDM을 사용하여 문서 유사성을 계산했습니다. 데이터에 대한 ras TDM은 훨씬 낮은 학습 오류를 생성합니다. 자세한 분석을 주셔서 감사합니다. –