0

私の質問:Rのsvmにフィードする機能としてbag-of-wordsモデルをどのように適用できますか?

私はいくつかのデータを低く生成しました:

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

read.tableを使用すると、2 * nの(文字、数値)の行列を取得できます。「単語の袋」をタイトル列に適用したいと思います。ただし、エントリのいずれかを手動で分割した場合、たとえば

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)

私はそれを間違っていると思いますが、私はそれを行う方法を見つけていません、誰かが私がそれを行うべき方法を共有できますか?

ありがとうございました。

4

2 に答える 2

3

機械学習の質問の基本的な質問が反対票を投じられたのではないかと心配しています。それで、私自身の質問に答えさせてください。

  1. 各単語にはベクトルが割り当てられ、1が存在し、0が存在しません。基本的に、これはスパース行列とクラスの列を形成します。

  2. Pythonを使用し、代わりに辞書を使用して単語の袋を表します。Pythonで文字列操作を行う方がはるかに簡単です。データをNLTKまたはPyOrangeにフィードします。

ここでの要点は、Rは文字列操作用の言語ではないように見えるということです。tmライブラリを使用して支援することができます。

それが同様の質問に直面している人の助けになることを願っています。

于 2013-03-23T15:46:15.803 に答える
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パッケージのヘルプに進みます。

于 2016-04-21T08:59:28.500 に答える