def fetch_model(self, ref_date=None, model_type=None, model_version=None, is_primary=True, model_id=None) -> pd.DataFrame: from alphamind.model.composer import DataMeta conditions = [] if ref_date: conditions.append(Models.trade_date == ref_date) if model_id: conditions.append(Models.model_id == model_id) if model_type: conditions.append(Models.model_type == model_type) if model_version: conditions.append(Models.model_version == model_version) conditions.append(Models.is_primary == is_primary) query = select([Models]).where(and_(*conditions)) model_df = pd.read_sql(query, self.engine) for i, data in enumerate(zip(model_df.model_desc, model_df.data_meta)): model_desc, data_desc = data model_df.loc[i, 'model'] = load_model(model_desc) model_df.loc[i, 'data_meta'] = DataMeta.load(data_desc) del model_df['model_desc'] return model_df
def fetch_model(self, ref_date=None, model_type=None, model_version=None, is_primary=True, model_id=None) -> pd.DataFrame: conditions = [] if ref_date: conditions.append(Models.trade_date == ref_date) if model_id: conditions.append(Models.model_id == model_id) if model_type: conditions.append(Models.model_type == model_type) if model_version: conditions.append(Models.model_version == model_version) conditions.append(Models.is_primary == is_primary) query = select([Models]).where(and_(*conditions)) model_df = pd.read_sql(query, self.engine) for i, model_desc in enumerate(model_df.model_desc): model_df.loc[i, 'model'] = load_model(model_desc) del model_df['model_desc'] return model_df
def test_const_linear_model_persistence(self): weights = dict(c=3., b=2., a=1.) model = ConstLinearModel(features=['a', 'b', 'c'], weights=weights) desc = model.save() new_model = load_model(desc) self.assertEqual(model.features, new_model.features) np.testing.assert_array_almost_equal(model.weights, new_model.weights)
def test_linear_regression_persistence(self): model = LinearRegression(['a', 'b', 'c'], fit_intercept=False) model.fit(self.train_x, self.train_y) desc = model.save() new_model = load_model(desc) calculated_y = new_model.predict(self.predict_x) expected_y = model.predict(self.predict_x) np.testing.assert_array_almost_equal(calculated_y, expected_y) np.testing.assert_array_almost_equal(new_model.weights, model.weights)
def test_load_model(self): model = LinearRegression(['a', 'b', 'c']) model.fit(self.trained_x, self.trained_y) model_desc = model.save() new_model = load_model(model_desc) np.testing.assert_array_almost_equal(model.predict(self.predict_x), new_model.predict(self.predict_x)) self.assertEqual(model.features, new_model.features) self.assertEqual(model.trained_time, new_model.trained_time)
def test_xgb_regress_persistence(self): model = XGBRegressor(features=self.features) model.fit(self.x, self.y) desc = model.save() new_model = load_model(desc) self.assertEqual(model.features, new_model.features) np.testing.assert_array_almost_equal(model.predict(self.sample_x), new_model.predict(self.sample_x)) np.testing.assert_array_almost_equal(model.importances, new_model.importances)
def test_xgb_classify_persistence(self): model = XGBClassifier(features=self.features) y = np.where(self.y > 0, 1, 0) model.fit(self.x, y) desc = model.save() new_model = load_model(desc) self.assertEqual(model.features, new_model.features) np.testing.assert_array_almost_equal(model.predict(self.sample_x), new_model.predict(self.sample_x)) np.testing.assert_array_almost_equal(model.importances, new_model.importances)
def test_xgb_trainer_persistence(self): model = XGBTrainer(features=self.features, objective='binary:logistic', booster='gbtree', tree_method='hist', n_estimators=200) y = np.where(self.y > 0, 1, 0) model.fit(self.x, y) desc = model.save() new_model = load_model(desc) self.assertEqual(model.features, new_model.features) np.testing.assert_array_almost_equal(model.predict(self.sample_x), new_model.predict(self.sample_x)) np.testing.assert_array_almost_equal(model.importances, new_model.importances)
def load(cls, comp_desc): alpha_model = load_model(comp_desc['alpha_model']) data_meta = DataMeta.load(comp_desc['data_meta']) return cls(alpha_model, data_meta)