นี่เป็นคำถามเก่า แต่ไม่มีคำตอบก่อนหน้านี้ที่กล่าวถึงปัญหาที่แท้จริงกล่าวคือความจริงที่ว่าปัญหานั้นเกิดจากคำถามนั้นเอง
ขั้นแรกหากคำนวณความน่าจะเป็นไปแล้วนั่นคือข้อมูลรวมของฮิสโตแกรมมีอยู่ในลักษณะที่ทำให้เป็นมาตรฐานดังนั้นความน่าจะเป็นควรรวมเป็น 1 อย่างเห็นได้ชัดว่าพวกเขาไม่ทำและนั่นหมายความว่ามีบางอย่างผิดปกติที่นี่ไม่ว่าจะด้วยคำศัพท์หรือกับข้อมูล หรือในลักษณะถามคำถาม
ประการที่สองความจริงที่ว่ามีการระบุป้ายกำกับ (ไม่ใช่ช่วงเวลา) โดยปกติจะหมายความว่าความน่าจะเป็นเป็นตัวแปรการตอบสนองที่เป็นหมวดหมู่และการใช้พล็อตแท่งสำหรับการพล็อตฮิสโตแกรมนั้นดีที่สุด (หรือการแฮ็กวิธีการฮิสโตแกรมของไพล็อต) คำตอบของ Shayan Shafiq ระบุรหัส
อย่างไรก็ตามโปรดดูประเด็นที่ 1 ความน่าจะเป็นเหล่านั้นไม่ถูกต้องและการใช้พล็อตแท่งในกรณีนี้เป็น "ฮิสโตแกรม" จะผิดเนื่องจากไม่ได้บอกเล่าเรื่องราวของการแจกแจงแบบไม่แปรผันด้วยเหตุผลบางประการ (บางทีคลาสอาจทับซ้อนกันและการสังเกตจะนับหลาย ครั้ง?) และไม่ควรเรียกพล็อตดังกล่าวว่าฮิสโตแกรมในกรณีนี้
ฮิสโตแกรมเป็นคำจำกัดความที่แสดงถึงการแจกแจงแบบกราฟิกของการแจกแจงของตัวแปรเดียว (ดูhttps://www.itl.nist.gov/div898/handbook/eda/section3/histogra.htm , https://en.wikipedia.org/wiki / ฮิสโตแกรม) และสร้างขึ้นโดยการวาดแท่งขนาดที่แสดงจำนวนหรือความถี่ของการสังเกตในคลาสที่เลือกของตัวแปรที่สนใจ หากตัวแปรถูกวัดในสเกลต่อเนื่องคลาสเหล่านั้นคือ bins (ช่วงเวลา) ส่วนที่สำคัญของขั้นตอนการสร้างฮิสโตแกรมคือการเลือกวิธีการจัดกลุ่ม (หรือเก็บโดยไม่จัดกลุ่ม) ประเภทของการตอบสนองสำหรับตัวแปรหมวดหมู่หรือวิธีการแบ่งโดเมนของค่าที่เป็นไปได้ออกเป็นช่วงเวลา (ที่ที่จะใส่ขอบเขตถังขยะ) เพื่อให้เกิดความต่อเนื่อง ตัวแปรประเภท การสังเกตทั้งหมดควรเป็นตัวแทนและแต่ละข้อสังเกตเพียงครั้งเดียวในพล็อต นั่นหมายความว่าผลรวมของขนาดแท่งควรเท่ากับจำนวนการสังเกตทั้งหมด (หรือพื้นที่ในกรณีที่มีความกว้างตัวแปรซึ่งเป็นวิธีที่ใช้กันน้อยกว่า) หรือถ้าฮิสโตแกรมถูกทำให้เป็นมาตรฐานความน่าจะเป็นทั้งหมดจะต้องรวมกันได้ถึง 1
หากข้อมูลนั้นเป็นรายการของ "ความน่าจะเป็น" ในการตอบสนองกล่าวคือการสังเกตคือค่าความน่าจะเป็น (ของบางสิ่ง) สำหรับแต่ละวัตถุของการศึกษาคำตอบที่ดีที่สุดคือเพียงแค่plt.hist(probability)
ใช้ตัวเลือก binning และการใช้ x-label ที่มีอยู่แล้วคือ น่าสงสัย.
จากนั้นไม่ควรใช้พล็อตแท่งเป็นฮิสโตแกรม แต่เป็นเพียงแค่
import matplotlib.pyplot as plt
probability = [0.3602150537634409, 0.42028985507246375,
0.373117033603708, 0.36813186813186816, 0.32517482517482516,
0.4175257731958763, 0.41025641025641024, 0.39408866995073893,
0.4143222506393862, 0.34, 0.391025641025641, 0.3130841121495327,
0.35398230088495575]
plt.hist(probability)
plt.show()
กับผลลัพธ์
matplotlib ในกรณีดังกล่าวมาถึงโดยค่าเริ่มต้นด้วยค่าฮิสโตแกรมต่อไปนี้
(array([1., 1., 1., 1., 1., 2., 0., 2., 0., 4.]),
array([0.31308411, 0.32380469, 0.33452526, 0.34524584, 0.35596641,
0.36668698, 0.37740756, 0.38812813, 0.39884871, 0.40956928,
0.42028986]),
<a list of 10 Patch objects>)
ผลลัพธ์คือทูเปิลของอาร์เรย์อาร์เรย์แรกมีจำนวนการสังเกตกล่าวคือสิ่งที่จะแสดงเทียบกับแกน y ของพล็อต (รวมได้ถึง 13 จำนวนการสังเกตทั้งหมด) และอาร์เรย์ที่สองคือขอบเขตช่วงเวลาสำหรับ x -แกน.
สามารถตรวจสอบได้ว่ามีระยะห่างเท่ากัน
x = plt.hist(probability)[1]
for left, right in zip(x[:-1], x[1:]):
print(left, right, right-left)
หรือตัวอย่างเช่นสำหรับ 3 bins (การตัดสินของฉันเรียกร้องให้มีการสังเกตการณ์ 13 ครั้ง) หนึ่งจะได้รับฮิสโตแกรมนี้
plt.hist(probability, bins=3)
ด้วยข้อมูลพล็อต "ด้านหลังบาร์"
ผู้เขียนคำถามจำเป็นต้องชี้แจงว่าความหมายของรายการค่า "ความน่าจะเป็น" คืออะไร "ความน่าจะเป็น" เป็นเพียงชื่อของตัวแปรการตอบสนอง (แล้วทำไมจึงมี x-label พร้อมสำหรับฮิสโตแกรมจึงไม่สมเหตุสมผล ) หรือเป็นค่ารายการที่ความน่าจะเป็นที่คำนวณได้จากข้อมูล (ความจริงที่ว่าพวกเขาไม่รวมกันถึง 1 ก็ไม่มีเหตุผล)