ฉันจะลดจำนวนจุดข้อมูลในชุดข้อมูลได้อย่างไร


11

ฉันไม่ได้เรียนสถิติมานานกว่า 10 ปี (แล้วก็เป็นหลักสูตรพื้นฐาน) ดังนั้นคำถามของฉันอาจจะยากที่จะเข้าใจ

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

บ่อยครั้งที่มีจุดข้อมูลหลายพันจุด แต่ฉันอาจต้องการเพียงไม่กี่ร้อยเท่านั้น ดังนั้นคำถามของฉันคือฉันจะลดจำนวนจุดข้อมูลอย่างแม่นยำได้อย่างไร

กระบวนการนี้เรียกว่าอะไร? (ดังนั้นฉันสามารถ google มัน) มีอัลกอริทึมที่ต้องการ (ฉันจะใช้มันใน C #)

หวังว่าคุณจะได้เบาะแส ขออภัยสำหรับคำศัพท์ที่ไม่เหมาะสม


แก้ไข: รายละเอียดเพิ่มเติมมาที่นี่:

ข้อมูลดิบที่ฉันได้รับคือข้อมูลอัตราการเต้นของหัวใจและในรูปของจำนวนมิลลิวินาทีนับตั้งแต่จังหวะสุดท้าย ก่อนทำการพล็อตข้อมูลฉันคำนวณจำนวนมิลลิวินาทีจากตัวอย่างแรกและ bpm (จำนวนครั้งต่อนาที) ที่จุดข้อมูลแต่ละจุด (60000 / timesincelastbeat)

ฉันต้องการที่จะเห็นภาพข้อมูลเช่นพล็อตมันในกราฟเส้น ฉันต้องการลดจำนวนคะแนนในกราฟจากหลายพันเป็นหลายร้อย

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


ฉันลืมสิ่งนี้: จุดตามแกน x มาพร้อมกับระยะห่างที่แตกต่างกัน

ฉันไม่แน่ใจว่าฉันเข้าใจ คุณไม่มีแกน y ใช่ไหม

ขอโทษด้วย ฉันพิมพ์ผิด ตอนนี้ฉันเปลี่ยนมันด้านบน

ฉันคิดว่าคุณต้องให้ข้อมูลเพิ่มเติมอีกเล็กน้อย ตัวอย่างเช่นฉันยังคงมองไม่เห็นกราฟ เป้าหมายของคุณคืออะไร

โอเคขอโทษ ฉันได้เพิ่มรายละเอียดเพิ่มเติมด้านบน

คำตอบ:


10

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

ผอมบางตัวอย่างของคุณ

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

สมมติว่าคุณมีN points และคุณต้องการเพียงแค่nเท่านั้น แล้วสร้างnตัวเลขสุ่มจากเครื่องแบบเนื่องU (0, N-1)การกระจาย นี่คือจุดที่คุณใช้

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

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

1pexp(λt)

ที่ไหน λ เป็นจำนวนบวกและ tเป็นเวลาตั้งแต่การสังเกตครั้งสุดท้าย หากเวลาระหว่างจุดสองจุดใหญ่เกินไปtความน่าจะเป็นที่จะยอมรับจุดหนึ่ง ในทางกลับกันหากจุดสองจุดอยู่ใกล้กันความน่าจะเป็นที่จะรับจุดนั้น1p.

คุณจะต้องทดสอบด้วยค่าของ λ และ พี.

การขจัดอุปสรรค

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

ควรมีไลบรารีC #สำหรับประเภทนี้

ข้อสรุป

บางถ้าจำเป็นแล้วเรียบ


น่าสนใจ แต่ฉันต้องการให้สามารถคาดเดาได้นั่นคือเพื่อให้ได้ผลลัพธ์เดียวกันทุกครั้งที่ดูข้อมูล

ในกรณีดังกล่าวให้สร้างดัชนีnของคะแนนที่คุณเลือกและจัดเก็บดัชนีเหล่านั้น
csgillespie

หรือเก็บเมล็ดไว้ที่ RNG ก่อนสุ่มตัวอย่าง
Dirk Eddelbuettel

การแก้ปัญหาของเดิร์คเกี่ยวกับเมล็ดน่าจะเป็นทางเลือกที่ดีกว่า
csgillespie

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

9

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

เป้าหมายของคุณคือการสร้างภาพข้อมูลหรือไม่? ในกรณีนั้นคุณอาจต้องการเก็บข้อมูลดิบพล็อตมันเป็น scattergraph จากนั้นซ้อนทับแนวโน้มกลางบางอย่าง (เส้นถดถอย, เส้นโค้ง, อะไรก็ตาม) เพื่อสื่อสารสิ่งที่ข้อความ takehome ควรจะเป็น

หรือเป็นเป้าหมายของคุณที่จะสรุปผลตัวเลขด้วยวิธีใด? ในกรณีนี้คุณอาจต้องการอธิบายปัญหาของคุณอย่างละเอียดยิ่งขึ้น!


ใช่การสร้างภาพข้อมูลเป็นสิ่งที่ฉันต้องการ ฉันได้เพิ่มข้อมูลเพิ่มเติมในคำถาม

การทำพล็อตข้อมูลดิบด้วยเส้นที่ราบเรียบ
JoFrhwld

การทำแผนที่ข้อมูลดิบด้วยเส้นที่ปรับให้เรียบเป็นลำดับที่สาม --- คุณอาจต้องการวางแผนการเปลี่ยนแปลงใน BPM เมื่อเวลาผ่านไปเพื่อแสดงภาพแยกต่างหาก
John

5

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

หากคุณสรุปว่า 125-125-0-125-125 เป็น 100 กว่าเรื่องที่ข้อมูลบอกว่าแตกต่างจากการปรับให้เรียบของคุณ

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

d=sqrt((time1-time2)^2 + (bpm1-bpm2))ฉันจึงจะนำเสนอที่คุณคำนวณระยะทางระหว่างจุดสองจุดด้วยสูตรเช่น

คุณตั้งค่าระยะห่างต่ำสุดในโปรแกรมของคุณ จากนั้นคุณวนซ้ำข้อมูลของคุณและหลังจากทุกจุดที่คุณลบจุดต่อไปนี้ทั้งหมดที่ d มีขนาดเล็กกว่าระยะทางต่ำสุดของคุณ

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


โพสต์ที่น่าสนใจ ฉันจะดูด้วย คุณอาจจะถูกต้อง

2

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

ตัวอย่างเช่นใน R ข้อมูลนี้:

0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

มีผลลัพธ์นี้

rle(data)
Run Length Encoding
  lengths: int [1:3] 10 15 15
  values : num [1:3] 0 1 2

1

คุณไม่ได้ให้ข้อมูลที่เพียงพอ ทำไมคุณต้องการลดจุดข้อมูล วันนี้สองสามพันไม่มีอะไร

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

เป็นคำถามที่ตอบยากโดยไม่มีเหตุผลว่าทำไมคุณถึงลบข้อมูล


โอเคขอโทษ ฉันได้เพิ่มรายละเอียดเพิ่มเติมด้านบน

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