إن التجزئة الغوسية الجشعة (GGS) هي أداة حل بلغة Python لتجزئة بيانات السلاسل الزمنية متعددة المتغيرات بكفاءة. للحصول على تفاصيل التنفيذ، يرجى الاطلاع على ورقتنا في http://stanford.edu/~boyd/papers/ggs.html.
يأخذ GGS Solver مصفوفة بيانات n-by-T ويقسم الطوابع الزمنية T على متجه n-الأبعاد إلى مقاطع يتم شرح البيانات عليها جيدًا كعينات مستقلة من توزيع غاوسي متعدد المتغيرات. وهو يفعل ذلك عن طريق صياغة مشكلة الاحتمالية القصوى المنتظمة التغاير وحلها باستخدام الاستدلال الجشع، مع التفاصيل الكاملة الموضحة في الورقة.
git clone [email protected]:davidhallac/GGS.git
cd GGS
python helloworld.py
ggs.py
في نفس الدليل مثل ملفك الجديد، ثم قم بإضافة الكود التالي إلى بداية البرنامج النصي الخاص بك: from ggs import *
تحتوي حزمة GGS على ثلاث وظائف رئيسية:
bps, objectives = GGS(data, Kmax, lamb)
يبحث عن نقاط توقف K في البيانات الخاصة بمعلمة تنظيم معينة lambda
المدخلات
البيانات - مصفوفة بيانات n-by-T، مع طوابع زمنية T لمتجه n-الأبعاد
Kmax - عدد نقاط التوقف المطلوب العثور عليها
لحم الضأن - معلمة التنظيم للتباين المشترك المنظم
المرتجعات
bps - قائمة القوائم، حيث العنصر i من القائمة الأكبر هو مجموعة نقاط التوقف الموجودة عند K = i في خوارزمية GGS
الأهداف - قائمة القيم الموضوعية في كل خطوة وسيطة (من K = 0 إلى Kmax)
meancovs = GGSMeanCov(data, breakpoints, lamb)
يبحث عن المتوسطات والتباينات المشتركة المنتظمة لكل مقطع، مع مراعاة مجموعة من نقاط التوقف.
المدخلات
البيانات - مصفوفة بيانات n-by-T، مع طوابع زمنية T لمتجه n-الأبعاد
نقاط التوقف - قائمة مواقع نقاط التوقف
لحم الضأن - معلمة التنظيم للتباين المشترك المنظم
المرتجعات
Meancovs - قائمة الصفوف (المتوسط، التغاير) لكل مقطع في البيانات
cvResults = GGSCrossVal(data, Kmax=25, lambList = [0.1, 1, 10])
تشغيل التحقق المتقاطع بعشرة أضعاف، وإرجاع احتمالية مجموعة القطار والاختبار لكل زوج (K، lambda) حتى Kmax
المدخلات
البيانات - مصفوفة بيانات n-by-T، مع طوابع زمنية T لمتجه n-الأبعاد
Kmax - الحد الأقصى لعدد نقاط التوقف لتشغيل GGS
lambList - قائمة بمعلمات التنظيم المطلوب اختبارها
المرتجعات
cvResults - قائمة بصفوف (lamb, ([TrainLL],[TestLL])) لكل معلمة تنظيم في lambList. هنا، يمثل TrainLL وTestLL متوسط احتمالية السجل لكل عينة عبر 10 أضعاف من التحقق المتبادل لجميع K من 0 إلى Kmax
معلمات اختيارية إضافية (لجميع الوظائف الثلاث المذكورة أعلاه):
الميزات = [] - حدد مجموعة فرعية معينة من الأعمدة في البيانات للعمل عليها
مطول = خطأ - طباعة الخطوات المتوسطة عند تشغيل الخوارزمية
سيؤدي تشغيل financeExample.py
إلى المخطط التالي، الذي يوضح الهدف (المعادلة 4 في الورقة) مقابل عدد نقاط التوقف:
بمجرد أن نتوصل إلى مواقع نقاط التوقف، يمكننا استخدام الدالة FindMeanCovs()
للعثور على المتوسطات والتباينات لكل قطعة. في المثال الموجود في helloworld.py
، يؤدي رسم المتوسطات والتباينات والتباينات المشتركة للإشارات الثلاث إلى ما يلي:
لتشغيل التحقق المتبادل، والذي يمكن أن يكون مفيدًا في تحديد القيم المثلى لـ K و lambda، يمكننا استخدام الكود التالي لتحميل البيانات، وتشغيل التحقق المتبادل، ثم رسم الاختبار وتدريب الاحتمالية:
from ggs import *
import numpy as np
import matplotlib.pyplot as plt
filename = "Returns.txt"
data = np.genfromtxt(filename,delimiter=' ')
feats = [0,3,7]
#Run cross-validaton up to Kmax = 30, at lambda = 1e-4
maxBreaks = 30
lls = GGSCrossVal(data, Kmax=maxBreaks, lambList = [1e-4], features = feats, verbose = False)
trainLikelihood = lls[0][1][0]
testLikelihood = lls[0][1][1]
plt.plot(range(maxBreaks+1), testLikelihood)
plt.plot(range(maxBreaks+1), trainLikelihood)
plt.legend(['Test LL','Train LL'], loc='best')
plt.show()
تبدو المؤامرة الناتجة كما يلي:
التقسيم الغوسي الجشع لبيانات السلاسل الزمنية - د. هالاك، ب. نيستروب، وس. بويد
ديفيد هالاك، بيتر نيستروب، وستيفن بويد.