Я создал класс для изучения и обучения моделей.
Когда я изменяю значение выпадающего меню «выбирать_модель_тип» в приведенном ниже примере кода, я не ожидал, что в моей панели инструментов ничего не изменится, посколькунет @param.depends('choose_model_type', watch=True)
в моем классе.Тем не менее, моя панель инструментов обновляется, когда я изменяю значение выпадающего меню «выбирать_модель_тип».В этом случае функция plot_y () запускается дважды, если я просматриваю журналы:
2019-09-26 11: 24: 42,802 начиная с plot_y
2019-09-26 11:24:42 825 стартовый plot_y
Это для меня неожиданное поведение.Я не хочу, чтобы plot_y () срабатывал при изменении «choose_model_type».
Как сделать так, чтобы plot_y срабатывал только при изменении «y» (и мой график обновляется на панели инструментов), а не когда другиепараметры, такие как раскрывающийся список изменения?
Я хочу контролировать то, когда срабатывает, но для меня, кажется, происходит какая-то магия.
Другой связанный с этим вопрос:
Почему plot_y () срабатывает дважды?Если я изменяю pred_target, он также запускает plot_y () дважды.То же самое происходит, когда я изменяю значение «choose_model_type»: plot_y () срабатывает дважды.
# library imports
import logging
import numpy as np
import pandas as pd
import hvplot
import hvplot.pandas
import holoviews as hv
from holoviews.operation.datashader import datashade, dynspread
hv.extension('bokeh', logo=False)
import panel as pn
import param
# create some sample data
df = pd.DataFrame(np.random.choice(100, size=[50, 2]), columns=['TARGET1', 'TARGET2'])
# class to train my models with some settings
class ModelTrainer(param.Parameterized):
logging.info('initializing class')
pred_target = param.Selector(
default='TARGET1',
objects=['TARGET1', 'TARGET2'],
label='Choose prediction target'
)
choose_model_type = param.Selector(
default='LINEAR',
objects=['LINEAR', 'LGBM', 'RANDOM_FOREST'],
label='Choose type of model',
)
y = df[pred_target.default]
# i expect this function only to be triggered when pred_target changes
@param.depends('pred_target', watch=True)
def _reset_variables(self):
logging.info('starting reset variables')
self.y = df[self.pred_target]
# i expect plot_y() only to be triggered when y changes
@param.depends('y', watch=True)
def plot_y(self):
logging.info('starting plot_y')
self.y_plot = dynspread(datashade(self.y.hvplot.scatter()))
return self.y_plot
model_trainer = ModelTrainer()
# show model dashboard
pn.Column(
pn.Row(model_trainer.param['pred_target']),
pn.Row(model_trainer.param['choose_model_type']),
pn.Row(model_trainer.plot_y)
).servable()