พอดีกับข้อมูลเชิงเส้น


18

วิธีที่มีประสิทธิภาพในการใส่ข้อมูลเชิงเส้น แต่ไม่มีเสียงรบกวนคืออะไร

ฉันกำลังวัดสัญญาณซึ่งประกอบด้วยส่วนต่าง ๆ เกือบเป็นเส้น ฉันต้องการใส่ข้อมูลลงไปหลายเส้นเพื่อตรวจจับการเปลี่ยนผ่านโดยอัตโนมัติ

ชุดข้อมูลประกอบด้วยสองสามพันคะแนนโดยมี 1-10 เซกเมนต์และฉันรู้จำนวนเซกเมนต์

นี่คือตัวอย่างของสิ่งที่ฉันต้องการทำโดยอัตโนมัติ

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


ฉันไม่คิดว่าคำถามนี้สามารถตอบได้อย่างสมเหตุสมผลถ้าคุณไม่บอกเราว่าคุณต้องการทราบตำแหน่งของจุดแตกหักอย่างถูกต้องอะไรคือสิ่งที่คุณคาดเดาว่ามีความยาวสั้นที่สุดของส่วนเชิงเส้นและมีตัวอย่างจำนวนเท่าไร ภูมิภาคการเปลี่ยนแปลง หากเลเบลแกนแนวนอนในรูปของคุณเป็นตัวเลขตัวอย่างดังนั้นด้วยการเปลี่ยนสองครั้งในช่วงจากถึงx [ 0 ]งานจะยากกว่าถ้าส่วนของเส้นตรงมีระยะเวลานานกว่า (ใน ตัวอย่าง) x[-5]x[0]
Dilip Sarwate

@DilipSarwate ฉันอัปเดตคำถามด้วยข้อกำหนด (btw the xaxis เป็นสนามแม่เหล็กในเทสลา)
P3trus

คุณสามารถลองใช้กล่องเครื่องมือนี้หากคุณกำลังทำงานกับกล่องเครื่องมือปรับเส้นโค้ง
Rhei

คำตอบ:


12

ฉันลองสองวิธีอย่างไร้เดียงสา (ใช้เพียง 3 ส่วน) แน่นอนว่าจะมีวิธีการที่นักเล่นที่นั่น

    RANSAC ควรจะเป็นกลไกการกระชับที่แข็งแกร่ง มันง่ายที่จะหยุดอัลกอริทึมหลังจากมีหลายเซ็กเมนต์ อย่างไรก็ตามอาจเป็นเรื่องยากที่จะบังคับใช้ความต่อเนื่องระหว่างเซ็กเมนต์ - อย่างที่ต้องการในแอปพลิเคชันของคุณ - อย่างน้อยก็ด้วยการใช้งานที่ง่าย ในฐานะที่เป็นหลักฐานการแนวคิดผมสร้างภาพจากจุดข้อมูลเพื่อที่ฉันจะใช้เครื่องมือ RANSAC ที่มีอยู่ใน , ฟังก์ชั่นการตรวจสอบสายของ Mathematicaผมม.aก.อีLผมnอีs

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

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

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


ดูเหมือนคำตอบที่ดี ขอบคุณสำหรับการมีส่วนร่วม
Jason R

7

ฉันไม่ได้อ้างว่าวิธีการต่อไปนี้มีประสิทธิภาพ แต่อาจได้ผลสำหรับคุณ ด้วยคะแนนพันและอาจแบ่งเซ็กเมนต์เส้นตรงประมาณสิบหรือมากกว่าให้ดำเนินการดังนี้x[n]

  • ประมวลผลคะแนนเพื่อสร้างบิตอาร์เรย์y [ n ]ดังต่อไปนี้ Y [ n ] = { 1 , ถ้า| ( x [ n + 1 ] - x [ n ] ) - ( x [ n ] - x [ n - 1 ] ) | < ϵ , 0 , มิฉะนั้น εx[n]Y[n]

    Y[n]={1,ถ้า |(x[n+1]-x[n])-(x[n]-x[n-1])|<ε,0,มิฉะนั้น.
    ที่นี่εเป็นจำนวนน้อยที่เลือกเพื่อให้เหมาะกับความคิดของคุณว่าใกล้กับเส้นตรงมากแค่ไหนที่คุณต้องการคะแนนเพื่อโค่นไป เกณฑ์จะได้รับการยอมรับจาก cognoscenti ว่าต้องการให้เส้นตรงทะลุผ่าน ( n - 1 , x [ n - 1 ] )และ ( n , x [ n ] )x[n-1],x[n],x[n+1](n-1,x[n-1])(n,x[n])มีเกือบลาดเช่นเดียวกับเส้นตรงผ่านและ( n + 1 , x [ n + 1 ] )(n,x[n])(n+1,x[n+1])
  • ถ้าเป็นอาร์เรย์ที่มีการวิ่งยาวสิบหรือนานเป็น1วินาทีคั่นด้วยการวิ่ง0วินาทีด้วยการจรจัดเป็นครั้งคราว1วินาทีที่นี่และที่นั่นเพื่อทำลายความงามผ่อนคลายคุณอยู่ในเส้นทางที่ถูกต้อง อื่น ๆ ถ้ามีการทำงานน้อยเกินไปหรือมากเกินไปวิ่ง1วินาทีทำซ้ำขั้นตอนก่อนหน้านี้ที่มีความแตกต่างกันεY[n]1011ε

  • Y[n]x[3]x[88]x[94]x[120]x[129]และอื่น ๆ ขยาย A ไปทางขวาและ B ไปทางซ้ายเพื่อดูว่าพวกมันตัดกันที่ไหน ขยาย B ไปทางขวาและ C ไปทางซ้ายเพื่อดูว่าพวกมันตัดกันที่ไหน, ขอแสดงความยินดีตอนนี้คุณมีโมเดลเชิงเส้นเชิงเส้นและต่อเนื่องสำหรับข้อมูลของคุณ


ขโมยคำตอบของฉันทั้งหมด! =)
Phonon

ความคิดที่น่าสนใจ แต่น่าเศร้าเนื่องจากเสียงรบกวนจากสัญญาณฉันไม่ได้ผลลัพธ์ที่ดี
P3trus

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

4

(ปีต่อมา) ฟังก์ชั่นเชิงเส้นเป็นเส้นแบ่งของระดับ 1 ซึ่งส่วนใหญ่สามารถบอกได้ว่าจะทำอย่างไร scipy.interpolate.UnivariateSpline ตัวอย่างเช่นสามารถทำงานด้วยk=1 และพารามิเตอร์เรียบsซึ่งคุณจะต้องเล่นกับ - ดู SciPy-การแก้ไขที่มี univariate-เส้นโค้ง
ใน Matlab ดู วิธีที่จะเลือก-นอต

เพิ่ม: การหานอตที่ดีที่สุดไม่ใช่เรื่องง่ายเพราะอาจมีออพติม่าในท้องถิ่นมากมาย คุณให้ UnivariateSpline แทนเป้าหมายเป็นsผลรวมของข้อผิดพลาด ^ 2 และให้มันกำหนดจำนวนนอต หลังจากการฟิตget_residual()จะได้รับผลรวมของข้อผิดพลาดจริง ^ 2 และget_knots()ปม การเปลี่ยนแปลงเล็กน้อยในsอาจมีการเปลี่ยนแปลงนอตมากโดยเฉพาะอย่างยิ่งในเสียงรบกวนสูง - ymmv
พล็อตแสดงให้เห็นถึงความเหมาะสมกับฟังก์ชั่นเชิงเส้นแบบสุ่ม + เสียงรบกวนสำหรับต่างๆsเสียงต่างๆ

สำหรับค่าคงที่แบบทีละส่วนให้ดู การตรวจจับขั้นตอนการตรวจสอบขั้นตอนสามารถใช้สำหรับ pw เชิงเส้นได้หรือไม่? ไม่ทราบ เริ่มต้นด้วยการแยกความแตกต่างของข้อมูลที่มีเสียงดังจะเพิ่มเสียงรบกวนผิด

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


เพิ่มมีนาคม 2014: การเขียนโปรแกรมแบบไดนามิก เป็นวิธีการทั่วไปสำหรับปัญหาเกี่ยวกับปัญหาย่อยที่ซ้อนกันเช่นนี้:

optimal k lines
    = optimal k - 1 lines up to some x
    + cost of the last line x to the end
over x  (all x in theory, nearby x in practice)

การเขียนโปรแกรมแบบไดนามิกนั้นฉลาดมาก แต่มันสามารถเอาชนะแรงเดรัจฉาน + การวิเคราะห์พฤติกรรมสำหรับงานนี้ได้หรือไม่?
ดูบันทึกย่อของหลักสูตรที่ยอดเยี่ยมโดย Erik Demaine ภายใต้ MIT 6.006 แนะนำขั้นตอนวิธี
และการถดถอยเชิงเส้นแบบแบ่งส่วนของ Google รวมถึงกลุ่ม
อาการของ John Henry


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


ปัญหาอย่างน้อยก็คือ scipy คือตำแหน่งของนอต scipy ใช้นอตที่มีระยะห่างเท่ากัน
P3trus

@ P3trus ใช่สำหรับการเริ่มต้น แต่จากนั้นพวกเขาสามารถย้าย - ดูพล็อต อย่างไรก็ตามเป้าหมายข้อผิดพลาดทั้งหมดไม่ใช่ปม
เดนิส

@ P3trus คุณเคยลองใช้วิธีการหลายตัวแปรการถดถอยที่เลือกจุดพักแบบซ้ำ ๆ โดยอัตโนมัติหรือไม่? cs.rtu.lv/jekabsons/regression.html
Atul Ingle

@Atul Ingle การเลือกเบรกพอยต์ / ปม afaik เป็นปัญหาเดียวกันจากสิ่งที่ช่างฟิตอิสระ หากคุณรู้จักอัลกอริธึมที่แตกต่างกันสำหรับสิ่งนั้นจากคน R / การถดถอยคุณสามารถโพสต์ลิงค์ได้ไหม
ปฏิเสธ

กำลังมองหาแพ็คเกจใน R / Matlab ที่ทำเส้นโค้งการถดถอยแบบปรับตัวหรือไม่? ที่นี่: cran.r-project.org/web/packages/earth/index.html cran.r-project.org/web/packages/mda/index.htmlและ ARESLab ใน Matlab ที่ฉันโพสต์ลิงก์ไว้แล้ว
Atul Ingle

0

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


อนุพันธ์อาจมีเสียงดัง ฉันไม่คิดว่าฉันอยากจะแนะนำ
robert bristow-johnson

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