99in :class:`FastCan`.
1010"""
1111
12- # Authors: Sikai Zhang
12+ # Authors: The fastcan developers
1313# SPDX-License-Identifier: MIT
1414
1515# %%
2828# property, so that the usefullness of each feature can be added together without
2929# redundancy.
3030
31-
3231import matplotlib .pyplot as plt
3332import numpy as np
3433from matplotlib .patches import Patch
3736
3837from fastcan import FastCan
3938
40- plt .rcParams ['axes.spines.right' ] = False
41- plt .rcParams ['axes.spines.top' ] = False
39+ plt .rcParams ["axes.spines.right" ] = False
40+ plt .rcParams ["axes.spines.top" ] = False
41+
4242
4343def get_r2 (feats , target , feats_selected = None ):
4444 """Get R-squared between [feats_selected, feat_i] and target."""
@@ -54,36 +54,38 @@ def get_r2(feats, target, feats_selected=None):
5454 r2 [i ] = lr .fit (feats_i , target ).score (feats_i , target )
5555 return r2
5656
57+
5758def plot_bars (ids , r2_left , r2_selected ):
5859 """Plot the relative R-squared with a bar plot."""
59- legend_selected = Patch (color = ' tab:green' , label = ' X_selected' )
60- legend_cand = Patch (color = ' tab:blue' , label = ' x_i: candidates' )
61- legend_best = Patch (color = ' tab:orange' , label = ' Best candidate' )
60+ legend_selected = Patch (color = " tab:green" , label = " X_selected" )
61+ legend_cand = Patch (color = " tab:blue" , label = " x_i: candidates" )
62+ legend_best = Patch (color = " tab:orange" , label = " Best candidate" )
6263 n_features = len (ids )
6364 n_selected = len (r2_selected )
6465
65- left = np .zeros (n_features )+ sum (r2_selected )
66+ left = np .zeros (n_features ) + sum (r2_selected )
6667 left_selected = np .cumsum (r2_selected )
6768 left_selected = np .r_ [0 , left_selected ]
6869 left_selected = left_selected [:- 1 ]
6970 left [:n_selected ] = left_selected
7071
71- label = ["" ]* n_features
72- label [np .argmax (r2_left )+ n_selected ] = f"{ max (r2_left ):.5f} "
72+ label = ["" ] * n_features
73+ label [np .argmax (r2_left ) + n_selected ] = f"{ max (r2_left ):.5f} "
7374
74- colors = ["tab:blue" ]* (n_features - n_selected )
75+ colors = ["tab:blue" ] * (n_features - n_selected )
7576 colors [np .argmax (r2_left )] = "tab:orange"
76- colors = ["tab:green" ]* n_selected + colors
77+ colors = ["tab:green" ] * n_selected + colors
7778
7879 hbars = plt .barh (ids , width = np .r_ [score_selected , r2_left ], color = colors , left = left )
79- plt .axvline (x = sum (r2_selected ), color = ' tab:orange' , linestyle = "--" )
80+ plt .axvline (x = sum (r2_selected ), color = " tab:orange" , linestyle = "--" )
8081 plt .bar_label (hbars , label )
8182 plt .yticks (np .arange (n_features ))
8283 plt .xlabel ("R-squared between [X_selected, x_i] and y" )
8384 plt .ylabel ("Feature index" )
8485 plt .legend (handles = [legend_selected , legend_cand , legend_best ])
8586 plt .show ()
8687
88+
8789X , y = load_diabetes (return_X_y = True )
8890
8991
@@ -92,7 +94,6 @@ def plot_bars(ids, r2_left, r2_selected):
9294score_selected = []
9395
9496
95-
9697score_0 = get_r2 (X , y )
9798
9899plot_bars (id_left , score_0 , score_selected )
@@ -114,13 +115,12 @@ def plot_bars(ids, r2_left, r2_selected):
114115id_selected += [id_left [index ]]
115116score_selected += [score_0 [index ]]
116117id_left = np .delete (id_left , index )
117- score_1 = get_r2 (X [:, id_left ], y , X [:, id_selected ])- sum (score_selected )
118+ score_1 = get_r2 (X [:, id_left ], y , X [:, id_selected ]) - sum (score_selected )
118119
119120
120121plot_bars (np .r_ [id_selected , id_left ], score_1 , score_selected )
121122
122123
123-
124124# %%
125125# Select the third feature
126126# ------------------------
@@ -133,12 +133,11 @@ def plot_bars(ids, r2_left, r2_selected):
133133id_selected += [id_left [index ]]
134134score_selected += [score_1 [index ]]
135135id_left = np .delete (id_left , index )
136- score_2 = get_r2 (X [:, id_left ], y , X [:, id_selected ])- sum (score_selected )
136+ score_2 = get_r2 (X [:, id_left ], y , X [:, id_selected ]) - sum (score_selected )
137137
138138plot_bars (np .r_ [id_selected , id_left ], score_2 , score_selected )
139139
140140
141-
142141# %%
143142# h-correlation and eta-cosine
144143# ----------------------------
@@ -180,7 +179,7 @@ def plot_bars(ids, r2_left, r2_selected):
180179score_selected = [score_0 [index ]]
181180id_left = np .arange (X .shape [1 ])
182181id_left = np .delete (id_left , index )
183- score_1_7 = get_r2 (X [:, id_left ], y , X [:, id_selected ])- sum (score_selected )
182+ score_1_7 = get_r2 (X [:, id_left ], y , X [:, id_selected ]) - sum (score_selected )
184183
185184plot_bars (np .r_ [id_selected , id_left ], score_1_7 , score_selected )
186185
0 commit comments