Commit 6f03cfe2 authored by Dr.李's avatar Dr.李

added linear model

parent 0afa057f
......@@ -34,4 +34,4 @@ cpdef groupby(long[:] groups):
group_ids[curr_tag] = [i]
else:
deref(it).second.push_back(i)
return [np.array(v) for v in group_ids.values()]
\ No newline at end of file
return {k: np.array(v) for k, v in group_ids.items()}
\ No newline at end of file
......@@ -37,7 +37,7 @@ def neutralize(x: np.ndarray, y: np.ndarray, groups: np.ndarray=None, output_exp
groups_ids = groupby(groups)
for curr_idx in groups_ids:
for curr_idx in groups_ids.values():
curr_x = x[curr_idx]
curr_y = y[curr_idx]
b = ls_fit(curr_x, curr_y)
......
# -*- coding: utf-8 -*-
"""
Created on 2017-5-10
@author: cheng.li
"""
from typing import Union
import numpy as np
from alphamind.cyimpl import groupby
from alphamind.data.neutralize import ls_fit
def _train(x: np.ndarray, y: np.ndarray, groups: np.ndarray=None) -> Union[np.ndarray, dict]:
if groups is None:
return ls_fit(x, y)
else:
groups_ids = groupby(groups)
res_beta = {}
for k, curr_idx in groups_ids.items():
curr_x = x[curr_idx]
curr_y = y[curr_idx]
res_beta[k] = ls_fit(curr_x, curr_y)
return res_beta
if __name__ == '__main__':
x = np.random.randn(3000, 10)
y = np.random.randn(3000)
groups = np.random.randint(30, size=3000)
print(_train(x, y, groups))
\ No newline at end of file
......@@ -21,7 +21,7 @@ def percent_build(er: np.ndarray, percent: float, groups: np.ndarray=None) -> np
weights = zeros((length, 1))
if groups is not None:
group_ids = groupby(groups)
for current_index in group_ids:
for current_index in group_ids.values():
current_ordering = neg_er[current_index].argsort()
current_ordering.shape = -1, 1
use_rank = int(percent * len(current_index))
......@@ -37,7 +37,7 @@ def percent_build(er: np.ndarray, percent: float, groups: np.ndarray=None) -> np
if groups is not None:
group_ids = groupby(groups)
for current_index in group_ids:
for current_index in group_ids.values():
current_ordering = neg_er[current_index].argsort(axis=0)
use_rank = int(percent * len(current_index))
set_value(weights, current_index[current_ordering[:use_rank]], 1)
......
......@@ -21,7 +21,7 @@ def rank_build(er: np.ndarray, use_rank: int, groups: np.ndarray=None) -> np.nda
weights = zeros((length, 1))
if groups is not None:
group_ids = groupby(groups)
for current_index in group_ids:
for current_index in group_ids.values():
current_ordering = neg_er[current_index].argsort()
current_ordering.shape = -1, 1
set_value(weights, current_index[current_ordering[:use_rank]], 1.)
......@@ -35,7 +35,7 @@ def rank_build(er: np.ndarray, use_rank: int, groups: np.ndarray=None) -> np.nda
if groups is not None:
group_ids = groupby(groups)
for current_index in group_ids:
for current_index in group_ids.values():
current_ordering = neg_er[current_index].argsort(axis=0)
set_value(weights, current_index[current_ordering[:use_rank]], 1)
else:
......
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