วิธีที่เร็วที่สุดในการคำนวณค่าลักษณะเฉพาะที่ใหญ่ที่สุดของเมทริกซ์ทั่วไปคืออะไร


27

แก้ไข:ฉันกำลังทดสอบว่าค่าลักษณะเฉพาะใดมีขนาดหนึ่งหรือมากกว่า

ฉันต้องการหาค่าลักษณะเฉพาะสัมบูรณ์ที่ใหญ่ที่สุดของเมทริกซ์เบาบางขนาดใหญ่ที่ไม่สมมาตร

ฉันใช้eigen()ฟังก์ชันของ R ซึ่งใช้ QR algo จาก EISPACK หรือ LAPACK เพื่อค้นหาค่าลักษณะเฉพาะทั้งหมดจากนั้นฉันใช้abs()เพื่อรับค่าสัมบูรณ์ อย่างไรก็ตามฉันต้องทำให้เร็วขึ้น

ฉันได้ลองใช้อินเตอร์เฟส ARPACK ในigraphแพ็คเกจ R แล้ว อย่างไรก็ตามมันให้ข้อผิดพลาดสำหรับเมทริกซ์ตัวหนึ่งของฉัน

การดำเนินการขั้นสุดท้ายจะต้องสามารถเข้าถึงได้จากอาร์

อาจมีค่าลักษณะเฉพาะหลายค่าที่มีขนาดเท่ากัน

คุณมีข้อเสนอแนะใด?

แก้ไข: ความแม่นยำจะต้องเป็น1e-11เท่านั้น เป็น "ปกติ" เมทริกซ์ได้รับเพื่อให้ห่างไกล 386 ฉันสามารถทำ QR factorisation กับมันได้ อย่างไรก็ตามมันเป็นไปได้ที่จะมีขนาดใหญ่กว่ามาก ฉันกำลังเริ่มอ่านเกี่ยวกับอัลกอริทึมของ Arnoldi ฉันเข้าใจว่ามันเกี่ยวข้องกับ Lanczsos386×386

EDIT2:ถ้าฉันมีเมทริกซ์หลายตัวที่ฉัน "ทดสอบ" และฉันรู้ว่ามันมีซับเมทริกซ์ขนาดใหญ่ที่ไม่เปลี่ยนแปลง เป็นไปได้ไหมที่จะเพิกเฉย / ทิ้ง?


ดูคำตอบของฉันที่นี่: scicomp.stackexchange.com/a/1679/979 นี่คือหัวข้อการวิจัยในปัจจุบันและวิธีการในปัจจุบันสามารถทำได้ดีกว่า Lanczos ปัญหาการคำนวณค่าเอกพจน์นั้นเทียบเท่ากับปัญหาการคำนวณค่าลักษณะเฉพาะ
dranxo

2
เมทริกซ์ 400x400! = ใหญ่ ที่ใหญ่ที่สุดหมายความว่าอย่างไรถ้า "อาจจะมีค่าลักษณะเฉพาะหลายค่าที่มีขนาดเท่ากัน" ในดินแดน numpy: linalg.eig (random.normal (size = (400,400))) ใช้เวลาประมาณครึ่งวินาที ช้าเกินไปหรือไม่
meawoppl

@ meawoppl ใช่ครึ่งวินาทีช้าเกินไป นี่เป็นเพราะมันเป็นส่วนหนึ่งของสัญลักษณ์อื่นที่รันการคำนวณนี้หลายครั้ง
พลัง

1
@ อำนาจ gotcah คุณมีการประมาณค่า eigenvector หรือไม่ นั่นคือมันมีแนวโน้มที่จะคล้ายกับทางออกสุดท้ายหรือคุณสามารถคาดเดาการศึกษาเกี่ยวกับโครงสร้างของมัน?
meawoppl

คำตอบ:


14

มันขึ้นอยู่กับขนาดของเมทริกซ์ของคุณเป็นอย่างมากในกรณีขนาดใหญ่เช่นกันว่าเบาบางและความแม่นยำที่คุณต้องการบรรลุ

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

หากนี่ไม่ใช่ปัญหาของคุณโปรดให้ข้อมูลที่เฉพาะเจาะจงกับคำถามของคุณ จากนั้นเพิ่มความคิดเห็นในคำตอบนี้แล้วฉันจะอัปเดต

แก้ไข: [นี่เป็นคำถามรุ่นเก่าที่ให้ค่า eigenvalue มากที่สุด] เนื่องจากเมทริกซ์ของคุณมีขนาดเล็กและหนาแน่นอย่างเห็นได้ชัดฉันจะทำการวนซ้ำของ Arnoldi ใน B = (IA) ^ {- 1} โดยใช้ค่าเริ่มต้น การแยกตัวประกอบแบบสามเหลี่ยมของ IA จะมีการคูณด้วยราคาถูกโดย B. (หรือคำนวณการผกผันอย่างชัดเจน การทำงานกับ B แทน A ค่าลักษณะเฉพาะเชิงลบจะถูกแยกออกจากกันได้ดีกว่ามากดังนั้นหากมีอย่างใดอย่างหนึ่งคุณควรมาบรรจบกันอย่างรวดเร็ว

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

Edit2: มันเป็นเรื่องยากที่จะได้รับกับ Arnoldi โดยเฉพาะเซตที่น่าสนใจ เพื่อให้ได้ค่าลักษณะเฉพาะที่ใหญ่ที่สุดอย่างน่าเชื่อถือคุณต้องทำซ้ำการเว้นวรรคโดยใช้เมทริกซ์ดั้งเดิมโดยมีการจับคู่ขนาดพื้นที่ย่อยหรือเกินจำนวนค่าลักษณะเฉพาะที่คาดว่าจะใกล้เคียงกับ 1 หรือใหญ่กว่า ในเมทริกซ์ขนาดเล็กสิ่งนี้จะช้ากว่าอัลกอริทึม QR แต่บนเมทริกซ์ขนาดใหญ่มันจะเร็วกว่ามาก


ฉันต้องทดสอบว่าค่าลักษณะเฉพาะที่ใหญ่ที่สุดมีค่ามากกว่า 1 หรือไม่ความแม่นยำจะต้องเป็น 1e-11 เท่านั้น เมทริกซ์ "ทั่วไป" จนถึงขณะนี้มี 386 x 386 ฉันสามารถสร้างตัวประกอบ QR ได้ อย่างไรก็ตามมันเป็นไปได้ที่จะมีขนาดใหญ่กว่ามาก ฉันกำลังเริ่มอ่านเกี่ยวกับอัลกอริทึมของ Arnoldi ฉันเข้าใจว่ามันเกี่ยวข้องกับ Lanczsos
พลัง

ข้อมูลนี้เป็นของคำถามของคุณ - ดังนั้นโปรดแก้ไขและเพิ่มข้อมูลเพิ่มเติม (เหตุใดค่าลักษณะเฉพาะจริงหรืออะไรที่มีค่าเฉลี่ยมากที่สุด) - ดูการแก้ไขคำตอบของฉัน
Arnold Neumaier

ขอโทษที่ฉันไม่ได้อธิบายตัวเองอย่างชัดเจน ฉันยังไม่ได้อธิบายอย่างชัดเจนว่าค่าลักษณะเฉพาะนั้นซับซ้อน ฉันกำลังทดสอบว่าค่าลักษณะเฉพาะใดมีขนาดหนึ่งหรือมากกว่า
พลัง

1
(IA)1

1
ดูแก้ไข 2 ในคำตอบของฉัน
Arnold Neumaier

7

|λn1/λn|

λn1λn


1
เกิดอะไรขึ้นถ้า | λ (n − 1) | = | λ (n) | ?
พลัง

@ power จากนั้น Power Iteration ปกติจะไม่มาบรรจบกัน ฉันไม่รู้ว่าวิธีการประมาณค่าต่าง ๆ จะแยกแยะความแตกต่างระหว่างค่าลักษณะเฉพาะได้อย่างไรคุณจะต้องอ่านบทความนี้
Pedro

2
|λn1|=|λn|λnλn1

คุณมีการอ้างอิงถึงบทความทางวิชาการหรือหนังสือที่สนับสนุนสิ่งนี้? นอกจากนี้จะเกิดอะไรขึ้นถ้า \ lambda_ {n} ซับซ้อน?
พลังงาน

5
หากมีค่าลักษณะเฉพาะที่แตกต่างกันหลายค่าของโมดูลัสสูงสุดการทำซ้ำพลังจะรวมกันภายใต้สถานการณ์พิเศษ โดยทั่วไปแล้วจะแกว่งไปมาในลักษณะที่คาดเดาไม่ได้
Arnold Neumaier

5

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

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับงานวิจัยใหม่ได้ที่นี่:

http://math.berkeley.edu/~strain/273.F10/martinsson.tygert.rokhlin.randomized.decomposition.pdf

http://arxiv.org/abs/0909.4061

รหัสนี้จะทำเพื่อคุณ:

http://cims.nyu.edu/~tygert/software.html

https://bitbucket.org/rcompton/pca_hgdp/raw/be45a1d9a7077b60219f7017af0130c7f43d7b52/pca.m

http://code.google.com/p/redsvd/

https://cwiki.apache.org/MAHOUT/stochastic-singular-value-decomposition.html

หากภาษาที่คุณเลือกไม่ได้อยู่ในนั้นคุณสามารถหมุน SVD แบบสุ่มของคุณเองได้อย่างง่ายดาย มันต้องใช้การคูณเวกเตอร์เมทริกซ์เท่านั้นตามด้วยการเรียก SVD แบบนอกชั้นวาง


4

ที่นี่คุณจะได้พบกับการแนะนำอัลกอริทึมเกี่ยวกับอัลกอริทึม Jacobi-Davidson ซึ่งคำนวณค่าลักษณะเฉพาะสูงสุด

ในบทความนี้มีการสำรวจแง่มุมทางคณิตศาสตร์ JD อนุญาตเมทริกซ์ทั่วไป (จริงหรือซับซ้อน) และสามารถใช้ในการคำนวณช่วงของค่าลักษณะเฉพาะ

ที่นี่คุณสามารถค้นหาการปรับใช้ไลบรารีต่าง ๆ JDQR และ JDQZ (รวมถึงอินเตอร์เฟส C ซึ่งคุณควรจะสามารถเชื่อมโยงจาก R)


ฉันไม่สามารถค้นหาวรรณกรรมใด ๆ ที่ระบุอย่างชัดเจนว่าวิธี Jacobi-Davidson นั้นใช้ได้กับเมทริกซ์ทั่วไปที่แท้จริง
พลัง

เว้นแต่ว่าทุกบทความจะระบุข้อ จำกัด อย่างชัดเจนและอาร์กิวเมนต์การบรรจบกันนั้นขึ้นอยู่กับข้อ จำกัด ที่ไม่สำคัญ
Deathbreath

นี่เป็นอีกคำอธิบายของ JD เมทริกซ์ที่พิจารณานั้นมีความสมบูรณ์โดยทั่วไป ไม่มีโครงสร้างที่ถูกเอารัดเอาเปรียบและผลลัพธ์เฉพาะสำหรับการฝึกอบรมของ Hermitian จะถูกเปรียบเทียบและเปรียบต่างเช่นการลู่เข้าสำหรับเมทริกซ์ทั่วไปนั้นเป็นกำลังสอง แต่ลูกบาศก์สำหรับเมทริกซ์ของ Hermitian
Deathbreath

ขอบคุณสำหรับสิ่งนี้. ฉันไม่พบรหัส C ใด ๆ สำหรับเมทริกซ์ทั่วไปดังนั้นฉันจะต้องเขียนเอง ลิงก์ไปยังอัลกอริทึมดูเหมือนจะใช้สำหรับเมทริกซ์เฮอร์เมียน
พลังงาน

1
@ power คุณจะไม่พบในวรรณกรรมที่ระบุว่าการใช้งาน QR แบบมาตรฐานมาบรรจบกันสำหรับเมทริกซ์ทั่วไปที่แท้จริง - นั่นเป็นปัญหาที่เปิดกว้างและไม่นานที่ผ่านมาพบตัวอย่างแบบโต้ตอบสำหรับรหัส QR ใน LAPACK
Federico Poloni

2

ในโพสต์ต้นฉบับของคุณคุณพูดว่า:

"ฉันได้ลองใช้อินเทอร์เฟซ ARPACK ในแพคเกจ igraph R อย่างไรก็ตามมันทำให้เกิดข้อผิดพลาดสำหรับเมทริกซ์ตัวหนึ่งของฉัน"

ฉันสนใจที่จะทราบข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาด หากคุณสามารถทำให้เมทริกซ์นี้เปิดเผยต่อสาธารณะได้ที่ไหนสักแห่งฉันจะลอง ARPACK กับมัน

จากสิ่งที่ฉันได้อ่านไปฉันคาดว่า ARPACK จะทำงานได้ดีมากในการแยกค่าลักษณะเฉพาะที่ใหญ่ที่สุด จะเจาะจงมากขึ้นฉันคาดหวังว่าวิธีการของ Arnoldi จะทำงานได้ดีสำหรับกรณีนี้และแน่นอนว่าเป็นสิ่งที่ ARPACK ใช้

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


ฉันจะดูว่าฉันสามารถหางานของฉันได้หรือไม่ ฉันทำงานเมื่อหนึ่งปีที่แล้ว
พลัง

0

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

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


1
ขอบคุณ Dan อย่างไรก็ตาม: ในเมทริกซ์ของฉันค่าลักษณะเฉพาะอื่น ๆ บางอย่างจะมีขนาดใกล้เคียงกัน (หากไม่เหมือนกัน) เป็นค่าที่ใหญ่ที่สุด วิธีการของคุณคล้ายกับ Power Iteration และ Rayleigh Quotient Iteration หรือไม่? Batterson และ Smillie (1990) เขียนว่าสำหรับเมทริกซ์ที่ไม่ได้ใช้สมมาตรบางอย่างการทำซ้ำ Rayleigh Quotient Quotient จะไม่มาบรรจบกัน Batterson, S. , Smillie, J (1990) "การคำนวณความฉลาดทาง Rayleigh ซ้ำสำหรับเมทริกซ์แบบไม่สมมาตร", คณิตศาสตร์การคำนวณ, vol 55, NUM 191, P 169 - 178
power

หากค่าลักษณะเฉพาะอื่น ๆ มีขนาดเท่ากับค่าที่ใหญ่ที่สุด ... ค่าเหล่านั้นก็จะไม่ "ใหญ่ที่สุด" ด้วยหรือไม่
ely

@EMS: พวกเขาจะยังคง "ค่าลักษณะเฉพาะที่ใหญ่ที่สุด" แต่การปรากฏตัวของมากกว่าหนึ่งที่ใหญ่ที่สุดจะยังคงฆ่าคอนเวอร์เจนซ์
Dan

ฉันแค่สงสัยว่าค่าลักษณะเฉพาะที่คุณต้องการให้รวมเข้าด้วยกัน สิ่งต่าง ๆ เช่น Rayleigh quotient / Power method มีความหมายเมื่อมีค่าลักษณะเฉพาะที่ใหญ่ที่สุดที่แตกต่างกัน คำถามของคุณขอให้ค้นหาค่าลักษณะเฉพาะที่ใหญ่ที่สุด แต่ดูเหมือนว่านี่ไม่ใช่ปัญหาของคุณ ฉันแค่เข้าใจผิดโดยชื่อของโพสต์
ely

-1

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


ยินดีต้อนรับสู่ SciComp! ดังที่คำถามระบุไว้ ARPACK ไม่ทำงานสำหรับ OP ดังนั้นคำตอบนี้ไม่ได้มีประโยชน์จริงๆ
Christian Clason

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