มีอัลกอริทึมสำหรับการคำนวณพารามิเตอร์ "การทำงาน" เชิงเส้นหรือการถดถอยโลจิสติกหรือไม่?


32

กระดาษ "คำนวณความแปรปรวนในการทำงานอย่างถูกต้อง" ที่http://www.johndcook.com/standard_deviation.html แสดงวิธีคำนวณค่าเฉลี่ยความแปรปรวนและส่วนเบี่ยงเบนมาตรฐาน

มีอัลกอริทึมที่พารามิเตอร์ของตัวแบบการถดถอยเชิงเส้นหรือแบบลอจิสติกสามารถอัปเดต "แบบไดนามิก" แบบเดียวกันได้หรือไม่เมื่อมีการจัดทำบันทึกการฝึกอบรมใหม่


1
ด้วยชุดฝึกอบรมขนาดใหญ่หรือสตรีมข้อมูลอย่างต่อเนื่องคุณสามารถใช้อัลกอริทึมซ้ำ ๆ เช่น Stochastic Gradient Descent และคว้าอินพุตในแบทช์ขนาดเล็กขณะที่คุณดำเนินการต่อ นั่นคือสิ่งที่คุณถาม
andreister

1
อัลกอริธึมการค้นหา RLS และตัวแปรต่างๆ en.wikipedia.org/wiki/Recursive_least_squares_filter
Memming

คำตอบ:


20

เชิงเส้นค่าสัมประสิทธิ์การถดถอยของy=ax+bมี= C o V ( x , Y ) /วีR ( x )และ= M e n ( Y ) - เมตรe n ( x )a=cov(x,y)/var(x)b=mean(y)amean(x)

ดังนั้นสิ่งที่คุณต้องการจริงๆเป็นวิธีการที่เพิ่มขึ้นในการคำนวณcov(x,y) ) จากค่านี้และความแปรปรวนของxและค่าเฉลี่ยของทั้งสองyและxคุณสามารถคำนวณค่าพารามิเตอร์และข ในขณะที่คุณจะเห็นในรหัสเทียมที่ระบุด้านล่างคำนวณที่เพิ่มขึ้นของo V ( x , Y )จะคล้ายกับการคำนวณที่เพิ่มขึ้นของวีR ( x ) นี่ไม่ควรแปลกใจเพราะv a rabcov(x,y)var(x)var(x)=cov(x,x) )

นี่คือรหัสหลอกที่คุณอาจมองหา:

init(): meanX = 0, meanY = 0, varX = 0, covXY = 0, n = 0

update(x,y):
n += 1
dx = x - meanX
dy = y - meanY
varX += (((n-1)/n)*dx*dx - varX)/n
covXY += (((n-1)/n)*dx*dy - covXY)/n
meanX += dx/n
meanY += dy/n

getA(): return covXY/varX
getB(): return meanY - getA()*meanX

ฉันพบคำถามนี้ในขณะที่ค้นหาอัลกอริทึมที่เทียบเท่าเพิ่มการคำนวณการถดถอยแบบหลายตัวแปรแบบเพิ่มเป็นR=(XX)1XYดังนั้นXR=Y+ϵ


4
ขอขอบคุณสำหรับการสนับสนุนของคุณ! ส่วนหนึ่งของคำถามเกี่ยวกับการถดถอยเชิงเส้นจริง ๆ แล้วเป็นซ้ำของstats.stackexchange.com/questions/6920/ซึ่งคำตอบจะแสดงวิธีการอัปเดตโมเดลการถดถอยเชิงเส้นหลายแบบ เธรดปัจจุบันได้รับอนุญาตให้ยืนได้เนื่องจากส่วนการถดถอยโลจิสติกส์ของคำถามนั้นขึ้นอยู่กับความสนใจ อันที่จริงแม้ส่วนหนึ่งได้รับการโลจิสติกซ้ำที่stats.stackexchange.com/questions/59174/...
whuber

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

3
ฉันเชื่อว่ามันอาจจะมีประโยชน์และเป็นเอกลักษณ์ในการเสนอรหัสการทำงาน
whuber

ฉันขอถามคุณได้ไหมว่าทำไมคุณถึงยอมให้ dx * dy times (n-1) / n?
FavorMylikes

คุณสามารถปรับปรุงรหัสเพื่อคำนวณค่า p ได้หรือไม่?
นาธาน

12

สำหรับตัวอย่างเฉพาะของคุณ:

การถดถอยเชิงเส้น กระดาษ"การถดถอยเชิงเส้นออนไลน์และการประยุกต์ใช้กับการเรียนรู้การเสริมแรงแบบจำลอง"โดย Alexander Strehl และ Michael Littman อธิบายอัลกอริทึมที่เรียกว่า "KWIK การถดถอยเชิงเส้น" (ดูอัลกอริทึม 1) ซึ่งให้การประมาณ . โปรดทราบว่านี่ไม่ใช่การทำให้เป็นปกติ (เช่นไม่ใช่การถดถอยริดจ์) ฉันค่อนข้างแน่ใจว่าวิธีการของ Strehl & Littman ไม่สามารถขยายไปสู่การตั้งค่านั้นได้

การถดถอยโลจิสติก

หัวข้อนี้ให้ความกระจ่างเกี่ยวกับเรื่องนี้ พิเศษ:

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

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


เกี่ยวกับการถดถอยโลจิสติกส์ฉันคิดว่าคุณเป็นคนมองโลกในแง่ร้ายโดยไม่จำเป็น การถดถอยโลจิสติกเทียบเท่ากับการคำนวณความน่าจะเป็นระดับหลังสำหรับปัญหาสองระดับกับการแจกแจงแบบเกาส์แต่ละชั้นด้วยวิธีการที่แตกต่างกันและความแปรปรวนร่วมที่ใช้ร่วมกัน MLE สำหรับความแปรปรวนร่วมเป็นเพียงผลรวมถ่วงน้ำหนักของความแปรปรวนร่วมต่อระดับดังนั้นสถิติที่เพียงพอเป็นเพียงการนับต่อคลาส, ผลรวมและผลรวมของกำลังสอง เห็นได้ชัดว่าเป็นเรื่องง่ายที่จะควบคุมการอัปเดตที่แน่นอนโดยใช้สถิติที่เพียงพอ
Robert Dodier

3
@RobertDodier คุณได้อธิบายการวิเคราะห์จำแนกเชิงเส้นไม่ใช่การถดถอยโลจิสติก ย่อหน้าสุดท้ายของส่วนเกริ่นนำที่นี่ชี้แจงความสัมพันธ์
ahfoss

@ahfoss แม้ว่าข้อมูลต่อคลาสจะไม่ถูกแจกจ่าย แต่ก็ยังสามารถสร้างแบบจำลองที่เทียบเท่ากับการถดถอยโลจิสติกผ่านการแปรปรวนร่วมต่อคลาส
Robert Dodier

1
@RobertDodier รุ่นเทียบเท่าคืออะไร คุณดูเหมือนจะหมายความว่ามีทางออกที่ชัดเจนสำหรับปัญหาที่ยากยิ่ง วิธีแก้ปัญหาของคุณนั้นยอดเยี่ยมกว่าที่คุณคิดหรือมากกว่านั้น
ahfoss

11

ตามหลักการทั่วไป:

0) คุณเก็บสถิติที่เพียงพอและประมาณการ ML ปัจจุบัน

1) เมื่อคุณได้รับข้อมูลใหม่ให้อัปเดตสถิติที่เพียงพอและประมาณการ

2) เมื่อคุณมีสถิติไม่เพียงพอคุณจะต้องใช้ข้อมูลทั้งหมด

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

หากปัญหาของคุณมีโครงสร้างพิเศษคุณสามารถใช้ประโยชน์จากมันได้

การอ้างอิงที่อาจเป็นไปได้สองอย่างที่อาจหรืออาจไม่มีค่า

McMahan, HB และ M. Streeter (2012),
ปัญหาเปิด: ขอบเขตที่ดีกว่าสำหรับการถดถอยโลจิสติกออนไลน์ ,
JMLR: การประชุมเชิงปฏิบัติการและการประชุมดำเนินการ , ปีที่ 23, 44.1–44.3

Penny, WD และ SJ Roberts (1999),
การถดถอยโลจิสติกแบบไดนามิก ,
การดำเนินการ IJCNN '99


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

2
สิ่งสำคัญคือต้องทราบว่าการมีสถิติที่เพียงพอไม่ได้หมายความว่าคุณมีทางออกสำหรับสมการ
Glen_b -Reinstate Monica

8

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

รูปแบบแรกที่จะดูคือการตั้งค่าการเรียนรู้ออนไลน์ ในการตั้งค่านี้โลกจะประกาศค่าของ x เป็นครั้งแรกอัลกอริทึมของคุณทำนายค่าสำหรับ y โลกจะประกาศค่าที่แท้จริง y 'และอัลกอริทึมของคุณจะสูญเสีย l (y, y') สำหรับการตั้งค่านี้เป็นที่ทราบกันดีว่าอัลกอริธึมแบบง่าย (การไล่ระดับสีและการไล่ระดับสีแบบเอ็กซ์โพเนนเนเชียล ซึ่งหมายความว่าเมื่อคุณเห็นตัวอย่างเพิ่มเติมจำนวนข้อผิดพลาดพิเศษที่อัลกอริทึมของคุณทำ (เมื่อเปรียบเทียบกับตัวทำนายเชิงเส้นที่ดีที่สุดที่เป็นไปได้) จะไม่เติบโตไปพร้อมกับจำนวนตัวอย่าง วิธีนี้ใช้ได้แม้ในการตั้งค่าที่ไม่เหมาะสม มีบทความที่ดีอธิบายกลยุทธ์หนึ่งที่เป็นที่นิยมเพื่อพิสูจน์ขอบเขตความเสียใจเหล่านี้ บันทึกการบรรยายของ Shai Shalev-Schwartz นั้นมีประโยชน์เช่นกัน

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


6

คำตอบอื่น ๆ ได้ชี้ไปที่โลกแห่งการเรียนรู้ของเครื่องจักรและเป็นที่เดียวที่มีการแก้ไขปัญหา

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

การอัพเดตการแยกตัวประกอบ QR และปัญหากำลังสองน้อยที่สุดโดย Hammerling และ Lucas


5

yเสื้อ=βเสื้อxเสื้อ+εเสื้อ,βเสื้อ=βเสื้อ-1+ηเสื้อ
βเสื้อ=βเสื้อ-1

yt=logit(βtxt+εt),βt=βt1+ηt

2

นี่คือการเพิ่มคำตอบ @chmike

วิธีการนี้ดูเหมือนจะคล้ายกับอัลกอริทึมออนไลน์ของ BP Welford สำหรับส่วนเบี่ยงเบนมาตรฐานซึ่งคำนวณค่าเฉลี่ย จอห์นคุกให้คำอธิบายที่ดีที่นี่ Tony Finch ในปี 2009 มีวิธีการสำหรับค่าเฉลี่ยเคลื่อนที่ชี้แจงและส่วนเบี่ยงเบนมาตรฐาน:

diff := x – mean 
incr := alpha * diff 
mean := mean + incr 
variance := (1 - alpha) * (variance + diff * incr)

ดูที่คำตอบที่โพสต์ก่อนหน้านี้และขยายเพื่อรวมหน้าต่างการเคลื่อนไหวแบบเอ็กซ์โพเนนเชียล:

init(): 
    meanX = 0, meanY = 0, varX = 0, covXY = 0, n = 0,
    meanXY = 0, varY = 0, desiredAlpha=0.01 #additional variables for correlation

update(x,y):
    n += 1
    alpha=max(desiredAlpha,1/n) #to handle initial conditions

    dx = x - meanX
    dy = y - meanY
    dxy = (x*y) - meanXY #needed for cor

    varX += ((1-alpha)*dx*dx - varX)*alpha
    varY += ((1-alpha)*dy*dy - varY)*alpha #needed for corXY
    covXY += ((1-alpha)*dx*dy - covXY)*alpha

    #alternate method: varX = (1-alpha)*(varX+dx*dx*alpha)
    #alternate method: varY = (1-alpha)*(varY+dy*dy*alpha) #needed for corXY
    #alternate method: covXY = (1-alpha)*(covXY+dx*dy*alpha)

    meanX += dx * alpha
    meanY += dy * alpha
    meanXY += dxy  * alpha

getA(): return covXY/varX
getB(): return meanY - getA()*meanX
corXY(): return (meanXY - meanX * meanY) / ( sqrt(varX) * sqrt(varY) )

ใน "รหัส" ด้านบนสามารถตั้งค่า Alpha ที่ต้องการเป็น 0 และหากเป็นเช่นนั้นรหัสจะทำงานโดยไม่มีการยกน้ำหนักแบบเอ็กซ์โปเนนเชียล คุณสามารถแนะนำให้ตั้งค่า Alpha ที่ต้องการเป็น 1 / ต้องการ WindowSize ตามที่Modified_moving_averageแนะนำสำหรับขนาดหน้าต่างที่เคลื่อนไหว

คำถามด้านข้าง: จากการคำนวณทางเลือกข้างต้นความคิดเห็นใดที่ดีกว่าจากมุมมองที่มีความแม่นยำ

อ้างอิง:

chmike (2013) https://stats.stackexchange.com/a/79845/70282

Cook, John (nd) คำนวณความแปรปรวนของการทำงานอย่างแม่นยำhttp://www.johndcook.com/blog/standard_deviation/

นกกระจอกโทนี่ (2009) การคำนวณที่เพิ่มขึ้นของค่าเฉลี่ยถ่วงน้ำหนักและความแปรปรวน https://fanf2.user.srcf.net/hermes/doc/antiforgery/stats.pdf

วิกิพีเดีย (nd) อัลกอริทึมออนไลน์ของ Welford https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Online_algorithm

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