Cách chọn giữa các thuật toán học tập


21

Tôi cần triển khai một chương trình sẽ phân loại các bản ghi thành 2 loại (đúng / sai) dựa trên một số dữ liệu đào tạo và tôi đã tự hỏi nên xem xét thuật toán / phương pháp nào. Dường như có rất nhiều trong số chúng để lựa chọn - Mạng thần kinh nhân tạo, Thuật toán di truyền, Học máy, Tối ưu hóa Bayes, v.v., và tôi không chắc bắt đầu từ đâu. Vì vậy, câu hỏi của tôi là: Tôi nên chọn thuật toán học như thế nào cho vấn đề của mình?

Nếu điều này có ích, đây là vấn đề tôi cần giải quyết.


Dữ liệu đào tạo: Dữ liệu
đào tạo bao gồm nhiều hàng như thế này:

Precursor1, Precursor2, Boolean (true/false)

Việc chạy
tôi sẽ được cung cấp một loạt các tiền chất.
Sau đó,

  1. Tôi chọn một thuật toán A từ các thuật toán khác nhau (hoặc tự động tạo ra một thuật toán) và áp dụng nó cho mọi kết hợp có thể có của các tiền chất này và thu thập các "bản ghi" được phát ra. "Bản ghi" bao gồm một số cặp khóa-giá trị *.
  2. Tôi áp dụng một số thuật toán tuyệt vời và phân loại các bản ghi này thành 2 loại (đúng / sai).

  3. Tôi sẽ tạo một bảng có cùng định dạng với dữ liệu tàu:
    Precursor1, Precursor2, Boolean

Và toàn bộ chương trình được tính dựa trên số lượng tôi đúng / sai.

*: "Bản ghi" sẽ trông như thế này (hy vọng điều này có ý nghĩa)

Record         [1...*] Score
-Precursor1             -Key
-Precursor2             -Value

Chỉ có một số hữu hạn các Khóa có thể. Các bản ghi chứa tập hợp con khác nhau của các khóa này (một số bản ghi có key1, key2, key3 ... các bản ghi khác có key3, key4 ... vv).

Tôi thực sự cần 2 học tập. Một là cho bước 1. Tôi cần phải có một mô-đun nhìn vào các cặp Tiền thân, v.v. và quyết định áp dụng thuật toán nào để phát ra một bản ghi để so sánh. Một cách khác là cho bước 2. Tôi cần một mô-đun phân tích bộ sưu tập các bản ghi và phân loại chúng thành 2 loại (đúng / sai).

Cảm ơn bạn trước!

Câu trả lời:


16

Có một gói cho " R " được gọi là " caret ", viết tắt của "phân loại và kiểm tra hồi quy". Tôi nghĩ rằng đó sẽ là một nơi tốt để bạn bắt đầu, vì nó sẽ dễ dàng cho phép bạn áp dụng hàng tá thuật toán học tập khác nhau cho dữ liệu của mình và sau đó xác thực chúng để ước tính mức độ chính xác của từng loại.

Dưới đây là một ví dụ mà bạn có thể sửa đổi với dữ liệu của riêng bạn / các phương thức khác:

install.packages('caret',dependencies = c('Depends','Suggests'))
library(caret)

set.seed(999)
Precursor1 <- runif(25)
Precursor2 <- runif(25)
Target <- sample(c('T','F'),25,replace=TRUE)
MyData <- data.frame(Precursor1,Precursor2,Target)
str(MyData)

#Try Logistic regression
model_Logistic <- train(Target~Precursor1+Precursor2,data=MyData,method='glm')

#Try Neural Network
model_NN <- train(Target~Precursor1+Precursor2,data=MyData,method='nnet',trace=FALSE)

#Try Naive Bayes
model_NB <- train(Target~Precursor1+Precursor2,data=MyData,method='nb')

#Try Random Forest
model_RF <- train(Target~Precursor1+Precursor2,data=MyData,method='rf')

#Try Support Vector Machine
model_SVM<- train(Target~Precursor1+Precursor2,data=MyData,method='svmLinear')

#Try Nearest Neighbors
model_KNN<- train(Target~Precursor1+Precursor2,data=MyData,method='knn')

#Compare the accuracy of each model
cat('Logistic:',max(model_Logistic$results$Accuracy))
cat('Neural:',max(model_NN$results$Accuracy))
cat('Bayes:',max(model_NB$results$Accuracy))
cat('Random Forest:',max(model_RF$results$Accuracy))
cat('Support Vector Machine:',max(model_SVM$results$Accuracy))
cat('Nearest Neighbors:',max(model_KNN$results$Accuracy))

#Look at other available methods
?train

Một ý tưởng khác là chia dữ liệu của bạn thành tập huấn luyện và tập kiểm thử, sau đó so sánh cách mỗi mô hình thực hiện trên tập kiểm tra. Nếu bạn thích, tôi có thể chỉ cho bạn cách làm điều đó.


8

TXYtôi

Y

P(Y|T,X,tôi)

Bây giờ chúng ta có thể sử dụng bất kỳ quy tắc nào của lý thuyết xác suất để vận dụng điều này thành những thứ mà chúng ta biết cách tính toán. Vì vậy, sử dụng định lý Bayes, bạn nhận được:

P(Y|T,X,tôi)= =P(Y|T,tôi)P(X|Y,T,tôi)P(X|T,tôi)

P(Y|T,tôi)YY

P(X|Y,T,tôi)P(X|T,tôi)YY¯Y

Ôi(Y|T,X,tôi)= =P(Y|T,X,tôi)P(Y¯|T,X,tôi)= =P(Y|T,tôi)P(Y¯|T,tôi)P(X|Y,T,tôi)P(X|Y¯,T,tôi)

Y

P(X|Y,T,tôi)θY

P(X|Y,T,tôi)= =P(X,θY|Y,T,tôi)dθ= =P(X|θY,Y,T,tôi)P(θY|Y,T,tôi)dθY

P(X|θY,Y,T,tôi)= =P(X|θY,Y,tôi)TP(θY|Y,T,tôi)là phân phối sau cho các tham số trong mô hình - đây là phần mà dữ liệu huấn luyện sẽ xác định. Và đây có lẽ là nơi mà hầu hết các công việc sẽ đi.

θYMtôiθY(tôi)

P(X|Y,T,tôi)= =ΣtôiP(Mtôi|Y,T,tôi)P(X|θY(tôi),Mtôi,Y,T,tôi)P(θY(tôi)|Mtôi,Y,T,tôi)dθY(tôi)
P(Mtôi|Y,T,tôi)= =P(Mtôi|Y,tôi)P(θY(tôi)|Mtôi,Y,tôi)P(T|θY(tôi),Mtôi,Y,tôi)dθY(tôi)

Mtôi

Bây giờ, cho đến thời điểm này, tất cả các kết quả đều chính xác và tối ưu (đây là tùy chọn 2 - áp dụng một số thuật toán tuyệt vời cho dữ liệu). Nhưng đây là một nhiệm vụ khó khăn để thực hiện. Trong thế giới thực, toán học yêu cầu có thể không khả thi trong thực tế - vì vậy bạn sẽ phải thỏa hiệp. bạn nên luôn luôn "thực hiện" các phương trình chính xác, đối với bất kỳ phép toán nào bạn có thể đơn giản hóa sẽ giúp bạn tiết kiệm thời gian tại PC. Tuy nhiên, bước đầu tiên này rất quan trọng, bởi vì điều này đặt ra "mục tiêu" và nó làm cho nó rõ ràng những gì cần phải làm. Nếu không, bạn sẽ bị bỏ lại (như bạn dường như) với một loạt các tùy chọn tiềm năng không có gì để lựa chọn giữa chúng.

Bây giờ ở giai đoạn này, chúng ta vẫn đang ở trong thế giới "logic biểu tượng", nơi không có gì thực sự có ý nghĩa. Vì vậy, bạn cần liên kết những vấn đề này với vấn đề cụ thể của bạn:

  1. P(Mtôi|Y,tôi)
  2. P(θY(tôi)|Mtôi,Y,tôi)
  3. P(T|θY(tôi),Mtôi,Y,tôi)
  4. P(θY(tôi)|T,Mtôi,Y,tôi)
  5. P(Mtôi|Y,T,tôi)

Y¯

P(Mj|Y,T,tôi)1

P(X|Y,T,tôi)P(X|θY(j),Mj,Y,T,tôi)θY(j)= =θ^Y(j)

Đó là cách tiếp cận "tiêu chuẩn" cho loại vấn đề này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.