Commit 5addc3aa authored by Dr.李's avatar Dr.李

model models

parent 7954719f
...@@ -26,7 +26,9 @@ from alphamind.data.neutralize import neutralize ...@@ -26,7 +26,9 @@ from alphamind.data.neutralize import neutralize
from alphamind.data.engines.sqlengine import factor_tables from alphamind.data.engines.sqlengine import factor_tables
from alphamind.model.linearmodel import LinearRegression from alphamind.model.linearmodel import LinearRegression
from alphamind.model.linearmodel import LassoRegression
from alphamind.model.linearmodel import ConstLinearModel from alphamind.model.linearmodel import ConstLinearModel
from alphamind.model.treemodel import RandomForestRegressor
from alphamind.model.loader import load_model from alphamind.model.loader import load_model
from alphamind.model.data_preparing import fetch_data_package from alphamind.model.data_preparing import fetch_data_package
from alphamind.model.data_preparing import fetch_train_phase from alphamind.model.data_preparing import fetch_train_phase
...@@ -81,7 +83,9 @@ __all__ = [ ...@@ -81,7 +83,9 @@ __all__ = [
'fetch_data_package', 'fetch_data_package',
'fetch_train_phase', 'fetch_train_phase',
'LinearRegression', 'LinearRegression',
'LassoRegression',
'ConstLinearModel', 'ConstLinearModel',
'RandomForestRegressor',
'load_model', 'load_model',
'NaiveExecutor', 'NaiveExecutor',
'ThresholdExecutor', 'ThresholdExecutor',
......
...@@ -923,6 +923,7 @@ class PortfolioSettings(Base): ...@@ -923,6 +923,7 @@ class PortfolioSettings(Base):
trade_date = Column(DateTime, primary_key=True, nullable=False) trade_date = Column(DateTime, primary_key=True, nullable=False)
portfolio_name = Column(String(50), primary_key=True, nullable=False) portfolio_name = Column(String(50), primary_key=True, nullable=False)
model_id = Column(BigInteger, primary_key=True, nullable=False) model_id = Column(BigInteger, primary_key=True, nullable=False)
weight = Column(Float(53), nullable=False)
class Positions(Base): class Positions(Base):
......
...@@ -6,8 +6,13 @@ Created on 2017-5-2 ...@@ -6,8 +6,13 @@ Created on 2017-5-2
""" """
from alphamind.model.linearmodel import LinearRegression from alphamind.model.linearmodel import LinearRegression
from alphamind.model.linearmodel import LassoRegression
from alphamind.model.linearmodel import ConstLinearModel from alphamind.model.linearmodel import ConstLinearModel
from alphamind.model.treemodel import RandomForestRegressor
__all__ = ['LinearRegression', __all__ = ['LinearRegression',
'ConstLinearModel'] 'LassoRegression',
\ No newline at end of file 'ConstLinearModel',
'RandomForestRegressor']
\ No newline at end of file
...@@ -10,6 +10,7 @@ import arrow ...@@ -10,6 +10,7 @@ import arrow
from distutils.version import LooseVersion from distutils.version import LooseVersion
from sklearn import __version__ as sklearn_version from sklearn import __version__ as sklearn_version
from sklearn.linear_model import LinearRegression as LinearRegressionImpl from sklearn.linear_model import LinearRegression as LinearRegressionImpl
from sklearn.linear_model import Lasso
from PyFin.api import pyFinAssert from PyFin.api import pyFinAssert
from alphamind.model.modelbase import ModelBase from alphamind.model.modelbase import ModelBase
from alphamind.utilities import alpha_logger from alphamind.utilities import alpha_logger
...@@ -93,6 +94,51 @@ class LinearRegression(ModelBase): ...@@ -93,6 +94,51 @@ class LinearRegression(ModelBase):
return self.impl.coef_.tolist() return self.impl.coef_.tolist()
class LassoRegression(ModelBase):
def __init__(self, alpha, features: list=None, fit_intercept: bool=False):
super().__init__(features)
self.impl = Lasso(alpha=alpha, fit_intercept=fit_intercept)
self.trained_time = None
def fit(self, x: np.ndarray, y: np.ndarray):
self.impl.fit(x, y)
self.trained_time = arrow.now().format("YYYY-MM-DD HH:mm:ss")
def predict(self, x: np.ndarray) -> np.ndarray:
return self.impl.predict(x)
def save(self) -> dict:
model_desc = super().save()
model_desc['internal_model'] = self.impl.__class__.__module__ + "." + self.impl.__class__.__name__
model_desc['desc'] = encode(self.impl)
model_desc['sklearn_version'] = sklearn_version
model_desc['trained_time'] = self.trained_time
model_desc['weight'] = self.impl.coef_.tolist()
return model_desc
def score(self) -> float:
return self.impl.score()
@classmethod
def load(cls, model_desc: dict):
obj_layout = cls()
obj_layout.features = model_desc['features']
obj_layout.trained_time = model_desc['trained_time']
if LooseVersion(sklearn_version) < LooseVersion(model_desc['sklearn_version']):
alpha_logger.warning('Current sklearn version {0} is lower than the model version {1}. '
'Loaded model may work incorrectly.'.format(
sklearn_version, model_desc['sklearn_version']))
obj_layout.impl = decode(model_desc['desc'])
return obj_layout
@property
def weights(self):
return self.impl.coef_.tolist()
if __name__ == '__main__': if __name__ == '__main__':
import pprint import pprint
......
# -*- coding: utf-8 -*-
"""
Created on 2017-12-4
@author: cheng.li
"""
import arrow
import numpy as np
from distutils.version import LooseVersion
from sklearn import __version__ as sklearn_version
from sklearn.ensemble import RandomForestRegressor as RandomForestRegressorImpl
from alphamind.model.modelbase import ModelBase
from alphamind.utilities import alpha_logger
from alphamind.utilities import encode
from alphamind.utilities import decode
class RandomForestRegressor(ModelBase):
def __init__(self, n_estimators, features=None, *args, **kwargs):
super().__init__(features)
self.impl = RandomForestRegressorImpl(n_estimators, *args, **kwargs)
def fit(self, x: np.ndarray, y: np.ndarray):
self.impl.fit(x, y)
self.trained_time = arrow.now().format("YYYY-MM-DD HH:mm:ss")
def predict(self, x: np.ndarray) -> np.ndarray:
return self.impl.predict(x)
def save(self) -> dict:
model_desc = super().save()
model_desc['internal_model'] = self.impl.__class__.__module__ + "." + self.impl.__class__.__name__
model_desc['desc'] = encode(self.impl)
model_desc['sklearn_version'] = sklearn_version
model_desc['trained_time'] = self.trained_time
@classmethod
def load(cls, model_desc: dict):
obj_layout = cls()
obj_layout.features = model_desc['features']
obj_layout.trained_time = model_desc['trained_time']
if LooseVersion(sklearn_version) < LooseVersion(model_desc['sklearn_version']):
alpha_logger.warning('Current sklearn version {0} is lower than the model version {1}. '
'Loaded model may work incorrectly.'.format(
sklearn_version, model_desc['sklearn_version']))
obj_layout.impl = decode(model_desc['desc'])
return obj_layout
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment