Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
A
alpha-mind
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Dr.李
alpha-mind
Commits
d1bdb3fb
Commit
d1bdb3fb
authored
Mar 22, 2018
by
Dr.李
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
more robust and more efficient
parent
6e6d9053
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
27 additions
and
10 deletions
+27
-10
neutralize.py
alphamind/data/neutralize.py
+27
-10
No files found.
alphamind/data/neutralize.py
View file @
d1bdb3fb
...
@@ -16,12 +16,16 @@ import alphamind.utilities as utils
...
@@ -16,12 +16,16 @@ import alphamind.utilities as utils
def
neutralize
(
x
:
np
.
ndarray
,
def
neutralize
(
x
:
np
.
ndarray
,
y
:
np
.
ndarray
,
y
:
np
.
ndarray
,
groups
:
np
.
ndarray
=
None
,
groups
:
np
.
ndarray
=
None
,
detail
:
bool
=
False
)
\
detail
:
bool
=
False
,
weights
:
np
.
ndarray
=
None
)
\
->
Union
[
np
.
ndarray
,
Tuple
[
np
.
ndarray
,
Dict
]]:
->
Union
[
np
.
ndarray
,
Tuple
[
np
.
ndarray
,
Dict
]]:
if
y
.
ndim
==
1
:
if
y
.
ndim
==
1
:
y
=
y
.
reshape
((
-
1
,
1
))
y
=
y
.
reshape
((
-
1
,
1
))
if
weights
is
None
:
weights
=
np
.
ones
(
len
(
y
),
dtype
=
float
)
output_dict
=
{}
output_dict
=
{}
if
detail
:
if
detail
:
...
@@ -37,17 +41,21 @@ def neutralize(x: np.ndarray,
...
@@ -37,17 +41,21 @@ def neutralize(x: np.ndarray,
if
detail
:
if
detail
:
for
diff_loc
in
index_diff
:
for
diff_loc
in
index_diff
:
curr_idx
=
order
[
start
:
diff_loc
+
1
]
curr_idx
=
order
[
start
:
diff_loc
+
1
]
curr_x
,
b
=
_sub_step
(
x
,
y
,
curr_idx
,
res
)
curr_x
,
b
=
_sub_step
(
x
,
y
,
weights
,
curr_idx
,
res
)
exposure
[
curr_idx
,
:,
:]
=
b
exposure
[
curr_idx
,
:,
:]
=
b
explained
[
curr_idx
]
=
ls_explain
(
curr_x
,
b
)
explained
[
curr_idx
]
=
ls_explain
(
curr_x
,
b
)
start
=
diff_loc
+
1
start
=
diff_loc
+
1
else
:
else
:
for
diff_loc
in
index_diff
:
for
diff_loc
in
index_diff
:
curr_idx
=
order
[
start
:
diff_loc
+
1
]
curr_idx
=
order
[
start
:
diff_loc
+
1
]
_sub_step
(
x
,
y
,
curr_idx
,
res
)
_sub_step
(
x
,
y
,
weights
,
curr_idx
,
res
)
start
=
diff_loc
+
1
start
=
diff_loc
+
1
else
:
else
:
b
=
ls_fit
(
x
,
y
)
try
:
b
=
ls_fit
(
x
,
y
,
weights
)
except
ValueError
:
b
=
ls_fit_pinv
(
x
,
y
,
weights
)
res
=
ls_res
(
x
,
y
,
b
)
res
=
ls_res
(
x
,
y
,
b
)
if
detail
:
if
detail
:
...
@@ -60,17 +68,26 @@ def neutralize(x: np.ndarray,
...
@@ -60,17 +68,26 @@ def neutralize(x: np.ndarray,
return
res
return
res
@
nb
.
njit
(
nogil
=
True
,
cache
=
True
)
def
_sub_step
(
x
,
y
,
w
,
curr_idx
,
res
)
->
Tuple
[
np
.
ndarray
,
np
.
ndarray
]:
def
_sub_step
(
x
,
y
,
curr_idx
,
res
)
->
Tuple
[
np
.
ndarray
,
np
.
ndarray
]:
curr_x
,
curr_y
,
curr_w
=
x
[
curr_idx
],
y
[
curr_idx
],
w
[
curr_idx
]
curr_x
,
curr_y
=
x
[
curr_idx
],
y
[
curr_idx
]
try
:
b
=
ls_fit
(
curr_x
,
curr_y
)
b
=
ls_fit
(
curr_x
,
curr_y
,
curr_w
)
except
ValueError
:
b
=
ls_fit_pinv
(
curr_x
,
curr_y
,
curr_w
)
res
[
curr_idx
]
=
ls_res
(
curr_x
,
curr_y
,
b
)
res
[
curr_idx
]
=
ls_res
(
curr_x
,
curr_y
,
b
)
return
curr_x
,
b
return
curr_x
,
b
@
nb
.
njit
(
nogil
=
True
,
cache
=
True
)
@
nb
.
njit
(
nogil
=
True
,
cache
=
True
)
def
ls_fit
(
x
:
np
.
ndarray
,
y
:
np
.
ndarray
)
->
np
.
ndarray
:
def
ls_fit
(
x
:
np
.
ndarray
,
y
:
np
.
ndarray
,
w
:
np
.
ndarray
)
->
np
.
ndarray
:
x_bar
=
x
.
T
x_bar
=
x
.
T
*
w
b
=
np
.
linalg
.
solve
(
x_bar
@
x
,
x_bar
@
y
)
return
b
@
nb
.
njit
(
nogil
=
True
,
cache
=
True
)
def
ls_fit_pinv
(
x
:
np
.
ndarray
,
y
:
np
.
ndarray
,
w
:
np
.
ndarray
)
->
np
.
ndarray
:
x_bar
=
x
.
T
*
w
b
=
np
.
linalg
.
pinv
(
x_bar
@
x
)
@
x_bar
@
y
b
=
np
.
linalg
.
pinv
(
x_bar
@
x
)
@
x_bar
@
y
return
b
return
b
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment