การถดถอยโลจิสติกในข้อมูลขนาดใหญ่


9

ฉันมีชุดข้อมูลประมาณ 5,000 ฟีเจอร์ สำหรับข้อมูลนั้นฉันใช้การทดสอบ Chi Square เป็นครั้งแรกเพื่อเลือกคุณสมบัติ หลังจากนั้นฉันได้ประมาณ 1,500 ตัวแปรซึ่งแสดงความสัมพันธ์อย่างมีนัยสำคัญกับตัวแปรตอบกลับ

ตอนนี้ฉันต้องพอดีกับการถดถอยโลจิสติกในที่ ฉันใช้แพ็คเกจ glmulti สำหรับ R (แพ็คเกจ glmulti ให้การเลือกเซตย่อยที่มีประสิทธิภาพสำหรับ vlm) แต่สามารถใช้คุณสมบัติได้ครั้งละ 30 คุณสมบัติเท่านั้นประสิทธิภาพในการทำงานลดลงเนื่องจากจำนวนแถวในชุดข้อมูลของฉันอยู่ที่ประมาณ 20,000

มีวิธีการหรือเทคนิคอื่น ๆ ในการแก้ปัญหาข้างต้นหรือไม่? ถ้าฉันไปตามวิธีข้างต้นมันจะใช้เวลามากเกินไปในการปรับให้เข้ากับโมเดล


8
หากคุณสามารถใส่ชุดข้อมูลของคุณในหน่วยความจำของเครื่องเดียวฉันจะไม่เรียกปัญหานี้ว่า "Big Data" โดยเฉพาะอย่างยิ่งถ้าคุณทำสิ่งนี้ในชื่อคำถามของคุณ
logc

ฉันใช้sklearn's LogisticRegressionและมันแก้ 4000 คุณสมบัติ 20,000 แถวปัญหาในการประมาณนาทีแล็ปท็อปของฉัน
โทมัส Ahle

คำตอบ:


13

ไม่เหมาะสมที่จะทำการคัดกรองคุณลักษณะจากนั้นป้อนฟีเจอร์การเอาตัวรอดให้เป็นวิธีการที่ไม่เข้าใจว่ามีการทรมานข้อมูลมากเพียงใดก่อนหน้านี้ มันจะดีกว่าที่จะใช้วิธีการที่สามารถจัดการกับคุณสมบัติที่มีศักยภาพทั้งหมด (เช่นยืดหยุ่นสุทธิ) ข้อเสนอแนะของผู้อื่นเกี่ยวกับการใช้การลดข้อมูลเป็นแนวคิดที่ยอดเยี่ยมเช่นกัน


มีหลักฐานเรื่องนี้หรือไม่? O / w ดูเหมือนว่าฮิวริสติกมากเท่ากับการคัดกรองคุณลักษณะ
Zubin

2
การประมาณค่าความน่าจะเป็นสูงสุดที่ถูกนำมาพิจารณาจะคำนึงถึงบริบทเช่นใน lasso การประมาณค่าสัมประสิทธิ์การถดถอยของตัวแปรจะเล็กลงหากคุณพิจารณา 1,000 ตัวแปรที่ไม่ได้เลือกไว้มากกว่าถ้าคุณพิจารณา 100 ตัวแปรที่ไม่ได้เลือก มิฉะนั้นตัวแปรจะถูกเลือกด้วยวิธีที่เอนเอียงและการอ้างอิงตัวแปรในขั้นตอนที่สองจะทำให้บริบทเสียไป
Frank Harrell

คุณช่วยอธิบายรายละเอียดของความลำเอียงที่นี่ได้ไหม? ฉันสงสัยว่าเพราะในแง่ที่ไม่สำคัญแล้วบ่วงนั้นจะมีอคติเสมอดังนั้นคุณต้องอ้างถึงอคติเพิ่มเติม นอกจากนี้ยังมีวิธีการสองขั้นตอนที่มีคุณสมบัติที่เหมาะสมเช่นpdfs.semanticscholar.org/d90a/ …
jmb

2
เชือกจงใจทำให้เกิดอคติต่อค่าสัมประสิทธิ์ศูนย์เพื่อป้องกันไม่ให้อิง พารามิเตอร์ที่ไม่ผ่านพารามิเตอร์จะนำไปสู่ค่าที่คาดการณ์ไว้ซึ่งมากเกินไป การปรับตัวแปร "ที่เลือกไว้" ในแบบจำลองที่ไม่ผ่านการปรับแต่งนั้นจะยกเลิกการทำlasso bias ที่ต้องการซึ่งจะทำให้เกิดค่าที่คาดการณ์ไว้มากเกินไป
Frank Harrell

10

วิธีแรกคือการใช้ PCA เพื่อลดมิติข้อมูลของชุดข้อมูล พยายามรักษาความแปรปรวนโดยรวมประมาณ ~ 97% ซึ่งอาจช่วยได้บ้าง

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

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

แผนภูมิที่ดีมากซึ่งให้ความคิดเกี่ยวกับสถานที่ที่จะเริ่มต้นตามขนาดชุดข้อมูลของคุณสามารถดูได้ที่นี่: http://3.bp.blogspot.com/-dofu6J0sZ8o/UrctKb69QdI/AAAAAAAADfg/79ewPecn5XU/s1600/scikit-learn-flowflow -chart.jpg

ป้อนคำอธิบายรูปภาพที่นี่


8
ข้อกังวลใหญ่ ๆ ของการใช้ PCA ด้วยวิธีนี้คือความสัมพันธ์ทั้งหมดระหว่างตัวแปรตอบกลับและตัวแปรอิสระสามารถอยู่ใน 3% ของความแปรปรวนทั้งหมดที่คุณละเลย ดูเหมือนจะไม่มีวิธีทั่วไปในการพิจารณาจำนวนองค์ประกอบหลักที่ใช้เช่นกันเนื่องจากองค์ประกอบที่เล็กที่สุดอาจเป็นสัดส่วนกับการตอบสนองของตัวเองและดังนั้นจึงเป็นตัวเลือกที่ดีที่สุดของตัวแปรที่จะรวม
whuber

1
ฉันคิดว่าแน่นอนถ้าคุณสามารถโหลดชุดข้อมูลในหน่วยความจำหลัก (ซึ่งฉันคิดว่าเป็นกรณีพิจารณาสิ่งที่คุณอธิบาย), การไล่ระดับสีแบบสุ่มสุ่มเป็นขั้นตอนแรกที่คุณควรทำก่อนลองใช้เทคนิคการลดขนาด ด้วย Scikit-Learn บน python (หรือ R แต่ฉันไม่ใช่ผู้ใช้ภาษานี้) มันจะใช้ได้ดี
Bertrand R

ฉันคิดว่านี่เป็นคำตอบที่มีประโยชน์ แต่ฉันคิดว่า OP กำลังถามเกี่ยวกับการถดถอยโลจิสติกไม่ใช่การลดคุณสมบัติ บางทีคุณสามารถตอบคำถามในส่วนนั้นได้ในฉบับ?
logc

ฉันไม่แน่ใจว่า PCA มีประโยชน์สำหรับปัญหาการถดถอยอย่างไร ปัญหาคือสิ่งนี้: PCA เก็บค่าเอกพจน์ที่ใหญ่ที่สุดของเมทริกซ์อินพุต แต่การหลอกของเมทริกซ์จะแปลงค่าเอกพจน์ดังนั้นคุณต้องการเก็บค่าดั้งเดิมน้อยที่สุด มันอาจจะดีกว่าถ้าจะร่างข้อมูล: arxiv.org/abs/1411.4357
Thomas Ahle

4

ดังที่ @ Frank Harrell ได้กล่าวถึงแล้วการใช้ net elastic หรือ LASSO เพื่อทำการลงโทษแบบถดถอยด้วยฟีเจอร์ทั้งหมด 5,000 รายการ ( p ) น่าจะเป็นการเริ่มต้นที่ดีสำหรับการเลือกฟีเจอร์ ตัวแปรตามความสนใจ) ทั้งวิธีการเหล่านี้สามารถทำได้โดยใช้แพคเกจการ glmnetR,

เพื่อที่จะคำนึงถึงความสัมพันธ์ที่ใช้ร่วมกันระหว่างตัวแปรตัวทำนายที่น่าสนใจ ( p = 5000) ฉันขอแนะนำให้ใช้ฟอเรสต์แบบสุ่มโดยใช้randomForestแพคเกจและ / หรือการไล่ระดับสีแบบเลื่อนโดยใช้gbmแพคเกจเพื่อประเมินความสำคัญสัมพัทธ์ เกี่ยวกับผลไบนารี ด้วยข้อมูลนี้คุณจะพร้อมมากขึ้นในการสร้างรูปแบบการถดถอยโลจิสติกที่น่าติดตามมากขึ้น


3
ไม่มันไม่ถูกต้องที่จะทำการขุดลอกข้อมูลเพื่อตัดสินใจว่าจะลบพารามิเตอร์ใดจากตัวแบบ มูลค่าของป่าสุ่มเช่นตาข่ายยืดหยุ่นคือมันรวมปริมาณที่เหมาะสมของการหดตัว เริ่มต้นด้วยชุดย่อยของตัวแปรที่พบในวิธีที่ไม่ถูกหลอกลวงYจะทำให้เกิดอคติ
Frank Harrell

1

ฉันคิดว่าคุณไม่ได้ จำกัด อยู่ที่ R เนื่องจากนี่เป็นปัญหาข้อมูลขนาดใหญ่ที่คุณอาจไม่ควรทำ คุณสามารถลองMLlibซึ่งเป็นไลบรารีการเรียนรู้ของเครื่องที่ปรับขนาดได้ของ Apache Spark

Apache Sparkเป็นเครื่องมือที่รวดเร็วและใช้งานทั่วไปสำหรับการประมวลผลข้อมูลขนาดใหญ่ในหน่วยความจำ สิ่งเหล่านี้ทำงานบนกรอบงาน Hadoop ที่ช่วยให้สามารถประมวลผลชุดข้อมูลขนาดใหญ่แบบกระจายข้ามกลุ่มคอมพิวเตอร์โดยใช้โมเดลการเขียนโปรแกรมอย่างง่าย มันถูกออกแบบมาเพื่อขยายขนาดจากเซิร์ฟเวอร์เดียวไปยังเครื่องหลายพันเครื่องแต่ละเครื่องมีการคำนวณและการจัดเก็บในตัวเครื่อง

โปรดทราบว่า 'เครื่องจักรหลายพันเครื่อง' เป็นทางเลือก (!) คุณสามารถตั้งค่าบนเดสก์ทอปที่ทำงาน / ที่บ้านของคุณได้เช่นกัน

กลับไปที่ MLlib มันมาพร้อมกับอัลกอริทึมด้านล่าง:

  • K-หมายถึงการจัดกลุ่มด้วย K- หมายถึง || การเริ่มต้น.
  • L1- และ L2 เชิงเส้นการถดถอยเชิงเส้น
  • การถดถอยโลจิสติก L1- และ L2 ที่ทำให้เป็นมาตรฐาน
  • สลับการกรองการทำงานร่วมกันอย่างน้อยกำลังสองด้วยการให้คะแนนที่ชัดเจน
  • Naive Bayes การจัดหมวดหมู่หลายวง
  • โคตรลาดลง

หากคุณทำงานกับข้อมูลขนาดใหญ่เป็นประจำคุณอาจต้องใช้โซลูชั่น Hadoop


0

คุณสามารถลอง Vowpal Wabbit: Vowpal Wabbit มันทำงานได้ดีกับชุดข้อมูลที่มีขนาดใหญ่มากและมีคุณสมบัติจำนวนมาก

ตามเว็บไซต์:

นี่คือโครงการที่เริ่มต้นที่ Yahoo! วิจัยและศึกษาต่อที่ Microsoft Research เพื่อออกแบบอัลกอริทึมการเรียนรู้ที่รวดเร็วปรับขนาดได้และมีประโยชน์ VW เป็นสาระสำคัญของความเร็วในการเรียนรู้ของเครื่องสามารถเรียนรู้จากชุดข้อมูลเทราฟีเอเรได้อย่างง่ายดาย ผ่านการเรียนรู้แบบขนานมันสามารถเกินกว่าปริมาณงานของอินเทอร์เฟซเครือข่ายของเครื่องเดียวเมื่อทำการเรียนรู้เชิงเส้นซึ่งเป็นหนึ่งในขั้นตอนวิธีการเรียนรู้

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