อัลกอริทึมในการตรวจสอบปริมาณแบบไดนามิก


24

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


สำหรับความคิดบางอย่าง (ในบริบทของการประเมินมีเดีย) ที่เห็นด้ายที่stats.stackexchange.com/q/346/919
whuber

3
คำถามนี้เป็นคำถามcrosspostedบน math.SE.
พระคาร์ดินัล

คำตอบ:


16

อัลกอริทึม P2 เป็นการค้นหาที่ดี มันทำงานได้โดยการประมาณหลายของ quantile, update พวกเขาเป็นระยะและใช้กำลังสอง (ไม่เชิงเส้นไม่ลูกบาศก์) การประมาณค่าเพื่อ quantile ผู้เขียนอ้างว่าการแก้ไขกำลังสองทำงานได้ดีกว่าในหางกว่าการแก้ไขเชิงเส้นและลูกบาศก์จะได้รับจุกจิกและยากเกินไป

คุณไม่ได้ระบุอย่างแน่ชัดว่าวิธีการนี้จะล้มเหลวอย่างไรสำหรับข้อมูล "แบบหนา" แต่ก็ง่ายที่จะคาดเดา: การประมาณปริมาณสูงสุดสำหรับการแจกแจงแบบหนาจะไม่เสถียรจนกว่าจะมีการรวบรวมข้อมูลจำนวนมาก แต่นี่จะเป็นปัญหา (ในระดับที่น้อยกว่า) แม้ว่าคุณจะเก็บข้อมูลทั้งหมดดังนั้นอย่าคาดหวังปาฏิหาริย์!

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

โดยเฉพาะฉันกำลังเสนอโครงสร้างข้อมูลที่จะรักษาข้อมูลบางส่วนเกี่ยวกับลำดับของค่าข้อมูลx_n ที่นี่เป็นรายการที่เชื่อมโยงn x 1 , x 2 , , x n y(k,Y,n)nx1,x2,...,xnY

Y=(x[k+1](n)x[k+2](n)x[k+ม.](n)).

ในสัญลักษณ์นี้แสดงถึงเล็กที่สุดของค่าอ่านได้ เป็นค่าคงที่ขนาดของบัฟเฟอร์{y} i th n x m yx[ผม](n)ผมTHn xม.Y

อัลกอริทึมเริ่มต้นด้วยการเติมด้วยค่าข้อมูลแรกที่พบและวางไว้ในลำดับที่เรียงน้อยที่สุดไปหามากที่สุด ให้เป็นปริมาณที่จะประมาณ เช่น = 0.99 เมื่ออ่านมีการกระทำที่เป็นไปได้สามประการ: m q q x n + 1Yม.QQxn+1

  • หาก , เพิ่มk kxn+1<x[k+1](n)k

  • หากไม่ทำอะไรเลยxn+1>x[k+ม.](n)

  • มิฉะนั้นแทรก เข้า{y} yxn+1Y

ในกรณีใด ๆ เพิ่มขึ้นnn

แทรกทำให้ขั้นตอนการเข้าเพื่อเรียงลำดับแล้วจะช่วยลดค่าใดค่าหนึ่งที่รุนแรงใน : y yxn+1YY

  • ถ้าให้ลบจากและเพิ่ม ;x ( n ) [ k + 1 ] y kk+ม./2<nQx[k+1](n)Yk

  • มิฉะนั้นลบจาก{y}x[k+ม.](n)Y

ให้มีขนาดใหญ่เพียงพอขั้นตอนนี้จะกำหนดควอนตัมจริงของการแจกแจงที่มีความน่าจะเป็นสูง ในขั้นตอนใด ๆสามารถประมาณได้ตามปกติในแง่ของและ ซึ่งมีแนวโน้มที่จะอยู่ใน{y} (ฉันเชื่อว่าต้องปรับขนาดให้เหมือนสแควร์รูทของจำนวนข้อมูลสูงสุด ( ) แต่ฉันไม่ได้ทำการวิเคราะห์อย่างเข้มงวดเพื่อพิสูจน์ว่า) ในทุก ๆ วิธีอัลกอริทึมจะตรวจสอบว่ามันประสบความสำเร็จหรือไม่ เปรียบเทียบและกับ )ม.nx[Qn](n)x[Qn](n)Yม.ยังไม่มีข้อความk/n(k+ม.)/nQ

การทดสอบที่มีมากถึง 100,000 ค่าโดยใช้และ (กรณีที่ยากที่สุด) บ่งชี้ว่าอัลกอริทึมนี้มีอัตราความสำเร็จ 99.5% ในการรับค่าที่ถูกต้องของ rfloor]} สำหรับสตรีมที่มีค่านั่นจะต้องใช้บัฟเฟอร์เพียงสองล้าน (แต่สามหรือสี่ล้านจะเป็นตัวเลือกที่ดีกว่า) ใช้เรียงรายการที่เชื่อมโยงเป็นทวีคูณสำหรับบัฟเฟอร์ต้อง =ความพยายามในขณะที่การระบุและการลบสูงสุดหรือต่ำสุดเป็นการดำเนินงาน โดยทั่วไปแล้วการแทรกที่มีราคาค่อนข้างสูงจะต้องทำเฉพาะม.=2ยังไม่มีข้อความx ( n ) [ Q n] N = 10 12 O ( เข้าสู่ระบบ( Q=0.5x[Qn](n)ยังไม่มีข้อความ=1012O(เข้าสู่ระบบ(ยังไม่มีข้อความ))O(เข้าสู่ระบบ(ยังไม่มีข้อความ))O(1)O(ยังไม่มีข้อความ)ครั้ง ดังนั้นต้นทุนการคำนวณของอัลกอริทึมนี้คือในเวลาและในที่เก็บข้อมูลO(ยังไม่มีข้อความ+ยังไม่มีข้อความเข้าสู่ระบบ(ยังไม่มีข้อความ))=O(ยังไม่มีข้อความ)O(N)


นี่เป็นงานเพิ่มเติมของอัลกอริทึม P2 [ลิงค์] sim.sagepub.com/content/49/4/159.abstract ที่เก็บข้อมูลยังคงมากเกินไปสำหรับแอปพลิเคชันของฉันซึ่งทำงานบนเซ็นเซอร์ขนาดเล็กที่มี RAM ทั้งหมด 10K ฉันสามารถกินได้ไม่กี่ร้อยไบต์เพื่อการประมาณเชิงปริมาณเท่านั้น
sinoTrinity

@whuber ที่จริงฉันใช้ P2 แบบขยายและทดสอบด้วยตัวอย่างที่สร้างขึ้นจากการแจกแจงต่าง ๆ เช่นเครื่องแบบและเลขชี้กำลังซึ่งมันใช้งานได้ดี แต่เมื่อฉันใช้มันกับข้อมูลจากแอปพลิเคชันของฉันซึ่งไม่ทราบการกระจายบางครั้งมันก็ไม่สามารถรวมกันและทำให้เกิดข้อผิดพลาดสัมพัทธ์ (abs (ประมาณ - จริง) / จริง) สูงถึง 300%
sinoTrinity

2
@sino คุณภาพของอัลกอริทึมเปรียบเทียบกับการใช้ข้อมูลทั้งหมดไม่ควรขึ้นอยู่กับความหนักเบาของก้อย วิธีที่เป็นธรรมในการวัดข้อผิดพลาดคือ: ให้เป็น cdf เชิงประจักษ์ สำหรับการประมาณของเปอร์เซ็นไทล์ความแตกต่างระหว่างและคืออะไร? ถ้าเป็นไปตามลำดับที่คุณทำได้ดีมาก กล่าวอีกนัยหนึ่งว่าอัลกอริธึม P2 คืนกลับมาเป็นข้อมูลอะไร? Q Q F ( Q ) F ( Q ) 1 / nFq^qF(q^)F(q)1/n
whuber

คุณพูดถูก ฉันเพิ่งวัด F (qˆ) และ F (q) สำหรับกรณีที่ฉันกล่าวถึงด้วยข้อผิดพลาดสัมพัทธ์ถึง 300% สำหรับ q ของ 0.7, qˆ เกือบ 0.7 ทำให้เกิดข้อผิดพลาดเล็กน้อย อย่างไรก็ตามสำหรับ q ของ 0.9 ดูเหมือนว่าจะอยู่ที่ประมาณ 0.95 ฉันคิดว่านั่นเป็นสาเหตุที่ฉันมีข้อผิดพลาดมากถึง 300% ความคิดใดที่ว่าทำไมมันถึง 0.95 ไม่ใช่ 0.9? BTW ฉันสามารถโพสต์รูปที่นี่และฉันจะโพสต์สูตรทางคณิตศาสตร์ตามที่คุณได้อย่างไร
sinoTrinity

2
@ คนที่ฉันค่อนข้างมั่นใจว่าการใช้งานของฉันเป็นไปตาม P2 ขยาย 0.9 ยังคงไปที่ 0.95 หรือใหญ่กว่าเมื่อฉันประเมินควอนไทล์ 0.8, 0.85, 0.9, 0.95 พร้อมกัน อย่างไรก็ตาม 0.9 ใกล้เคียงกับ 0.9 หากมีการติดตามควอนไทม์0.8, 0.85, 0.9, 0.95 และ1.0ในเวลาเดียวกัน
sinoTrinity

5

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

แทนที่จะติดตามปริมาณที่ , , ,และตามที่อัลกอริทึม P2 ดั้งเดิมแนะนำคุณสามารถติดตามจำนวนมากขึ้นได้ (แต่ยังคงเป็นจำนวนคงที่) ดูเหมือนว่าอัลกอริทึมจะช่วยให้มันตรงไปตรงมามาก; สิ่งที่คุณต้องทำคือคำนวณ "bucket" ที่ถูกต้องสำหรับคะแนนที่เข้ามาและวิธีที่ถูกต้องในการอัพเดทควอไทล์p / 2 p ( 1 + p ) / 2 10p/2p(1+p)/21

สมมติว่าคุณติดตามคะแนน คุณสามารถลองติดตามคที่ , , , , , , , , (เลือกจุดเท่ากันในระหว่างและและระหว่างและ ) หรือแม้กระทั่งใช้ Chebyshev โหนดของรูปแบบและ{22}) ถ้า0 P / 12 ... P 11 / 12 พีพี+ ( 1 - P ) / 12 ... P + 11 ( 1 - P ) / 12 1 0 พีพี1 22 P / 2 ( 1 + cos ( 2 ฉัน- 1 ) π250p/12p11/12pp+(1p)/12p+11(1p)/1210พีพี122 p+(1-p)/2(1+cos(2i-1)πพี/2(1+cos(2ผม-1)π22)p01พี+(1-พี)/2(1+cos(2ผม-1)π22)พีอยู่ใกล้กับหรือคุณสามารถลองวางจุดที่น้อยลงบนด้านที่มีมวลความน่าจะเป็นน้อยลงและอีกด้านหนึ่ง01

หากคุณตัดสินใจที่จะติดตามเรื่องนี้ฉัน (และคนอื่น ๆ ในเว็บไซต์นี้) จะสนใจที่จะรู้ว่ามันใช้งานได้หรือไม่


+1 ฉันคิดว่านี่เป็นแนวคิดที่ยอดเยี่ยมสำหรับข้อ จำกัด ของ OP สิ่งที่ทุกคนคาดหวังคือการประมาณดังนั้นเคล็ดลับคือการเลือกถังขยะที่มีโอกาสสูงที่จะแคบและบรรจุควอนไทล์ที่ต้องการ
whuber

3

กด et al., สูตรตัวเลขตัวเลข 8.5.2 "การประมาณค่าแบบพาสครั้งเดียวของควอไลเซอร์โดยพลการ" p. 435 ให้คลาส c ++ IQAgent ซึ่งอัปเดต cdf โดยประมาณเป็นเส้นตรง


books.google.co.th/…สำหรับรุ่นที่ไม่ต้องใช้ Flash
ZachB

2

สิ่งนี้สามารถปรับได้จากอัลกอริธึมที่กำหนดค่ามัธยฐานของชุดข้อมูลออนไลน์ สำหรับข้อมูลเพิ่มเติมดูโพสต์สแต็คโอเวอร์โฟลว์นี้ - /programming/1387497/find-median-value-from-a-growing-set


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

2

ฉันจะดูการถดถอยเชิงปริมาณ คุณสามารถใช้มันเพื่อกำหนดการประมาณพารามิเตอร์ของสิ่งใดก็ตามที่คุณต้องการดู มันไม่มีข้อสันนิษฐานเกี่ยวกับความเป็นมาตรฐานดังนั้นจึงสามารถจัดการ heteroskedasticity ได้ค่อนข้างดีและสามารถใช้เป็นหน้าต่างแบบหมุนได้ มันคือการถดถอยแบบ L1-Norm ที่ถูกลงโทษดังนั้นจึงไม่เข้มข้นเกินไปและมีแพ็คเกจ R, SAS และ SPSS ที่น่าสนใจพร้อมด้วยการใช้งาน MATLAB นี่คือแพ็คเกจหลักและแพ็คเกจRสำหรับข้อมูลเพิ่มเติม

แก้ไข:

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


1

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

ดูกระดาษของ Bell Labs "การประมาณควอนไทล์แบบเพิ่มหน่วยสำหรับการติดตามขนาดใหญ่" ( ftp://ftp.cse.buffalo.edu/users/azhang/disc/disc01/cd1/out/papers/kdd/p516-chen.pdf )


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