2013-08-15 38 views
5

Tôi đang cố gắng phân loại các tweet theo tình cảm của chúng thành ba loại (Mua, Giữ, Bán). Tôi đang sử dụng R và gói e1071.R: Căn cứ phân loại Naives Bayes quyết định chỉ trên xác suất trước

Tôi có hai khung dữ liệu: một tập huấn luyện và một bộ tweet mới mà tình cảm cần được dự đoán.

trainingset dataframe:

+--------------------------------------------------+ 

    **text | sentiment** 

    *this stock is a good buy* | Buy 

    *markets crash in tokyo* | Sell 

    *everybody excited about new products* | Hold 

    +--------------------------------------------------+ 

Bây giờ tôi muốn đào tạo các mô hình sử dụng văn bản tweet trainingset[,2] và thể loại tình cảm trainingset[,4].

classifier<-naiveBayes(trainingset[,2],as.factor(trainingset[,4]), laplace=1) 

Nhìn vào các yếu tố của phân loại với

classifier$tables$x

Tôi thấy rằng xác suất có điều kiện là calculated..There là xác suất khác nhau cho mỗi tweet liên quan đến Mua, Giữ và Sell.So xa quá tốt.

Tuy nhiên khi tôi dự đoán công tác đào tạo thiết lập với:

predict(classifier, trainingset[,2], type="raw")

tôi nhận được một phân loại mà là dựa chỉ trên một tiên nghiệm xác suất, có nghĩa là mỗi tweet được phân loại là Hold (vì " Giữ "có phần lớn nhất trong số các tình cảm). Vì vậy, mỗi tweet đều có cùng xác suất cho Mua, Giữ và Bán:

 +--------------------------------------------------+ 

     **Id | Buy | Hold | Sell** 

     1 |0.25 | 0.5 | 0.25 

     2 |0.25 | 0.5 | 0.25 

     3 |0.25 | 0.5 | 0.25 

    .. |..... | .... | ... 

     N |0.25 | 0.5 | 0.25 

    +--------------------------------------------------+ 

Bất kỳ ý tưởng nào tôi đang làm sai? Đánh giá cao sự giúp đỡ của bạn!

Cảm ơn

Trả lời

6

Dường như bạn được đào tạo các mô hình sử dụng toàn bộ câu như đầu vào, trong khi có vẻ như bạn muốn sử dụng lời như các tính năng đầu vào của bạn.

Cách sử dụng:

## S3 method for class 'formula' 
naiveBayes(formula, data, laplace = 0, ..., subset, na.action = na.pass) 
## Default S3 method: 
naiveBayes(x, y, laplace = 0, ...) 


## S3 method for class 'naiveBayes' 
predict(object, newdata, 
    type = c("class", "raw"), threshold = 0.001, ...) 

Arguments:

x: A numeric matrix, or a data frame of categorical and/or 
    numeric variables. 

    y: Class vector. 

Đặc biệt, nếu bạn đào tạo naiveBayes theo cách này:

x <- c("john likes cake", "marry likes cats and john") 
y <- as.factor(c("good", "bad")) 
bayes<-naiveBayes(x,y) 

bạn sẽ có được một bộ phân loại có thể rec ognize chỉ hai câu sau đây:

Naive Bayes Classifier for Discrete Predictors 

Call: 
naiveBayes.default(x = x,y = y) 

A-priori probabilities: 
y 
bad good 
0.5 0.5 

Conditional probabilities: 
      x 
     x 
y  john likes cake marry likes cats and john 
    bad    0       1 
    good    1       0 

để đạt được một từ mức phân loại bạn cần phải chạy nó với các từ như đầu vào

x <-    c("john","likes","cake","marry","likes","cats","and","john") 
y <- as.factors(c("good","good", "good","bad", "bad", "bad", "bad","bad")) 
bayes<-naiveBayes(x,y) 

bạn nhận được

Naive Bayes Classifier for Discrete Predictors 

Call: 
naiveBayes.default(x = x,y = y) 

A-priori probabilities: 
y 
bad good 
0.625 0.375 

Conditional probabilities: 
     x 
y   and  cake  cats  john  likes  marry 
    bad 0.2000000 0.0000000 0.2000000 0.2000000 0.2000000 0.2000000 
    good 0.0000000 0.3333333 0.0000000 0.3333333 0.3333333 0.0000000 

Nói chung R là không phù hợp để xử lý dữ liệu NLP, python (hoặc ít nhất là Java) sẽ được nhiều lựa chọn tter.

Để chuyển đổi một câu để những lời, bạn có thể sử dụng chức năng strsplit

unlist(strsplit("john likes cake"," ")) 
[1] "john" "likes" "cake" 
+0

phản ứng phi thường. –

+0

Re: chuyển đổi các tweet thành các từ, điều này cũng có thể được thực hiện khá dễ dàng trong R với gói khai thác văn bản 'tm' (cran.r-project.org/web/packages/tm/) Nó có nhiều công cụ để đơn giản hóa quá trình chẳng hạn như xóa các từ dừng (ví dụ: "the", "it"), viết hoa, v.v. Gói có [họa tiết] đẹp mắt (http://cran.r-project.org/web/packages/tm/vignettes/ tm.pdf) đáng khám phá. – Bryan

Các vấn đề liên quan