هل هناك طريقة للتنبؤ بقيمة وظيفة غير معروفة بناء على قيمها السابقة

StackOverflow https://stackoverflow.com/questions/1150862

  •  18-09-2019
  •  | 
  •  

سؤال

لدي القيم التي تم إرجاعها بواسطة وظيفة غير معروفة مثل على سبيل المثال

# this is an easy case - parabolic function
# but in my case function is realy unknown as it is connected to process execution time
[0, 1, 4, 9]

هل هناك طريقة للتنبؤ بالقيمة التالية؟

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

المحلول

أنظر أيضا هذا السؤال.

نصائح أخرى

ليس بالضرورة. قد يتم تنفيذ "وظيفة مكافحة" مثل هذا:

def mindscrew
  @nums ||= [0, 1, 4, 9, "cat", "dog", "cheese"]
  @nums.pop
end

يمكنك تخمين، ولكن للتنبؤ بيقين أمر مستحيل.

يمكنك محاولة استخدام الشبكات العصبية نهج. هناك العديد من المقالات التي يمكنك العثور عليها بواسطة Google Query "تقريب وظيفة الشبكة العصبية". العديد من الكتب متوفرة أيضا، على سبيل المثال هذا.

إذا كنت تريد فقط نقاط البيانات

استقراء البيانات الخارج من النقاط المعروفة يمكن أن يكون مقدر, ، ولكن عليك أن تقبل الاختلافات المحتملة أكبر بكثير من الاستيفاء من البيانات ما بين النقاط المعروفة. بدقة، يمكن أن يكون كلاهما غير دقيق بشكل تعسفي، حيث يمكن أن تفعل الوظيفة أي شيء مجنون بين النقاط المعروفة، حتى لو كانت وظيفة مستمرة تصرفت جيدا. وإذا كان ذلك ليس كذلك حسن التصرف، جميع الرهانات بالفعل ؛-P

هناك عدد من النهج الرياضية لهذا (يحتوي على تطبيق مباشر لعلوم الكمبيوتر) - أي شيء من الجبر الخطي البسيط إلى أشياء مثل الجزورات المكعبة؛ وكل شيء بينهما.

إذا كنت تريد الوظيفة

الحصول على الباطنية؛ نموذج آخر مثير للاهتمام هنا البرمجة الوراثية؛ من خلال التطور تعبيرا عن نقاط البيانات المعروفة، من الممكن العثور على تقريب قريب مناسب. في بعض الأحيان يعمل؛ في بعض الأحيان لا. ليست اللغة التي كنت تبحث عنها، لكن جيسون بوك يظهر بعض كود C # الذي يفعل هذا في .NET 3.5، هنا: تعبيرات Linq المتطورة.

أحصل على كوده "لتسليم" (لقد استخدمته في بعض العروض التقديمية)؛ مع شيء مثل a => a * a سيجد أنه على الفور تقريبا، ولكن يجب أن يكون (من الناحية النظرية) قادرا على إيجاد أي طريقة تقريبا - ولكن دون أي طول تشغيل أقصى محدد؛ - من الممكن أيضا الدخول في طريق مسدود (التحدث التطوري) حيث كنت ببساطة أبدا استعادة...

استخدم ال Wolfram Alpha API. :)

نعم. يمكن.

إذا كان لديك بعض قيم المدخلات والإخراج، أي في حالتك [0،1،2،3] و [0،1،4،9]، يمكنك استخدام أسطح الاستجابة (وظيفة العمل بشكل أساسي وأعتقد أنها "تخمين" الوظيفة الفعلية (في حالتك f (x) = x ^ 2). إذا تركت وظيفة التخمين الخاصة بك تكون f (x) = c1 * x + c2 * x ^ 2 + c3 هناك خوارزميات ستحدد أن C1 = 0، C2 = 1 و C3 = 0 بالنظر إلى المدخلات والإخراج وإخراجك وظيفة يمكنك التنبؤ بالقيمة التالية.

لاحظ أن معظم الإجابات الأخرى على هذا السؤال صالحة أيضا. أنا فقط أفترض أنك تريد أن تناسب بعض الوظائف إلى البيانات. بمعنى آخر، أجد سؤالك غامضا للغاية، يرجى محاولة طرح أسئلتك كاملة قدر الإمكان!

بشكل عام، لا ... إلا إذا كنت تعرف أنها وظيفة من نموذج معين (مثل متعدد الحدود من حد ما N) وهناك معلومات كافية لتقييد الوظيفة.

على سبيل المثال للحصول على عينة "عادية" أكثر (انظر إجابة Chuck) لماذا لا يمكنك بالضرورة أن تفترض N ^ 2 W / O معرفة أنها معادلة من الدرجة الثانية، هل يمكن أن يكون لديك f (n) = n4 - 6n.3 + 12N.2 - 6N، الذي يحتوي على N = 0،1،2،3،4،5 F (N) = 0،1،4،4،40،40،145.

إذا كنت تعرف أنه نموذج معين، فهناك بعض الخيارات ... إذا كان النموذج هو إضافة خطية لوظائف الأساس (مثل F (X) = A + Bكوس (س) + جSQRT (X)) ثم استخدام المربعات الصغرى يمكن أن تحصل على معاملات غير معروفة لأفضل مناسب باستخدام هذه الوظائف الأساسية.

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

int evil(void){
  static int e = 0;
  if(50 == e++){
    e = e * 100;
  }
  return e;
}

هذه الوظيفة ستعود أرقام متزايدة بسيطة لطيفة ثم ... BAM.

هذه مشكلة صعبة.

يجب عليك التحقق من علاقة تكرارية معادلة للحالات الخاصة حيث يمكن أن تكون ممكنة مثل هذه المهمة.

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