سؤال

كيف أقوم بتوزيع كمية صغيرة من البيانات بترتيب عشوائي في حجم أكبر بكثير من البيانات؟

على سبيل المثال، لدي عدة آلاف من أسطر البيانات "الحقيقية"، وأريد إدراج عشرات أو سطرين من بيانات التحكم بترتيب عشوائي عبر البيانات "الحقيقية".

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

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

لصياغة الأمر بطريقة أخرى، أريد إدراج بيانات التحكم في بياناتي الحقيقية دون أن يكون هناك طريقة لطرف ثالث لحساب الصفوف التي هي التحكم وأيها حقيقية.


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

  • لدي 3000 صف من البيانات "الحقيقية" (سوف يتغير هذا المقدار من تشغيل إلى تشغيل، اعتمادًا على كمية البيانات التي يمتلكها المستخدم).
  • لدي 20 صفًا من بيانات "التحكم" (مرة أخرى، سيتغير هذا اعتمادًا على عدد صفوف التحكم التي يريد المستخدم استخدامها، أي شيء من الصفر إلى الأعلى).

أريد الآن إدراج صفوف "التحكم" العشرين هذه بقسوة بعد إدراج كل 150 صفًا أو بيانات "حقيقية" (3000/20 = 150).ومع ذلك، لا أريد أن تكون دقيقة مثل ذلك لأنني لا أريد أن يتم تحديد صفوف التحكم ببساطة بناءً على موقعها في بيانات الإخراج.

ولذلك لا مانع بعض من صفوف "التحكم" التي يتم تجميعها معًا أو وجودها بعض أقسام تحتوي على عدد قليل جدًا من صفوف "التحكم" أو لا تحتوي على صفوف "تحكم" على الإطلاق، ولكن عمومًا أريد توزيع صفوف "التحكم" بالتساوي إلى حد ما عبر البيانات.

هل كانت مفيدة؟

المحلول

هناك دائمًا احتمال أن يقتربوا من بعضهم البعض إذا قمت بذلك بشكل عشوائي :)

لكن ما سأفعله هو:

  1. لديك N صفوف من البيانات الحقيقية و x ل يتحكم بيانات
  2. للحصول على فهرس صف يجب عليك إدراجه i-صف التحكم، سأستخدم: N/(x+1) * i + r, ، أين r هو رقم عشوائي، مختلف لكل صف من صفوف التحكم، صغير مقارنة بـ N/x.اختر أي طريقة لتحديد r, ، يمكن أن يكون إما غاوسي او حتى مستوي توزيع. i هو فهرس لصف التحكم، لذلك فهو 1<=i<x
  3. بهذه الطريقة يمكنك التأكد من تجنب تكثيف صفوف التحكم الخاصة بك في مكان واحد.كما يمكنك التأكد من أنهم لن يكونوا على مسافات منتظمة من بعضهم البعض.

نصائح أخرى

وهنا فكرتي.لماذا لا تقوم فقط بالتمرير خلال الصفوف الموجودة و"تقلب عملة معدنية" لكل صف لتقرر ما إذا كنت ستدرج بيانات عشوائية هناك.

for (int i=0; i<numberOfExistingRows; i++)
{    
    int r = random();
    if (r > 0.5)
    {
        InsertRandomData();
    }    
}

من المفترض أن يمنحك هذا توزيعًا عشوائيًا لطيفًا عبر البيانات.

التعامل مع 3000 صف بيانات حقيقي و20 صف تحكم للمثال التالي (أنا أفضل مع المثال مقارنة باللغة الإنجليزية)

إذا كنت تريد توزيع صفوف التحكم العشرين بالتساوي قدر الإمكان بين 3000 صف بيانات حقيقي، فستقوم بإدراج صف واحد في كل صف بيانات حقيقي رقم 150.لذا اختر هذا الرقم، 150، لفهرس الإدراج التالي.
أ) قم بإنشاء رقم عشوائي بين 0 و 150 وطرحه من فهرس الإدراج
ب) أدخل صف التحكم هناك.
ج) زيادة مؤشر الإدراج بمقدار 150
د) كرر في الخطوة أ)

بالطبع هذه خوارزمية بدائية للغاية وتحتاج إلى بعض التحسينات :)

إذا كانت البيانات الحقيقية كبيرة أو أكبر بكثير من بيانات التحكم، فما عليك سوى إنشاء فترات زمنية بينية لبيانات التحكم الخاصة بك.

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

أوصي باستخدام انحراف غاوسي مع تعيين متوسط ​​لحجم البيانات الحقيقي مقسومًا على حجم بيانات التحكم، حيث يمكن تقدير الأول إذا لزم الأمر، بدلاً من قياسه أو افتراض أنه معروف.قم بتعيين الانحراف المعياري لهذا الغاوسي بناءً على مقدار "الانتشار" الذي ترغب في تحمله.أصغر stddev يعني توزيعًا أكثر ليبتوكوريتيك يعني التزامًا أكثر إحكامًا بالتباعد الموحد.يعني التطوير القياسي الأكبر توزيعًا أكثر سلاسة والتزامًا أكثر مرونة بالتباعد الموحد.

والآن ماذا عن القسمين الأول والأخير من الملف؟إنه:ماذا عن إدخال بيانات التحكم في البداية أو النهاية؟شيء واحد يمكنك القيام به هو التوصل إلى تقديرات حالة خاصة لهذه...لكن الخدعة الجميلة هي كما يلي:ابدأ "الفهرس" الخاص بك في البيانات الحقيقية عند ناقص نصف الوسط الغوسي وقم بإنشاء انحرافك الأول.لا تقم بإخراج أي بيانات حقيقية حتى يصبح "الفهرس" الخاص بك في البيانات الحقيقية شرعيًا.يجب أيضًا أن تعمل الخدعة المتماثلة في نهاية البيانات بشكل جيد (ببساطة:استمر في توليد الانحرافات حتى تصل إلى "فهرس" على الأقل نصف الوسط الغوسي بعد نهاية البيانات الحقيقية.إذا كان الفهرس الموجود قبل ذلك خارج النهاية، فقم بإنشاء البيانات في النهاية.

تريد إلقاء نظرة على أكثر من مجرد إحصائيات:من المفيد تطوير خوارزمية لهذا النوع من الأشياء للنظر في نظرية الطابور البدائية.راجع ويكيبيديا أو Turing Omnibus، الذي يحتوي على فصل قصير لطيف حول الموضوع وعنوانه "المحاكاة".

أيضًا:في بعض الظروف، تعطي التوزيعات غير الغوسية، وخاصة توزيع بواسون، نتائج أفضل وأكثر طبيعية لهذا النوع من الأشياء.لا يزال مخطط الخوارزمية أعلاه ينطبق باستخدام نصف متوسط ​​أي توزيع يبدو صحيحًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top