การถดถอยเชิงเส้นออนไลน์ที่มีประสิทธิภาพ


53

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

ฉันสมมติว่าตัวแบบการถดถอยเชิงเส้นหลายตัวแปรเชิงเส้นคือ

y=Ax+b+e

อัลกอริทึมที่ดีที่สุดสำหรับการสร้างการประเมินการอัปเดตอย่างต่อเนื่องของพารามิเตอร์การถดถอยเชิงเส้นและคืออะไร?Ab

จะเป็นการดี:

  • ฉันต้องการอัลกอริทึมที่มีพื้นที่ว่างและเวลามากที่สุดต่อการอัปเดตโดยที่คือขนาดของตัวแปรอิสระ ( ) และคือขนาดของตัวแปรตาม ( )N x M yO(NM)NxMy
  • ฉันต้องการที่จะสามารถระบุพารามิเตอร์บางอย่างเพื่อกำหนดจำนวนพารามิเตอร์ที่มีการปรับปรุงโดยตัวอย่างใหม่แต่ละตัวอย่างเช่น 0.000001 จะหมายความว่าตัวอย่างต่อไปจะให้หนึ่งในล้านของการประมาณค่าพารามิเตอร์ สิ่งนี้จะทำให้การสลายตัวแบบเลขชี้กำลังสำหรับผลกระทบของกลุ่มตัวอย่างในอดีตอันไกลโพ้น

2
ค้นหา (1) การถดถอยเชิงเส้นที่ยืดหยุ่น, (2) ตัวกรองคาลมาน
Jase

คำตอบ:


31

Maindonald อธิบายวิธีการตามลำดับขึ้นอยู่กับการหมุน Givens (การหมุนของ Givens เป็นการแปลงมุมฉากของเวกเตอร์สองตัวที่ศูนย์ออกรายการหนึ่งในเวกเตอร์) ในขั้นตอนก่อนหน้านี้คุณได้สลายการออกแบบเมทริกซ์ เป็นเมทริกซ์รูปสามเหลี่ยมผ่านทาง ฉากการเปลี่ยนแปลงเพื่อให้{0})' (รวดเร็วและง่ายต่อการรับผลการถดถอยจากเมทริกซ์รูปสามเหลี่ยม) เมื่อติดแถวใหม่ด้านล่างคุณจะสามารถขยายได้อย่างมีประสิทธิภาพโดยแถวที่ไม่ใช่ศูนย์ เช่นกันพูดT Q Q X = ( T , 0 ) v X ( T , 0 ) t T T t T QXTQQX=(T,0)vX(T,0)t. งานนี้จะเป็นศูนย์แถวนี้ในขณะที่รักษารายการในตำแหน่งเส้นทแยงมุม ลำดับการหมุนของ Givens ทำเช่นนี้: การหมุนด้วยแถวแรกของศูนย์องค์ประกอบแรกของ ; ดังนั้นการหมุนด้วยแถวที่สองของศูนย์องค์ประกอบที่สองและอื่น ๆ ผลที่ตามมาก็คือ premultiply โดยชุดผลัดซึ่งไม่เปลี่ยนแปลง orthogonalityTTtTQ

เมื่อเมทริกซ์การออกแบบมีคอลัมน์ (ซึ่งเป็นกรณีเมื่อถดถอยกับตัวแปรบวกค่าคงที่) จำนวนการหมุนที่ต้องการไม่เกินและการหมุนแต่ละครั้งจะเปลี่ยนสอง -vector การจัดเก็บข้อมูลที่จำเป็นสำหรับคือ2) ดังนั้นอัลกอริทึมนี้จึงมีต้นทุนการคำนวณของทั้งในเวลาและสถานที่p p + 1 p + 1 T O ( ( p + 1 ) 2 ) O ( ( p + 1 ) 2 )p+1pp+1p+1TO((p+1)2)O((p+1)2)

วิธีการที่คล้ายกันช่วยให้คุณกำหนดผลกระทบของการถดถอยของการลบแถว Maindonald ให้สูตร; เพื่อทำBelsley, Kuh และเวลส์ ดังนั้นหากคุณกำลังมองหาหน้าต่างที่กำลังเคลื่อนที่สำหรับการถดถอยคุณสามารถเก็บข้อมูลของหน้าต่างภายในบัฟเฟอร์แบบวงกลมติดกับข้อมูลใหม่และวางเก่ากับแต่ละการปรับปรุง คู่นี้เวลาการปรับปรุงและต้องเพิ่มเติมจัดเก็บข้อมูลสำหรับหน้าต่างของความกว้างkปรากฏว่าจะเป็นแบบอะนาล็อกของพารามิเตอร์อิทธิพลO(k(p+1))1 / kk1/k

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

อ้างอิง

JH Maindonald, การคำนวณทางสถิติ J. Wiley & Sons, 1984 บทที่ 4

DA Belsley, E. Kuh, RE Welsch, การวินิจฉัยการถดถอย: การระบุข้อมูลที่มีอิทธิพลและแหล่งที่มาของความร่วมมือกัน J. Wiley & Sons, 1980


1
เป็นวิธีการที่ Maindonald อธิบายเกี่ยวกับหรือคล้ายกับอัลกอริทึมของ Gentleman หรือไม่? jstor.org/stable/2347147
onestop

6
ในกรณีที่เห็นว่ายังมีส่วนขยายโดยอลันมิลเลอร์jstor.org/stable/2347583 ที่เก็บถาวรของเว็บไซต์ซอฟต์แวร์ Fortran ของเขาอยู่ที่jblevins.org/mirror/amiller
onestop

5
อัลกอริทึมที่ชัดเจนปรากฏที่ด้านล่างของ p 4 saba.kntu.ac.ir/eecd/people/aliyari/NN%20%20files/rls.pdf ซึ่งสามารถพบได้โดย Googling "เรียกซ้ำกำลังสองน้อยที่สุด" มันไม่ได้ดูเหมือนการปรับปรุงในแนวทางของ Gentleman / Maindonald แต่อย่างน้อยก็ชัดเจนและชัดเจน
whuber

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

2
@suncoolsu อืม ... หนังสือของ Maindonald ถูกตีพิมพ์ใหม่เมื่อฉันเริ่มใช้มัน :-)
whuber

8

ฉันคิดว่าการนำโมเดลการถดถอยเชิงเส้นกลับมาเป็นโมเดลพื้นที่รัฐจะให้สิ่งที่คุณเป็น หากคุณใช้ R คุณอาจต้องการใช้แพ็กเกจdlm และดูหนังสือสหายโดย Petris et al


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

1
ใช่ในกรณีทั่วไปสิ่งนี้ใช้สำหรับอนุกรมเวลาที่มีการสังเกตอย่างอิสระ แต่คุณสามารถสันนิษฐานได้ว่าเป็นการรวมตัวกันระหว่างการสังเกตอย่างต่อเนื่องซึ่งจะให้ความสนใจเป็นพิเศษกับคุณ
F. Tusell

7

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

Letเป็นค่าใช้จ่ายของ i'th ตัวอย่างการฝึกอบรมได้รับพารามิเตอร์Wการอัพเดตของคุณสำหรับพารามิเตอร์ j'th นั้นE(i;W)W

WjWj+αE(i;W)Wj

โดยที่เป็นอัตราขั้นตอนที่คุณควรเลือกผ่านการตรวจสอบความถูกต้องของข้อมูลหรือการวัดที่ดีα

สิ่งนี้มีประสิทธิภาพมากและวิธีการฝึกอบรมโครงข่ายประสาทเทียม คุณสามารถประมวลผลตัวอย่างจำนวนมากได้แบบขนาน (เช่น 100 หรือดังนั้น) ได้อย่างมีประสิทธิภาพ

แน่นอนว่าอัลกอริธึมการเพิ่มประสิทธิภาพที่ซับซ้อนยิ่งขึ้น (โมเมนตัมการไล่ระดับสีคอนจูเกต ... ) สามารถใช้ได้


ดูเหมือนคล้ายกับบทความนี้eprints.pascal-network.org/archive/00002147/01/... มันถูกนำไปใช้ในโครงการโอเพ่นซอร์สที่เรียกว่า jubatus
saccharine

3

แปลกใจที่ไม่มีใครแตะต้องเลยในเรื่องนี้ การถดถอยเชิงเส้นมีฟังก์ชันวัตถุประสงค์กำลังสอง ดังนั้นขั้นตอนนิวตัน Raphson จากจุดเริ่มต้นใด ๆ จะนำคุณไปสู่ ​​optima สมมุติว่าคุณทำการถดถอยเชิงเส้นของคุณเรียบร้อยแล้ว ฟังก์ชั่นวัตถุประสงค์คือ:

L(β)=(yXβ)t(yXβ)
การไล่ระดับสีจะกลายเป็น และ hessian:
L(β)=2Xt(yXβ)
2L(β)=XtX

ตอนนี้คุณได้รับข้อมูลที่ผ่านมาและทำการถดถอยเชิงเส้นและนั่งอยู่กับพารามิเตอร์ของคุณ ( ) การไล่ระดับสี ณ จุดนี้เป็นศูนย์ตามคำนิยาม รัฐที่ได้รับดังกล่าวข้างต้น มีจุดข้อมูลใหม่ ( ) มาถึง คุณเพียงแค่คำนวณการไล่ระดับสีสำหรับจุดใหม่ผ่าน:βxnew,ynew

Lnew(β)=2xnew(ynewxnewTβ)
และนั่นจะกลายเป็นการไล่ระดับสีโดยรวมของคุณ (เนื่องจากการไล่ระดับสีจากข้อมูลที่มีอยู่เป็นศูนย์) . รัฐสำหรับจุดข้อมูลใหม่คือ:

2Lnew=xnewxnewT
T

เพิ่มสิ่งนี้ลงในรัฐเก่าที่ระบุไว้ข้างต้น จากนั้นใช้ขั้นตอนของ Newton Raphson

βnew=βold+(2L)1Lnew

และคุณทำเสร็จแล้ว


1
ฉันชอบความคิดสำหรับความเรียบง่าย แต่ (a) เพื่อไม่ให้ผู้อ่านเกิดความสับสนอยากจะเห็นคำจำกัดความที่ชัดเจนของ " " และ (b) เชื่อว่าคุณต้องคำนวณการไล่ระดับสีอย่างถูกต้อง (หรือแสดง ทำไมการโดนปัจจัย 2 ไม่สำคัญ) นี่จะน่าเชื่อถือมากขึ้นถ้าคุณสามารถยกตัวอย่างเล็ก ๆ น้อย ๆ ที่แสดงว่ามันถูกต้อง สำหรับใหญ่ขึ้นมันจะคุ้มค่าที่จะประเมินความพยายามในการคำนวณ การคว่ำบาตรของ Hessian ไม่ใช้เวลาหรือไม่? Lnewp,O(p3)
whuber

ขอขอบคุณจะเพิ่มรายละเอียดเพิ่มเติมในวันนี้ ใช่ inverting กระสอบใช้เวลาขนาดใหญ่หน้านอกจากนี้คุณยังสามารถลองใช้และรักษาค่าผกผันของ Hessian และอัปเดตโดยตรงโดยใช้ power series ( ) หากคุณมีพารามิเตอร์เป็นล้านตัวการไล่ระดับสีจะเป็นตัวเลือกเพียงอย่างเดียวของคุณ O(p3)p(IA)1=I+A+A2+
ryu576

2

ความพอดีแบบสี่เหลี่ยมจัตุรัสมาตรฐานน้อยที่สุดให้ค่าสัมประสิทธิ์การถดถอย

β=(XTX)1XTY

โดยที่ X คือเมทริกซ์ของค่า M สำหรับแต่ละจุดข้อมูล N และมีขนาด NXM Y คือเมทริกซ์ของเอาต์พุต NX1 แน่นอนเป็นเมทริกซ์ของค่าสัมประสิทธิ์ MX1 (หากคุณต้องการการสกัดกั้นให้ตั้งค่า x หนึ่งชุดเสมอเป็น 1)β

ในการทำให้เกมออนไลน์น่าจะเป็นไปได้คุณเพียงแค่ต้องติดตามและดังนั้น MXM matrix หนึ่งเมทริกซ์และ MX1 หนึ่งเมทริกซ์ ทุกครั้งที่คุณได้รับจุดข้อมูลใหม่คุณจะอัปเดตองค์ประกอบจากนั้นคำนวณอีกครั้งซึ่งทำให้คุณต้องใช้ MXM matrix matrix และการคูณเมทริกซ์ MXM และ MX1XTXXTYM2+Mβ

ตัวอย่างเช่นถ้า M = 1 ดังนั้นค่าสัมประสิทธิ์หนึ่งคือ

β=i=1Nxiyii=1Nxi2

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

หากคุณต้องการลดการประมาณการก่อนหน้านี้ในเชิงเรขาคณิตฉันคิดว่าคุณสามารถลดน้ำหนักและโดยในแต่ละครั้งก่อนเพิ่มคำใหม่โดยที่มีจำนวนน้อยX T Y ( 1 - λ ) λXTXXTY(1λ)λ


2
ยินดีที่ได้เห็นกรณีง่าย ๆ นี้อธิบาย แต่คุณสังเกตเห็นไหมว่าคำถามนั้นถามโดยเฉพาะเกี่ยวกับการถดถอยหลายตัวแปร ? มันไม่ง่ายเลยที่จะอัปเดตตัวส่วนในกรณีนั้น! β
whuber

ผมคิดว่าคำตอบของฉันยังคงทำงาน: เช่นคุณต้องติดตามของเมทริกซ์ MXMและเมทริกซ์ MX1 Xองค์ประกอบของเมทริกซ์เหล่านั้นคือผลรวมที่เหมือนกันในตัวอย่าง M = 1 หรือว่าฉันขาดอะไรไป? X T YXTXXTY
Mark Higgins

6
ใช่: นอกเหนือจากการคำนวณผลิตภัณฑ์เมทริกซ์และการใช้เมทริกซ์กับเวกเตอร์ตอนนี้คุณต้องสลับ ในแต่ละขั้นตอน นั่นแพงมาก อัลกอริทึมออนไลน์ทั้งหมดคือการแทนที่ขั้นตอนราคาแพงขายส่งโดยขั้นตอนการอัปเดตที่ถูกกว่า XX
whuber

1
@whuber โดยวิธีการที่รวดเร็วและออนไลน์ในการประมาณสำหรับเมทริกซ์และเวกเตอร์ที่เปลี่ยนแปลงนั้นได้รับจาก Schraudolph, NN (2002) ผลิตภัณฑ์เมทริกซ์เวกเตอร์โค้งอย่างรวดเร็วสำหรับการไล่ระดับสีลำดับที่สอง เป็นหลักคุณให้และเป็นเสื้อC x z t + 1 = z t + x - C z t z C - 1 x t C1xCxzt+1=zt+xCztzC1xt
Neil G

1

ปัญหาจะแก้ไขได้ง่ายขึ้นเมื่อคุณเขียนสิ่งต่าง ๆ เล็กน้อย:

Y = y

X = [x, 1]

แล้วก็

Y = A * X

พบวิธีแก้ปัญหาเพียงครั้งเดียวโดยการคำนวณ

V = X '* X

และ

C = X '* Y

โปรดทราบว่า V ควรมีขนาด N-by-N และ C ขนาด N-by-M จากนั้นพารามิเตอร์ที่คุณต้องการจะได้รับจาก:

A = inv (V) * C

เนื่องจากทั้ง V และ C คำนวณโดยการรวมข้อมูลของคุณคุณสามารถคำนวณ A ในทุก ๆ ตัวอย่างใหม่ อย่างไรก็ตามมีความซับซ้อนของเวลา O (N ^ 3)

เนื่องจาก V เป็นสี่เหลี่ยมจัตุรัสและค่าบวกกึ่งแน่นอนการแยก LU จะเกิดขึ้นซึ่งจะทำให้การแปลง V เป็นตัวเลขมีเสถียรภาพมากขึ้น มีอัลกอริธึมที่จะทำการอัปเดตอันดับที่ 1 ของค่าผกผันของเมทริกซ์ ค้นหาสิ่งเหล่านั้นและคุณจะมีการใช้งานที่มีประสิทธิภาพที่คุณกำลังมองหา

อัลกอริทึมการอัปเดตอันดับ 1 สามารถพบได้ใน "การคำนวณเมทริกซ์" โดย Golub และ van Loan มันเป็นวัสดุที่แข็ง แต่มันมีภาพรวมที่ครอบคลุมของอัลกอริทึมดังกล่าว

หมายเหตุ: วิธีการข้างต้นให้การประมาณค่ากำลังสองน้อยที่สุดในแต่ละขั้นตอน คุณสามารถเพิ่มน้ำหนักให้กับการอัปเดตของ X และ Y ได้อย่างง่ายดายเมื่อค่าของ X และ Y มีขนาดใหญ่เกินไปพวกมันสามารถถูกปรับขนาดด้วยสเกลาร์เดียวโดยไม่ส่งผลต่อผลลัพธ์

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