<p>numpy.cov () و numpy.var () التحيز الافتراضي غير متسقين (numpy 1.9.2)</p>

تم إنشاؤها على ٤ مايو ٢٠١٥  ·  5تعليقات  ·  مصدر: numpy/numpy

يستخدم cov () الانحياز 1 افتراضيًا.
تستخدم var () الانحياز 0 افتراضيًا.

مثل ذلك

import numpy as np

x = np.random.rand(100)

if np.isclose(np.cov([x,x])[0,0], np.var(x)):
    print("Consistent by default.")

if np.isclose(np.cov([x,x],ddof=0)[0,0], np.var(x,ddof=0))
    print("Consistent.")

سوف يطبع السطر الثاني فقط.

00 - Bug numpy.lib

التعليق الأكثر فائدة

rgommers نعم ، "عدم كسر الشفرة الصالحة" قاعدة جيدة جدًا.

ماذا عن تحذير إذا اتصلت بـ cov بدون bias أو ddof ، ثم لم تغير السلوك مطلقًا؟

ال 5 كومينتر

نعم. لا أعرف ما يمكننا فعله حيال ذلك في هذه المرحلة. من المحتمل أن تكون أفضل مناقشة لهذه المشكلة في القائمة البريدية.

أود أن أقترح أن هذا يستحق الإصلاح ، رغم أنه سيكون مؤلمًا.

أعتقد أن أفضل خيار افتراضي لكليهما هو ddof=0 ، والذي يحسب إحصائية موجزة تصف البيانات ، على عكس المقدر.

إذا أراد شخص ما مقدرًا غير متحيز بدلاً من ذلك ، فعليه أن يطلبه من خلال تقديم ddof=1 .

هذا يعني تغيير سلوك cov ، والذي أعتقد أنه يستخدم أقل من var ، لذلك هذا جيد.

كخطوة أولى ، ماذا عن إضافة تحذير مستقبلي إلى cov إذا لم يتم توفير bias ولا ddof ؟

في الوقت نفسه ، هل يمكنني اقتراح إيقاف استخدام bias ؟ مفهوم التحيز قابل للتطبيق فقط إذا كنا نفكر في التباين والتغاير كمقدرين. لكن مرة أخرى ، أعتقد أن أفضل افتراض هو التفكير في هذه الوظائف على أنها إحصائيات وصفية ما لم يُخبرنا بخلاف ذلك.

بقول نفس الشيء بطريقة مختلفة ، إذا كان ما أريده هو إحصائية وصفية بسيطة ، فمن الغريب أن أطلب مقدرًا متحيزًا.

... من cov ، والذي أعتقد أنه يستخدم أقل من var ، لذلك هذا جيد.

يبدو أن هذا صحيح (ملخص بيانات الاستخدام من هنا ):

def cov(
    m: object,
    y: object = ...,
    rowvar: Union[float, bool, int] = ...,
    bias: Union[float, int, bool] = ...,
    aweights: numpy.ndarray = ...,
):
    """
    usage.dask: 11
    usage.matplotlib: 3
    usage.pandas: 7
    usage.scipy: 21
    usage.sklearn: 24
    """

def var(
    a: object,
    axis: Union[int, None, Tuple[Union[int, None], ...]] = ...,
    out: Union[dask.dataframe.core.Scalar, dask.dataframe.core.Series] = ...,
    keepdims: bool = ...,
    dtype: Union[Literal["i8", "f8"], Type[float], None] = ...,
    ddof: int = ...,
):
    """
    usage.dask: 59
    usage.pandas: 13
    usage.scipy: 19
    usage.sklearn: 55
    usage.xarray: 31
    """

هذا يعني تغيير سلوك cov

للأسف لا أعتقد أنه يمكننا فعل ذلك. يمكننا إهمال الوظيفة وإضافة وظيفة جديدة (وهو أمر مؤلم) ، لكن لا ينبغي لنا بالتأكيد تغيير سلوك الوظيفة الحالية - فهذا من شأنه تغيير النتائج العددية بصمت ويجعل الكود الصحيح حاليًا خاطئًا. نحاول ألا نفعل ذلك أبدًا. لا يكفي FutureWarning لضمان رؤية الناس للمشكلة.

rgommers نعم ، "عدم كسر الشفرة الصالحة" قاعدة جيدة جدًا.

ماذا عن تحذير إذا اتصلت بـ cov بدون bias أو ddof ، ثم لم تغير السلوك مطلقًا؟

ماذا عن تحذير إذا اتصلت بـ cov بدون bias أو ddof ، ثم لم تغير السلوك مطلقًا؟

هذا يبدو وكأنه شيء معقول القيام به. أفضل من تقليل cov . يعد الاضطرار إلى إضافة ddof=0/1 مصدر إزعاج بسيط ولكنه يجعل الكود أكثر قابلية للفهم ، لذلك أحببت الفكرة.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

marcocaccin picture marcocaccin  ·  4تعليقات

ghost picture ghost  ·  4تعليقات

inducer picture inducer  ·  3تعليقات

manuels picture manuels  ·  3تعليقات

astrofrog picture astrofrog  ·  4تعليقات