@@ -293,22 +293,36 @@ def commit(self):
293
293
self ._transformed = self ._pca (self .data )
294
294
transformed = self ._transformed
295
295
296
+ if self ._variance_ratio is not None :
297
+ for var , explvar in zip (
298
+ transformed .domain .attributes ,
299
+ self ._variance_ratio [:self .ncomponents ]):
300
+ var .attributes ["variance" ] = round (explvar , 6 )
296
301
domain = Domain (
297
302
transformed .domain .attributes [:self .ncomponents ],
298
303
self .data .domain .class_vars ,
299
304
self .data .domain .metas
300
305
)
301
306
transformed = transformed .from_table (domain , transformed )
307
+
302
308
# prevent caching new features by defining compute_value
303
309
proposed = [a .name for a in self ._pca .orig_domain .attributes ]
304
310
meta_name = get_unique_names (proposed , 'components' )
305
- dom = Domain (
306
- [ContinuousVariable (name , compute_value = lambda _ : None )
307
- for name in proposed ],
308
- metas = [StringVariable (name = meta_name )])
311
+ meta_vars = [StringVariable (name = meta_name )]
309
312
metas = numpy .array ([['PC{}' .format (i + 1 )
310
313
for i in range (self .ncomponents )]],
311
314
dtype = object ).T
315
+ if self ._variance_ratio is not None :
316
+ variance_name = get_unique_names (proposed , "variance" )
317
+ meta_vars .append (ContinuousVariable (variance_name ))
318
+ metas = numpy .hstack (
319
+ (metas ,
320
+ self ._variance_ratio [:self .ncomponents , None ]))
321
+
322
+ dom = Domain (
323
+ [ContinuousVariable (name , compute_value = lambda _ : None )
324
+ for name in proposed ],
325
+ metas = meta_vars )
312
326
components = Table (dom , self ._pca .components_ [:self .ncomponents ],
313
327
metas = metas )
314
328
components .name = 'components'
0 commit comments