วิธีเลือกระหว่างอัลกอริทึมการเรียนรู้


21

ฉันต้องใช้โปรแกรมที่จะจัดประเภทระเบียนเป็น 2 หมวดหมู่ (จริง / เท็จ) ขึ้นอยู่กับข้อมูลการฝึกอบรมบางอย่างและฉันสงสัยว่าอัลกอริทึม / วิธีการที่ฉันควรจะดู ดูเหมือนจะมีพวกเขาให้เลือกมากมาย - โครงข่ายประสาทเทียม, อัลกอริทึมทางพันธุกรรม, การเรียนรู้ของเครื่อง, การเพิ่มประสิทธิภาพเบย์เซียนเป็นต้นและอื่น ๆ ฉันไม่แน่ใจว่าจะเริ่มจากตรงไหน ดังนั้นคำถามของฉันคือ ฉันจะเลือกอัลกอริทึมการเรียนรู้ที่ฉันควรใช้สำหรับปัญหาของฉันได้อย่างไร

หากสิ่งนี้ช่วยได้นี่คือปัญหาที่ฉันต้องแก้ไข


ข้อมูลการฝึกอบรม: ข้อมูล
การฝึกอบรมประกอบด้วยแถวจำนวนมากเช่นนี้:

Precursor1, Precursor2, Boolean (true/false)

การวิ่งที่
ฉันจะได้รับมาก่อน
จากนั้น

  1. ฉันเลือกอัลกอริทึม A จากอัลกอริธึมที่แตกต่างกัน (หรือสร้างอัลกอริทึมแบบไดนามิก) และใช้กับชุดค่าผสมที่เป็นไปได้ของสารตั้งต้นเหล่านี้และรวบรวม "บันทึก" ที่ถูกปล่อยออกมา "บันทึก" ประกอบด้วยคู่ค่าคีย์หลายคู่ *
  2. ฉันใช้อัลกอริทึมที่ยอดเยี่ยมและจัดประเภทระเบียนเหล่านี้เป็น 2 หมวดหมู่ (จริง / เท็จ)

  3. ฉันจะสร้างตารางที่มีรูปแบบเดียวกับข้อมูลรถไฟ:
    Precursor1, Precursor2, Boolean

และโปรแกรมทั้งหมดก็ทำคะแนนตามจำนวนจริง / เท็จฉันได้ถูกต้อง

*: "บันทึก" จะมีลักษณะเช่นนี้ (หวังว่านี่จะสมเหตุสมผล)

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

มีคีย์ที่เป็นไปได้จำนวน จำกัด เท่านั้น ระเบียนมีชุดย่อยที่แตกต่างกันของคีย์เหล่านี้ (บางระเบียนมี key1, key2, key3 ... ระเบียนอื่นมี key3, key4 ... ฯลฯ )

ฉันต้องการการเรียนรู้ 2 ครั้ง หนึ่งสำหรับขั้นตอนที่ 1 ฉันต้องมีโมดูลที่ดูคู่ Precursor เป็นต้นและตัดสินใจว่าจะใช้อัลกอริธึมอะไรเพื่อที่จะปล่อยเร็กคอร์ดสำหรับการเปรียบเทียบ อีกข้อหนึ่งสำหรับขั้นตอนที่ 2 ฉันต้องการโมดูลที่วิเคราะห์คอลเลกชันของระเบียนและจัดหมวดหมู่พวกเขาเป็น 2 หมวดหมู่ (จริง / เท็จ)

ขอบคุณล่วงหน้า!

คำตอบ:


16

มีแพ็คเกจสำหรับ " R " ชื่อ " caret " ซึ่งย่อมาจาก "การจำแนกประเภทและการทดสอบการถดถอย" ฉันคิดว่ามันจะเป็นจุดเริ่มต้นที่ดีสำหรับคุณเพราะมันจะช่วยให้คุณสามารถใช้อัลกอริทึมการเรียนรู้ที่แตกต่างกันกับข้อมูลของคุณได้อย่างง่ายดาย

นี่คือตัวอย่างที่คุณสามารถแก้ไขด้วยข้อมูลของคุณเอง / วิธีการอื่น ๆ :

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

แนวคิดอื่นคือการแบ่งข้อมูลของคุณออกเป็นชุดฝึกอบรมและชุดทดสอบแล้วเปรียบเทียบประสิทธิภาพของแต่ละรุ่นในชุดทดสอบ ถ้าคุณชอบฉันสามารถแสดงวิธีการทำ


8

TXYผม

Y

P(Y|T,X,ผม)

ตอนนี้เราสามารถใช้กฎความน่าจะเป็นใด ๆ เพื่อจัดการสิ่งนี้กับสิ่งที่เรารู้วิธีการคำนวณ ดังนั้นเมื่อใช้ทฤษฎีบทของเบย์คุณจะได้รับ:

P(Y|T,X,ผม)=P(Y|T,ผม)P(X|Y,T,ผม)P(X|T,ผม)

P(Y|T,ผม)YY

P(X|Y,T,ผม)P(X|T,ผม)YY¯Y

O(Y|T,X,ผม)=P(Y|T,X,ผม)P(Y¯|T,X,ผม)=P(Y|T,ผม)P(Y¯|T,ผม)P(X|Y,T,ผม)P(X|Y¯,T,ผม)

Y

P(X|Y,T,ผม)θY

P(X|Y,T,ผม)=P(X,θY|Y,T,ผม)dθ=P(X|θY,Y,T,ผม)P(θY|Y,T,ผม)dθY

P(X|θY,Y,T,ผม)=P(X|θY,Y,ผม)TP(θY|Y,T,ผม)คือการกระจายด้านหลังสำหรับพารามิเตอร์ในรูปแบบ - นี่คือส่วนที่ข้อมูลการฝึกอบรมจะพิจารณา และนี่อาจเป็นที่ที่งานส่วนใหญ่จะไป

θYMผมθY(ผม)

P(X|Y,T,ผม)=ΣผมP(Mผม|Y,T,ผม)P(X|θY(ผม),Mผม,Y,T,ผม)P(θY(ผม)|Mผม,Y,T,ผม)dθY(ผม)
P(Mผม|Y,T,ผม)=P(Mผม|Y,ผม)P(θY(ผม)|Mผม,Y,ผม)P(T|θY(ผม),Mผม,Y,ผม)dθY(ผม)

Mผม

ถึงตอนนี้ผลลัพธ์ทั้งหมดนั้นถูกต้องและเหมาะสมที่สุด (นี่คือตัวเลือกที่ 2 - ใช้อัลกอริทึมที่ยอดเยี่ยมกับข้อมูล) แต่นี่เป็นภาระที่ต้องทำ ในโลกแห่งความจริงคณิตศาสตร์ที่จำเป็นอาจไม่สามารถทำได้ในทางปฏิบัติดังนั้นคุณจะต้องประนีประนอม คุณควร "ไปได้เสมอ" ในการทำสมการที่แน่นอนสำหรับคณิตศาสตร์ใด ๆ ที่คุณสามารถทำให้ง่ายขึ้นจะช่วยคุณประหยัดเวลาในพีซี อย่างไรก็ตามขั้นตอนแรกนี้มีความสำคัญเนื่องจากเป็นการตั้ง "เป้าหมาย" และทำให้ชัดเจนว่าต้องทำอะไร มิฉะนั้นคุณก็จะถูกทิ้งให้อยู่กับตัวเลือกที่เป็นไปได้ทั้งหมดโดยไม่มีอะไรให้เลือกระหว่างพวกเขา

ในขั้นตอนนี้เรายังคงอยู่ในโลก "สัญลักษณ์เชิงตรรกะ" ซึ่งไม่มีอะไรที่สมเหตุสมผล ดังนั้นคุณต้องเชื่อมโยงสิ่งเหล่านี้กับปัญหาเฉพาะของคุณ:

  1. P(Mผม|Y,ผม)
  2. P(θY(ผม)|Mผม,Y,ผม)
  3. P(T|θY(ผม),Mผม,Y,ผม)
  4. P(θY(ผม)|T,Mผม,Y,ผม)
  5. P(Mผม|Y,T,ผม)

Y¯

P(MJ|Y,T,ผม)1

P(X|Y,T,ผม)P(X|θY(J),MJ,Y,T,ผม)θY(J)=θ^Y(J)

ซึ่งเป็นวิธี "มาตรฐาน" สำหรับปัญหาประเภทนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.