Commit 7e531c66 authored by Dr.李's avatar Dr.李

update benchmark

parent 258b0348
...@@ -18,21 +18,22 @@ if __name__ == '__main__': ...@@ -18,21 +18,22 @@ if __name__ == '__main__':
benchmark_neutralize(3000, 10, 1000) benchmark_neutralize(3000, 10, 1000)
benchmark_neutralize(30, 10, 50000) benchmark_neutralize(30, 10, 50000)
benchmark_standardize(3000, 10, 1000) benchmark_neutralize(50000, 50, 20)
benchmark_standardize_with_group(3000, 10, 1000, 30) # benchmark_standardize(3000, 10, 1000)
benchmark_standardize(30, 10, 50000) # benchmark_standardize_with_group(3000, 10, 1000, 30)
benchmark_standardize_with_group(30, 10, 5000, 5) # benchmark_standardize(30, 10, 50000)
benchmark_standardize(50000, 50, 20) # benchmark_standardize_with_group(30, 10, 5000, 5)
benchmark_standardize_with_group(50000, 50, 20, 50) # benchmark_standardize(50000, 50, 20)
benchmark_winsorize_normal(3000, 10, 1000) # benchmark_standardize_with_group(50000, 50, 20, 50)
benchmark_winsorize_normal_with_group(3000, 10, 1000, 30) # benchmark_winsorize_normal(3000, 10, 1000)
benchmark_winsorize_normal(30, 10, 50000) # benchmark_winsorize_normal_with_group(3000, 10, 1000, 30)
benchmark_winsorize_normal_with_group(30, 10, 5000, 5) # benchmark_winsorize_normal(30, 10, 50000)
benchmark_winsorize_normal(50000, 50, 20) # benchmark_winsorize_normal_with_group(30, 10, 5000, 5)
benchmark_winsorize_normal_with_group(50000, 50, 20, 50) # benchmark_winsorize_normal(50000, 50, 20)
benchmark_build_rank(3000, 1000, 300) # benchmark_winsorize_normal_with_group(50000, 50, 20, 50)
benchmark_build_rank_with_group(3000, 1000, 10, 30) # benchmark_build_rank(3000, 1000, 300)
benchmark_build_rank(30, 50000, 3) # benchmark_build_rank_with_group(3000, 1000, 10, 30)
benchmark_build_rank_with_group(30, 50000, 1, 3) # benchmark_build_rank(30, 50000, 3)
benchmark_build_rank(50000, 20, 3000) # benchmark_build_rank_with_group(30, 50000, 1, 3)
benchmark_build_rank_with_group(50000, 20, 10, 300) # benchmark_build_rank(50000, 20, 3000)
# benchmark_build_rank_with_group(50000, 20, 10, 300)
...@@ -10,7 +10,7 @@ import datetime as dt ...@@ -10,7 +10,7 @@ import datetime as dt
import numpy as np import numpy as np
from sklearn.linear_model import LinearRegression from sklearn.linear_model import LinearRegression
from alphamind.data.neutralize import ls_fit from alphamind.data.neutralize import neutralize
def benchmark_neutralize(n_samples: int, n_features: int, n_loops: int) -> None: def benchmark_neutralize(n_samples: int, n_features: int, n_loops: int) -> None:
...@@ -23,7 +23,7 @@ def benchmark_neutralize(n_samples: int, n_features: int, n_loops: int) -> None: ...@@ -23,7 +23,7 @@ def benchmark_neutralize(n_samples: int, n_features: int, n_loops: int) -> None:
start = dt.datetime.now() start = dt.datetime.now()
for _ in range(n_loops): for _ in range(n_loops):
_ = ls_fit(x, y) _ = neutralize(x, y)
impl_model_time = dt.datetime.now() - start impl_model_time = dt.datetime.now() - start
print('{0:20s}: {1}'.format('Implemented model', impl_model_time)) print('{0:20s}: {1}'.format('Implemented model', impl_model_time))
...@@ -31,7 +31,8 @@ def benchmark_neutralize(n_samples: int, n_features: int, n_loops: int) -> None: ...@@ -31,7 +31,8 @@ def benchmark_neutralize(n_samples: int, n_features: int, n_loops: int) -> None:
start = dt.datetime.now() start = dt.datetime.now()
for _ in range(n_loops): for _ in range(n_loops):
benchmark_model = LinearRegression(fit_intercept=False) benchmark_model = LinearRegression(fit_intercept=False)
_ = benchmark_model.fit(x, y) benchmark_model.fit(x, y)
_ = y - x @ benchmark_model.coef_
benchmark_model_time = dt.datetime.now() - start benchmark_model_time = dt.datetime.now() - start
print('{0:20s}: {1}'.format('Benchmark model', benchmark_model_time)) print('{0:20s}: {1}'.format('Benchmark model', benchmark_model_time))
......
...@@ -15,7 +15,7 @@ def neutralize(x: np.ndarray, y: np.ndarray) -> np.ndarray: ...@@ -15,7 +15,7 @@ def neutralize(x: np.ndarray, y: np.ndarray) -> np.ndarray:
def ls_fit(x: np.ndarray, y: np.ndarray) -> np.ndarray: def ls_fit(x: np.ndarray, y: np.ndarray) -> np.ndarray:
x_bar = np.transpose(x) x_bar = x.T
b = solve(x_bar @ x, x_bar @ y) b = solve(x_bar @ x, x_bar @ y)
return b return b
......
...@@ -6,15 +6,17 @@ Created on 2017-4-26 ...@@ -6,15 +6,17 @@ Created on 2017-4-26
""" """
import numpy as np import numpy as np
from numpy import zeros
from numpy import max
def rank_build(er: np.ndarray, use_rank: int, groups: np.ndarray=None) -> np.ndarray: def rank_build(er: np.ndarray, use_rank: int, groups: np.ndarray=None) -> np.ndarray:
neg_er = -er neg_er = -er
masks = np.zeros(len(er), dtype=bool) masks = zeros(len(er), dtype=bool)
ordering = neg_er.argsort() ordering = neg_er.argsort()
if groups is not None: if groups is not None:
max_g = np.max(groups) max_g = max(groups)
index_range = np.arange(len(er)) index_range = np.arange(len(er))
for i in range(max_g + 1): for i in range(max_g + 1):
...@@ -23,11 +25,10 @@ def rank_build(er: np.ndarray, use_rank: int, groups: np.ndarray=None) -> np.nda ...@@ -23,11 +25,10 @@ def rank_build(er: np.ndarray, use_rank: int, groups: np.ndarray=None) -> np.nda
current_ordering = neg_er[current_mask].argsort() current_ordering = neg_er[current_mask].argsort()
masks[current_index[current_ordering[:use_rank]]] = True masks[current_index[current_ordering[:use_rank]]] = True
else: else:
masks[ordering[:use_rank]] = True masks[ordering[:use_rank]] = True
weights = np.zeros(len(er)) weights = zeros(len(er))
weights[masks] = 1. / np.sum(masks) weights[masks] = 1. / use_rank
return weights return weights
...@@ -43,3 +44,4 @@ if __name__ == '__main__': ...@@ -43,3 +44,4 @@ if __name__ == '__main__':
for i in range(10000): for i in range(10000):
weights = rank_build(x, 30, groups) weights = rank_build(x, 30, groups)
print(dt.datetime.now() - start) print(dt.datetime.now() - start)
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