@@ -43,13 +43,13 @@ class IncrementalLinearRegression(BaseLinearRegression):
4343 """
4444
4545 def __init__ (self , fit_intercept = True , copy_X = False , algorithm = "norm_eq" ):
46- module = self ._get_backend ("linear_model" , "regression" )
4746 super ().__init__ (fit_intercept = fit_intercept , copy_X = copy_X , algorithm = algorithm )
48- self ._partial_result = module . partial_train_result ()
47+ self ._reset ()
4948
5049 def _reset (self ):
51- module = self ._get_backend ("linear_model" , "regression" )
52- self ._partial_result = module .partial_train_result ()
50+ self ._partial_result = self ._get_backend (
51+ "linear_model" , "regression" , "partial_train_result"
52+ )
5353
5454 def partial_fit (self , X , y , queue = None ):
5555 """
@@ -74,26 +74,27 @@ def partial_fit(self, X, y, queue=None):
7474 """
7575 module = self ._get_backend ("linear_model" , "regression" )
7676
77- if not hasattr ( self , "_policy" ):
78- self . _policy = self ._get_policy (queue , X )
77+ self . _queue = queue
78+ policy = self ._get_policy (queue , X )
7979
80- X , y = _convert_to_supported (self . _policy , X , y )
80+ X , y = _convert_to_supported (policy , X , y )
8181
8282 if not hasattr (self , "_dtype" ):
8383 self ._dtype = get_dtype (X )
8484 self ._params = self ._get_onedal_params (self ._dtype )
8585
86- y = np .asarray (y ).astype (dtype = self ._dtype )
87- self ._y_ndim_1 = y .ndim == 1
86+ y = np .asarray (y , dtype = self ._dtype )
8887
89- X , y = _check_X_y (X , y , dtype = [np .float64 , np .float32 ], accept_2d_y = True )
88+ X , y = _check_X_y (
89+ X , y , dtype = [np .float64 , np .float32 ], accept_2d_y = True , force_all_finite = False
90+ )
9091
9192 self .n_features_in_ = _num_features (X , fallback_1d = True )
9293 X_table , y_table = to_table (X , y )
9394 hparams = get_hyperparameters ("linear_regression" , "train" )
9495 if hparams is not None and not hparams .is_default :
9596 self ._partial_result = module .partial_train (
96- self . _policy ,
97+ policy ,
9798 self ._params ,
9899 hparams .backend ,
99100 self ._partial_result ,
@@ -102,7 +103,7 @@ def partial_fit(self, X, y, queue=None):
102103 )
103104 else :
104105 self ._partial_result = module .partial_train (
105- self . _policy , self ._params , self ._partial_result , X_table , y_table
106+ policy , self ._params , self ._partial_result , X_table , y_table
106107 )
107108
108109 def finalize_fit (self , queue = None ):
@@ -113,36 +114,36 @@ def finalize_fit(self, queue=None):
113114 Parameters
114115 ----------
115116 queue : dpctl.SyclQueue
116- Not used here, added for API conformance
117+ If not None, use this queue for computations.
117118
118119 Returns
119120 -------
120121 self : object
121122 Returns the instance itself.
122123 """
124+
125+ if queue is not None :
126+ policy = self ._get_policy (queue )
127+ else :
128+ policy = self ._get_policy (self ._queue )
129+
123130 module = self ._get_backend ("linear_model" , "regression" )
124131 hparams = get_hyperparameters ("linear_regression" , "train" )
125132 if hparams is not None and not hparams .is_default :
126133 result = module .finalize_train (
127- self . _policy , self ._params , hparams .backend , self ._partial_result
134+ policy , self ._params , hparams .backend , self ._partial_result
128135 )
129136 else :
130- result = module .finalize_train (
131- self ._policy , self ._params , self ._partial_result
132- )
137+ result = module .finalize_train (policy , self ._params , self ._partial_result )
133138
134139 self ._onedal_model = result .model
135140
136141 packed_coefficients = from_table (result .model .packed_coefficients )
137142 self .coef_ , self .intercept_ = (
138- packed_coefficients [:, 1 :],
139- packed_coefficients [:, 0 ],
143+ packed_coefficients [:, 1 :]. squeeze () ,
144+ packed_coefficients [:, 0 ]. squeeze () ,
140145 )
141146
142- if self .coef_ .shape [0 ] == 1 and self ._y_ndim_1 :
143- self .coef_ = self .coef_ .ravel ()
144- self .intercept_ = self .intercept_ [0 ]
145-
146147 return self
147148
148149
@@ -203,8 +204,7 @@ def partial_fit(self, X, y, queue=None):
203204 """
204205 module = self ._get_backend ("linear_model" , "regression" )
205206
206- if not hasattr (self , "_queue" ):
207- self ._queue = queue
207+ self ._queue = queue
208208 policy = self ._get_policy (queue , X )
209209
210210 X , y = _convert_to_supported (policy , X , y )
@@ -213,9 +213,11 @@ def partial_fit(self, X, y, queue=None):
213213 self ._dtype = get_dtype (X )
214214 self ._params = self ._get_onedal_params (self ._dtype )
215215
216- y = np .asarray (y ). astype ( dtype = self ._dtype )
216+ y = np .asarray (y , dtype = self ._dtype )
217217
218- X , y = _check_X_y (X , y , dtype = [np .float64 , np .float32 ], accept_2d_y = True )
218+ X , y = _check_X_y (
219+ X , y , dtype = [np .float64 , np .float32 ], accept_2d_y = True , force_all_finite = False
220+ )
219221
220222 self .n_features_in_ = _num_features (X , fallback_1d = True )
221223 X_table , y_table = to_table (X , y )
0 commit comments