В настоящее время я использую модель ARIMA для прогнозирования стоимости мобильных телефонов на будущее с помощью функции прогноза. Для лучших параметров p, d, q, используя mse, я использую метод поиска по сетке.
Но у меня есть большой набор данных, и, следовательно, мой код ищет лучший параметр p, d, q для каждой модели. , Поскольку он ищет каждую модель одну за другой, для получения наилучших параметров p, d, q требуется около 12 часов.
При изучении глубокого обучения я обнаружил, что векторизация упрощает поиск в сетке. Поможет ли это в моей проблеме для повышения производительности?
Вот мой текущий код:
class Regressor():
def __init__(self):
super().__init__()
def evaluate_ARIMA(self,data,arima_order):
data.price= data.price.values.astype('float32')
model = ARIMA(data.price.values,order=arima_order).fit(disp=0)
y_pred = model.predict()
mse = mean_squared_error(model.fittedvalues, y_pred)
y_forecast = model.forecast(steps=10)[0].tolist()
return mse,y_forecast
def evaluate_pdq(self,i,df):
best_score, best_cfg, bins, upper = 0.05, None, None,[]
data = df[df['model_no'] == i]
bin_no = i
# evaluate p,d,q parameters for ARIMA model
for p,q,d in itertools.product([2,3],[0,1,2],[1,2,3]):
arima_order=(p,q,d)
try:
mse,y_forecast = self.evaluate_ARIMA(data, arima_order)
if mse < best_score:
best_score, best_cfg, upper = mse, arima_order, y_forecast
break
except:
models= [data['model_no'].unique()]
models= models.append(bins)
continue
values = [(model_no,best_cfg,upper)]
return values
Для запуска вышеуказанного кода я использую многопроцессорность, как показано ниже:
def pdq_mp(self,df,re):
model_list = df['model_no'].unique()
executor = Parallel(n_jobs=cpu_count(), backend= 'multiprocessing')
tasks = (delayed(re.evaluate_pdq)(i,df) for i in model_list)
results = executor(tasks)
values = list(list(zip(*results))[0])
return values
Также здесь я использую два цикла for, и по этой причине этот код выполняется более 12 часов.
Пожалуйста, предложите мне, как векторизовать приведенный выше код, чтобы я мог получить лучшее p, Параметры d, q за несколько минут.