Model ma'lumotlarini yangi ma'lumotlar bilan yangilab, eski ma'lumotlarni o'chirib tashlang

Men bu ma'lumot to'plamiga egaman va y = (a * x ^ n)/(b a , Hill harfining chegarasi bo'lsa, a , a/2 ga ( n = 1 uchun) va n - erishish mumkin.

Hozirda scipy.optimize.curve_fit dan parametrlarni hisoblash va egri chizish uchun barcha X, y qiymatlarini saqlayman. Agar yangi ma'lumotlar nuqtalari paydo bo'lsa, eski + yangi ma'lumotlar bilan parametrlarni qayta hisoblayman.

Oldingi parametrlarni avvalgi ma'lumotlar nuqtalaridan olinganidan keyin avvalgi eski ma'lumotlar nuqtalarining barcha ni saqlamasdan model parametrlarini yangilashning bir yo'li bormi?

Misol uchun, men birinchi 1000 ma'lumotlar nuqtasiga egri joylashtiramiz va parametrlarim bor. Keyin, eski ma'lumotlarimning bir qismini yoki barchasini olib tashlayman. Keyin, 1001 nuqtani ko'rsam, men oddiygina parametrlarni yangilayman va har bir yangi ma'lumotlar punkti uchun egri chizish bilan shug'ullanaman.

EDIT -ni tanlang

Mavjud kodim quyidagicha: (super zarb emas).

import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

def file_stream(file_name):
    with open(file_name, 'r') as in_file:
        for line in in_file:
            yield map(float, line.strip().split('\t'))

def hill_model(X, a, b, n):
    return [float((a * x**n))/(b + x**n) for x in X]

def get_params(X_all, y_all, prev_par=None, fn=hill_model):
    if prev_par is None:
        a_init, b_init, n_init = y_all[-1], y_all[0], 1.0
    else:
        a_init, b_init, n_init = prev_par
    opt_par, opt_cov = curve_fit(fn, X_all, y_all, p0=[a_init, b_init, n_init])
    a_final, b_final, n_final = opt_par
    return a_final, b_final, n_final

def main():
    file_name     = 'data.tsv'
    file_streamer = file_stream(file_name)
    X_all, y_all  = [], []

    # Get some intial data from stream
    for _ in xrange(1000):
        X, y = file_streamer.next()
        X_all.append(X)
        y_all.append(y)
    plt.scatter(X_all, y_all)

    # Initialize params of model
    a, b, n = get_params(X_all, y_all)
    y_model = hill_model(X_all, a, b, n)
    plt.plot(X_all, y_model, 'r-')
    plt.show()

    # Rolling update
    seen_all = False # Helps stop when all data is fit
    while True:
        for _ in xrange(1000):
            try:
                X, y = file_streamer.next()
                X_all.append(X)
                y_all.append(y)
            except:
                seen_all = True
                break
        a, b, n = get_params(X_all, y_all, prev_par=[a, b, n], fn=hill_model)
        y_model = hill_model(X_all, a, b, n)
        plt.scatter(X_all, y_all)
        plt.plot(X_all, y_model, 'r-')
        plt.show()

        # Nothing more to update, return
        if seen_all:
            return

if __name__ == '__main__':
    main()

Hozirda kod X, y qiymatlarida o'qiladi, a , b , n X, y qiymatlari qo'shiladi, kod kodi a , b va n parametrlarini yangilaydi. Ko'rib turganingizdek, oldingi X, y qiymatlarini saqlamoqchiman. istamayman . Parametrlarni yangi X, y qiymatlari ko'rinishida va avvalgi a , b va n Faqat kod> qiymatlari.

0
Haqiqiy muammoni xotira/diskda saqlash yoki hisoblash vaqtini hisoblash kerakmi?
qo'shib qo'ydi muallif Adisak, manba
@JanvanderVegt, Muammo haqiqatda oldingi qiymatlarni xotirada/diskda saqlash. Men regresyon funktsiyasining vektor-yangilanish shaklini joylashtirishni xohladim ( erikerlandson.github.io/blog/2012/07/05/… ) kodi> modeldagi parametr bo'lib, men bu texnikani to'g'ridan-to'g'ri qanday qo'llashni bilmayman. Har qanday yordamni qadrlaymiz. Rahmat.
qo'shib qo'ydi muallif neo4k, manba

Javob yo'q

0
Python
Python
372 ishtirokchilar

Bu guruh python dasturlash tilini muhokama qilish uchun. Iltimos, o'zingizni hurmat qiling va faqat dasturlash bo'yicha yozing. Botlar mavzusini @botlarhaqida guruhida muhokama qling! FAQ: @PyFAQ Offtopic: @python_uz_offtopic

Python offtopic group !
Python offtopic group !
150 ishtirokchilar

@python_uz gruppasining offtop gruppasi. offtop bo'lsa ham reklama mumkin emas ) Boshqa dasturlash tiliga oid gruppalar @languages_programming