@@ -137,6 +137,43 @@ def test_pca_randomized_solver():
137
137
svd_solver = 'randomized' , random_state = 0 ).svd_solver )
138
138
139
139
140
+ def test_pca_lobpcg_solver ():
141
+ # PCA on dense arrays
142
+ X = iris .data
143
+
144
+ # Loop excluding the 0, invalid for lobpcg
145
+ for n_comp in np .arange (1 , X .shape [1 ]):
146
+ pca = PCA (n_components = n_comp , svd_solver = 'lobpcg' , random_state = 0 )
147
+
148
+ X_r = pca .fit (X ).transform (X )
149
+ np .testing .assert_equal (X_r .shape [1 ], n_comp )
150
+
151
+ X_r2 = pca .fit_transform (X )
152
+ assert_array_almost_equal (X_r , X_r2 )
153
+
154
+ X_r = pca .transform (X )
155
+ assert_array_almost_equal (X_r , X_r2 )
156
+
157
+ # Test get_covariance and get_precision
158
+ cov = pca .get_covariance ()
159
+ precision = pca .get_precision ()
160
+ assert_array_almost_equal (np .dot (cov , precision ),
161
+ np .eye (X .shape [1 ]), 12 )
162
+
163
+ pca = PCA (n_components = 0 , svd_solver = 'lobpcg' , random_state = 0 )
164
+ assert_raises (ValueError , pca .fit , X )
165
+
166
+ pca = PCA (n_components = 0 , svd_solver = 'lobpcg' , random_state = 0 )
167
+ assert_raises (ValueError , pca .fit , X )
168
+ # Check internal state
169
+ assert_equal (pca .n_components ,
170
+ PCA (n_components = 0 ,
171
+ svd_solver = 'lobpcg' , random_state = 0 ).n_components )
172
+ assert_equal (pca .svd_solver ,
173
+ PCA (n_components = 0 ,
174
+ svd_solver = 'lobpcg' , random_state = 0 ).svd_solver )
175
+
176
+
140
177
def test_no_empty_slice_warning ():
141
178
# test if we avoid numpy warnings for computing over empty arrays
142
179
n_components = 10
0 commit comments