2014-09-09 4 views
0

먼저, 저는 Machine Learning, kmeans 및 r에 대해 상당히 새롭다고 말하며,이 프로젝트는 학습 수단입니다 더 많은 정보를 얻고 CIO에게이 데이터를 제공하여 새로운 헬프 데스크 시스템을 개발할 때 사용할 수 있습니다.sample.int (m, k)의 오류 : 모집단보다 큰 표본을 사용할 수 없습니다.

저는 60K 라인 텍스트 파일을 가지고 있습니다. 이 파일에는 3 년 동안 교사가 입력 한 헬프 데스크 티켓의 제목이 들어 있습니다.

이 제목을 사용하고 범주 집합을 만드는 r 프로그램을 만들고 싶습니다. 예를 들어, 인쇄 문제와 관련된 용어 또는 프로젝터 전구와 관련된 용어 그룹. 나는 r을 사용하여 텍스트 문서를 열고, 데이터를 정리하고, 멈춤 단어와 다른 단어들을 제거했다. 나는 필요 없다고 느꼈다. 나는 주파수가> 400 인 모든 용어의 목록을 가져 와서 텍스트 파일에 저장했다.

하지만 이제는 동일한 데이터 세트로 클러스터링하는 kmeans를 적용하고 카테고리를 만들 수 있는지 확인하고 싶습니다.

아래 코드에는 사용 된 용어 목록을> 400으로 작성하는 코드가 포함되어 있습니다.이 코드는 끝에 있으며 주석 처리되었습니다.

> results <- kmeans(m_norm,25) 
Error in sample.int(m, k) : cannot take a sample larger than the population when 'replace = FALSE' 

나는 이것이 무엇을 의미하는지 정말 모르겠어요, 나는이 온라인에 대한 정보를 많이 발견되지 않은 :이 사용 RStudio를 실행하면

library(tm) #load text mining library 
library(SnowballC) 
options(max.print=5.5E5) 
setwd('c:/temp/') #sets R's working directory to near where my files are 
ae.corpus<-Corpus(DirSource("c:/temp/"),readerControl=list(reader=readPlain)) 
summary(ae.corpus) #check what went in 
ae.corpus <- tm_map(ae.corpus, tolower) 
ae.corpus <- tm_map(ae.corpus, removePunctuation) 
ae.corpus <- tm_map(ae.corpus, removeNumbers) 
ae.corpus <- tm_map(ae.corpus, stemDocument, language = "english") 
myStopwords <- c(stopwords('english'), <a very long list of other words>) 
ae.corpus <- tm_map(ae.corpus, removeWords, myStopwords) 

ae.corpus <- tm_map(ae.corpus, PlainTextDocument) 

ae.tdm <- DocumentTermMatrix(ae.corpus, control = list(minWordLength = 5)) 


dtm.weight <- weightTfIdf(ae.tdm) 

m <- as.matrix(dtm.weight) 
rownames(m) <- 1:nrow(m) 

#euclidian 
norm_eucl <- function(m) { 
    m/apply(m,1,function(x) sum(x^2)^.5) 
} 
m_norm <- norm_eucl(m) 

results <- kmeans(m_norm,25) 

#list clusters 

clusters <- 1:25 
for (i in clusters){ 
    cat("Cluster ",i,":",findFreqTerms(dtm.weight[results$cluster==i],400,"\n\n")) 
} 


#inspect(ae.tdm) 
#fft <- findFreqTerms(ae.tdm, lowfreq=400) 

#write(fft, file = "dataTitles.txt", 
#  ncolumns = 1, 
#  append = FALSE, sep = " ") 

#str(fft) 

#inspect(fft) 

, 내가 얻을. 이견있는 사람?

TIA

+0

'm_norm'은 25 개 센터에 대해 충분히 큰가요? – Roland

+0

나는 그것을 5 개의 센터에 떨어 뜨 렸고, 같은 오류가났다. 내가 2로 떨어 뜨 렸을 때 'do_one (nmeth)의 오류 : 외국 함수 호출 (arg 1)의 NA/NaN/Inf' –

+3

'R'뿐만 아니라 프로그래밍에 익숙하지 않기 때문에 작게 시작할 것을 제안합니까? 적절한 데이터가 포함 된 10 줄짜리 파일을 작성하면 결과를 미리 알 수 있습니다. 단계별로 실행하여 올바른 알고리즘을 적용하는지 확인하십시오. –

답변

0

당신은 대신 디렉토리에있는 여러 파일의 여러 줄에 하나의 파일을 읽고있다. 대신

ae.corpus<-Corpus(DirSource("c:/temp/"),readerControl=list(reader=readPlain))` 

당신은 그런 다음이 60K 파일 대신 60K 라인 (1 개) 파일 코퍼스를 얻을 것이다

text <- readLines("c:\\temp\\your_file_name", n = -1) 
ae.corpus<-Corpus(VectorSource(text),readerControl=list(reader=readPlain)) 

를 사용해야합니다.

+0

심지어 나는 똑같은 문제에 직면 해있다. 나는 본문에 단지 1000 개의 행을 가지고있다. 같은 오류 –

0

나는 동일한 문제를 만났고, 마지막으로 클러스터의 대상 번호가 일부 유형의 데이터 행보다 큽니다. 귀하의 방식으로 각 유형의 데이터가 목표 클러스터 수보다 적을 수 있기 때문입니다.