การเลือกคุณสมบัติและรุ่นที่มี glmnet บนข้อมูล Methylation (p >> N)


29

ฉันต้องการใช้ GLM และ Elastic Net เพื่อเลือกคุณลักษณะที่เกี่ยวข้องเหล่านั้น + สร้างแบบจำลองการถดถอยเชิงเส้น (เช่นทั้งการคาดคะเนและความเข้าใจดังนั้นมันจะดีกว่าถ้าปล่อยให้มีพารามิเตอร์ค่อนข้างน้อย) ผลลัพธ์จะต่อเนื่อง มันคือยีนต่อราย ฉันได้อ่านเกี่ยวกับแพ็คเกจแล้ว แต่ฉันไม่แน่ใจ 100% เกี่ยวกับขั้นตอนการปฏิบัติตาม:2000050glmnet

  1. ดำเนินการ CV เพื่อเลือกแลมบ์ดา:
    cv <- cv.glmnet(x,y,alpha=0.5)
    (Q1) เมื่อได้รับข้อมูลอินพุตแล้วคุณจะเลือกค่าอัลฟาที่ต่างออกไปหรือไม่
    (Q2)ฉันต้องทำอย่างอื่นก่อนสร้างแบบจำลองหรือไม่

  2. พอดีกับรุ่น:
    model=glmnet(x,y,type.gaussian="covariance",lambda=cv$lambda.min)
    (Q3) มีอะไรดีไปกว่า "ความแปรปรวนร่วม" หรือไม่?
    (Q4)หากเลือกแลมบ์ดาโดย CV ทำไมขั้นตอนนี้จึงจำเป็นต้องใช้nlambda=?
    (Q5)ดีกว่าที่จะใช้lambda.minหรือlambda.1se?

  3. รับค่าสัมประสิทธิ์เพื่อดูว่าพารามิเตอร์ใดมีหลุด ("."):
    predict(model, type="coefficients")

    ในหน้าช่วยเหลือมีหลายpredictวิธีการ (เช่นpredict.fishnet, predict.glmnet, predict.lognetฯลฯ ) แต่มีคำว่า "ธรรมดา" ทำนายตามที่ฉันเห็นในตัวอย่าง
    (Q6)ฉันควรใช้predictหรือpredict.glmnetอื่น ๆ หรือ?

แม้จะเป็นสิ่งที่ฉันได้อ่านเกี่ยวกับวิธีการทำให้เป็นมาตรฐาน แต่ฉันค่อนข้างใหม่ใน R และในแพ็คเกจทางสถิติเหล่านี้ดังนั้นจึงเป็นเรื่องยากที่จะตรวจสอบว่าฉันปรับตัวเข้ากับปัญหาของรหัสได้อย่างไร ข้อเสนอแนะใด ๆ จะได้รับการต้อนรับ

การปรับปรุง
ตาม "ตามที่ระบุไว้ก่อนหน้านี้วัตถุของคลาสรถไฟประกอบด้วยองค์ประกอบที่เรียกว่าfinalModelซึ่งเป็นแบบจำลองที่พอดีกับค่าพารามิเตอร์การปรับที่เลือกโดย resampling วัตถุนี้สามารถใช้ในวิธีดั้งเดิมเพื่อสร้างการคาดการณ์สำหรับตัวอย่างใหม่โดยใช้ที่ ฟังก์ชันทำนายของโมเดล "

การใช้caretเพื่อปรับทั้งอัลฟาและแลมบ์ดา:

  trc = trainControl(method=cv, number=10)  
  fitM = train(x, y, trControl = trC, method="glmnet")  

ไม่fitMเปลี่ยนขั้นตอนก่อนหน้า 2? ถ้าเป็นเช่นนั้นจะระบุตัวเลือก glmnet ( type.gaussian="naive",lambda=cv$lambda.min/1se) ได้อย่างไร?
และต่อไปนี้predictขั้นตอนที่ผมสามารถเปลี่ยนmodelไปfitM?

ถ้าฉันทำ

  trc = trainControl(method=cv, number=10)  
  fitM = train(x, y, trControl = trC, method="glmnet")  
  predict(fitM$finalModel, type="coefficients")

มันสมเหตุสมผลหรือไม่หรือฉันผสมคำศัพท์ทั้งสองแบบเข้าด้วยกันอย่างไม่ถูกต้อง?

คำตอบ:


42

ส่วนที่ 1

ในยืดหยุ่นสุทธิสองประเภทของข้อ จำกัด ในพารามิเตอร์ที่ใช้

  1. Lasso ข้อ จำกัด (เช่นขนาดของค่าสัมบูรณ์ของ )βj
  2. ข้อ จำกัด ของสันเขา (เช่นขนาดของค่ากำลังสองของ )βj

αควบคุมการให้น้ำหนักแบบสัมพันธ์ของทั้งสองประเภท ข้อ จำกัด Lasso อนุญาตให้มีการเลือก / ลบตัวแปรในโมเดล ข้อ จำกัด ของสันเขาสามารถรับมือกับตัวแปร collinear ซึ่งคุณให้น้ำหนักมากขึ้นจะขึ้นอยู่กับคุณสมบัติของข้อมูล ตัวแปรที่สัมพันธ์กันจำนวนมากอาจต้องการทั้งข้อ จำกัด และตัวแปรที่เกี่ยวข้องบางตัวอาจแนะนำให้เน้นข้อ จำกัด ของสันเขามากขึ้น

วิธีหนึ่งในการแก้ปัญหานี้คือการรักษาเป็นพารามิเตอร์การปรับแต่งข้างและใช้ค่าที่ให้ข้อผิดพลาด CV ต่ำสุดในลักษณะเดียวกับที่คุณมีการปรับจูนมากกว่าในขณะที่มีαλλcv.glmnet

แพคเกจ R เครื่องหมายสามารถสร้างแบบจำลองโดยใช้glmnetแพคเกจและควรได้รับการจัดตั้งขึ้นเพื่อการปรับแต่งทั้งพารามิเตอร์และ\αλ

ส่วนที่ 2

ไตรมาสที่ 3

ใช่ในกรณีนี้ที่ (จำนวนตัวแปรจำนวนการสังเกต) หน้าช่วยเหลือสำหรับแนะนำให้ใช้mn?glmnet

type.gaussian = "naive"

แทนการจัดเก็บทุกด้านผลิตภัณฑ์ที่คำนวณตามวิธีการซึ่งอาจจะไม่มีประสิทธิภาพที่มีจำนวนมากของตัวแปรหรือเมื่อที่ห่วงตัวเลือกพระทัยมากกว่าในแต่ละครั้งจะต้องผลิตภัณฑ์คอมพิวเตอร์ภายในmn"naive"n

หากคุณไม่ได้ระบุอาร์กิวเมนต์นี้glmnetจะได้เลือก"naive"เป็นแต่จะเป็นการดีกว่าหากระบุอย่างชัดเจนในกรณีที่มีการเปลี่ยนแปลงค่าเริ่มต้นและตัวเลือกในภายหลังในแพ็คเกจและคุณกำลังเรียกใช้รหัสในวันที่ในอนาคตm>500

ไตรมาสที่ 4

คำตอบสั้น ๆ ที่คุณไม่จำเป็นต้องระบุค่าสูงสำหรับnlambdaตอนนี้ที่คุณได้เลือกค่าที่ดีที่สุดในการปรับอากาศ0.5 อย่างไรก็ตามหากคุณต้องการพล็อตค่าสัมประสิทธิ์พา ธ ฯลฯ แล้วการมีชุดเจียมเนื้อเจียมตัวของค่าในช่วงเวลานั้นจะส่งผลให้มีชุดเส้นทางที่ดีกว่า ภาระในการคำนวณของการทำเส้นทางทั้งหมดที่สัมพันธ์กับหนึ่งเฉพาะนั้นไม่มากผลลัพธ์ของความพยายามพัฒนาอัลกอริทึมเพื่อทำงานนี้อย่างถูกต้อง ฉันเพิ่งจะออกจากค่าเริ่มต้นเว้นแต่จะสร้างความแตกต่างที่เห็นได้ในเวลาคำนวณα=0.5λλnlambda

Q5

นี่เป็นคำถามเกี่ยวกับความประหยัด lambda.minตัวเลือกหมายถึงค่าของที่ผิดพลาด CV ต่ำสุด ข้อผิดพลาดที่ค่านี้ของคือค่าเฉลี่ยของข้อผิดพลาดเหนือเท่าและด้วยเหตุนี้การประเมินความผิดพลาดจึงไม่แน่นอน แสดงให้เห็นถึงค่าของλλklambda.1seλlambda.minlambda.1seλk

ทางเลือกเป็นของคุณ:

  1. แบบจำลองที่ดีที่สุดที่อาจซับซ้อนเกินขนาดเล็กน้อยเกินไป: lambda.min
  2. โมเดลที่ง่ายที่สุดที่มีข้อผิดพลาดที่เปรียบเทียบได้กับโมเดลที่ดีที่สุดที่ให้ความไม่แน่นอน: lambda.1se

ส่วนที่ 3

นี่เป็นสิ่งที่ง่ายและเป็นสิ่งที่คุณจะเจอมากกับอาร์คุณใช้predict()ฟังก์ชั่น 99.9% ของเวลา R จะจัดให้มีการใช้ฟังก์ชั่นที่ถูกต้องสำหรับวัตถุที่ให้มาเป็นอาร์กิวเมนต์แรก

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


2
คำตอบที่ดี! ฉันได้อ่านเกี่ยวกับคาเร็ตแล้วตอนนี้ ไม่แน่ใจ 100% เกี่ยวกับความสัมพันธ์ระหว่างคาเร็ตและแพ็คเกจ glmnet ดังนั้นฉันจึงอัปเดตคำถามของฉันเพื่อให้ชัดเจนถึงการ 'ผสาน' สิ่งเหล่านี้กับแพ็คเกจหรือสวิตช์จาก glmnet ไปเป็นคาเร็ต
PGreen

1
@PGreen: caretเป็นแพ็กเกจ R wrapper ซึ่งห่อฟังก์ชั่นอินเทอร์เฟซจากแพคเกจ 100+ ML ให้มีความสอดคล้องกันมากขึ้นและเพิ่ม CV, gridsearch, แก้ไขค่าเริ่มต้นของพารามิเตอร์บ้า ฯลฯ มันไม่ได้มีนิสัยแปลก ๆ แต่มันค่อนข้างดีและใช้กันอย่างแพร่หลาย
smci

ฉันแค่อยากจะเพิ่มมันสำหรับการปรับอัลฟ่าคุณสามารถใช้cva.glmnet(..)แทนแค่cv.glmnet(...)และปรับอัลฟาและแลมบ์ดาในเวลาเดียวกัน จากนั้นคุณสามารถเรียกใช้minlossplot(cva.fit)เพื่อดูว่าอัลฟ่าใดให้ผลดีที่สุด นี่เป็นส่วนหนึ่งของglmnetUtils
Espen Riskedal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.