Menu
CoddyTech

מדגם או אוכלוסייה?

חלק מהיחידה סטטיסטיקה ללמידת מכונה במסלול ה-Machine Learning של Coddy. שיעור 4 מתוך 64.

כוורן שקל את הדבש מ־5 כוורות, בק״ג. NumPy ו־pandas לא מסכימים לגבי סטיית התקן:

values = [18, 22, 25, 19, 26]
print(np.round(np.std(values), 2))
print(np.round(pd.Series(values).std(), 2))

זה מדפיס:

3.16
3.54

שניהם מחברים את הסטיות בריבוע, ואז מחלקים:

הסטיות בריבוע של 5 כוורות, 16, 0, 9, 9 ו-16, מסתכמות ב-50. חץ אחד מוביל אל np.std: 50 / 5 = 10, סטיית תקן 3.16, נוסחת האוכלוסייה. החץ השני מוביל אל pandas: 50 / 4 = 12.5, סטיית תקן 3.54, נוסחת המדגם

חלוקה ב־n מתאימה לאוכלוסייה, שבה נמצאים כל הערכים. מדגם נצמד לממוצע שלו, ולכן הפיזור שלו נראה קטן; n - 1 מפצה על כך.

ddof=1 גורם ל-NumPy להשתמש בנוסחה למדגם: np.std(a, ddof=1) תואמת ל-pandas. נתוני מודל הם מדגם: אי־התאמה בסטיית התקן בין כלים נובעת מ-ddof, ולא מבאג.

challenge icon

אתגר

קל

ביולוג קיבל שתי סטיות תקן שונות עבור מוטות הכנפיים של כמה עטלפים, בס"מ. הקוד ההתחלתי קורא אותם למערך spans ול־Series column; הבדיקה שלו מדפיסה False.

  1. העטלפים הם מדגם: תקן את שורת NumPy כך ששני הכלים יחזירו את סטיית התקן של המדגם.
  2. מתחתיה, הדפס בכמה סטיית התקן שברירת המחדל של NumPy, np.std(spans), נמוכה מ־column.std(), בדיוק של 2 ספרות אחרי הנקודה העשרונית.

עבור מוטות הכנפיים 33, 27, 30, 35 ו־29:

Sample std: 3.19 cm, tools agree: True
Dividing by n underestimated it by 0.34 cm

נסו בעצמכם

import numpy as np
import pandas as pd

n = int(input())
values = []
for i in range(n):
    values.append(int(input()))
spans = np.array(values)
column = pd.Series(values)

# הבדיקה הזו מדפיסה False: תקנו את השורה של NumPy כך ששני הכלים יחזירו את סטיית התקן של המדגם
numpy_std = np.round(np.std(spans), 2)
pandas_std = np.round(column.std(), 2)
print(f"Sample std: {numpy_std} cm, tools agree: {numpy_std == pandas_std}")

# כתבו את הקוד שלכם למטה
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה סטטיסטיקה ללמידת מכונה

תרגלו בעצמכם: קומפיילר Python אונליין