2013-03-21 1 views
0

질문 : R의 svm에 피드하는 기능으로 bag-of-words 모델을 어떻게 적용 할 수 있습니까?R에서 bag-of-words 모델을 SVM에 맞게 시뮬레이트하는 방법

나는 일부 데이터가 낮은 발생했습니다

Title Salary 
"Software Engineer" 100000 
"Software Engineer" 120000 
"Junior Software Engineer" 60000 
"Junior Software Engineer" 70000 
"Senior Software Engineer" 130000 

read.table 사용하여, 나는이 (숫자 문자)의 2 * n의 행렬을 얻을 수 있습니다. 제목 열에 "bag of words"를 적용하고 싶습니다. 그러나 항목을 수동으로 분할 한 경우 (예 :

jobs['Title'][1,] <- strsplit(jobs['Title'][1,], ' ') 

이 제공 :

Title Salary 
"Software" 100000 
"Software Engineer" 120000 
"Junior Software Engineer" 60000 
"Junior Software Engineer" 70000 
"Senior Software Engineer" 130000 

을 오히려 내가 기대했던 것보다 :

Title Salary 
["Software", "Engineer"] 100000 
"Software Engineer" 120000 
"Junior Software Engineer" 60000 
"Junior Software Engineer" 70000 
"Senior Software Engineer" 130000 
SVM을 호출하는 내 코드는 다음과 같습니다

:

jobs <- read.table("jobs.data", header = TRUE, as.is = TRUE) 
index <- 1:nrow(jobs) 
testindex <- sample(index, trunc(length(index)/3)) 
testset <- jobs[testindex,] 
trainset <- jobs[-testindex,] 
svm.model <- svm(Salary ~ ., data = trainset, cost = 10, gamma = 1) 
svm.pred <- predict(svm.model, testset) 

나는 것 같아 잘못 알고 있지만 길을 찾지 못했습니다. 그것을하기 위해, 누군가 내가 그것을 어떻게해야하는지 공유 할 수 있었느냐?

감사합니다.

+0

나는 당신이하려는 것을 이해하지 못합니다. 이 데이터가 실제로 작업하고있는 데이터입니까? 모든 제목이 "소프트웨어 엔지니어"로 끝나면 그 단어는 어쨌든 예측에 쓸모가 없습니다. 당신이 신경 쓰는 것은 접두사 - "Junior", "Senior"또는 아무것도 아닙니다. 달성하고자하는 과제에 대해 구체적으로 설명 할 수 있습니까? – rmalouf

+0

감사합니다 rmalouf. 이 특별한 경우에는 예, 단지 "중학교", "교장"만이 중요하지만, "하드웨어 엔지니어", "아이폰 마술사"등과 같은 직책을 더 가질 것입니다 ... 요점은 데이터가 아니라 모델이되고 싶습니다 단어의 가방처럼 제목,하지만 난 꽤 R에서 작동하는 방법을 이해하지 못했습니다. – log0

답변

3

기계 학습 질문의 기본 질문 질문을 줄 였는지 걱정입니다. 그래서 내 자신의 질문에 대답하게하십시오.

  1. 각 단어는 1 결석 존재를 0으로하는 벡터가 할당된다. 본질적으로 이것은 스파 스 매트릭스와 클래스의 컬럼을 형성합니다.

  2. 파이썬을 사용하여 사전을 사용하여 단어 모음을 대신 사용하십시오. 파이썬에서 문자열 조작을하는 것이 훨씬 쉽습니다. NLTK 또는 PyOrange에 데이터를 입력하십시오.

여기에서 요지는 R이 문자열 조작을위한 언어로 보이지 않는다는 것입니다. tm 라이브러리를 사용하여 도움을받을 수 있습니다.

비슷한 질문에 직면 한 모든 사람들을 도울 수 있기를 바랍니다.

1

그것은 TM 패키지와 함께 R에 그렇게하는 것은 매우 쉽습니다 :

require(Matrix) 
require(e1071) 
require(tm) 
options(stringsAsFactors = F) 

jobs <- data.frame(Title = c("Software Engineer", "Software Engineer", 
          "Junior Software Engineer", "Junior Software Engineer", 
          "Senior Software Engineer", "Hardware Engineer"), 
        Salary = c(100000, 120000, 
           60000, 70000, 
           130000, 110000)) 

# Create the corpus 
MyCorpus <- VCorpus(VectorSource(jobs$Title), readerControl = list(language = "en")) 
content(MyCorpus[[1]]) 

# Some preprocessing 
MyCorpus <- tm_map(MyCorpus, content_transformer(tolower)) 
content(MyCorpus[[1]]) 

# Create the Document-Term matrix 
DTM <- DocumentTermMatrix(MyCorpus, 
          control = list(bounds = list(global = c(0, Inf)))) 
dim(DTM) 
inspect(DTM) 

# Create a sparse matrix to put into SVM 
sparse_DTM <- sparseMatrix(i = DTM$i, j = DTM$j, x = DTM$v, 
           dims = dim(DTM), 
           dimnames = list(rownames(DTM), colnames(DTM))) 

# SVM 
svm.model <- svm(sparse_DTM, jobs$Salary, cost = 10, gamma = 1) 

난 당신이 기차/테스트 세트를 처리 할 수 ​​및 TM 패키지의 도움으로 더 이동합니다.

관련 문제