def run(self, data):
"""Compute biclustering.
Parameters
----------
data : numpy.ndarray
"""
data = check_array(data, dtype=np.double, copy=True)
self._validate_parameters()
residuals = np.copy(data)
num_rows, num_cols = residuals.shape
biclusters, layers = [], []
if self.fit_background_layer:
background_layer = self._create_layer(residuals)
layers.append(background_layer)
residuals -= background_layer
biclusters.append(Bicluster(np.arange(num_rows), np.arange(num_cols)))
for i in range(self.num_biclusters):
rows, cols, bicluster_layer = self._fit_layer(residuals)
if len(rows) == 0 or len(cols) == 0 or not self._is_significant(residuals, bicluster_layer):
break
residuals[rows[:, np.newaxis], cols] -= bicluster_layer
layers.append(bicluster_layer)
biclusters.append(Bicluster(rows, cols))
self._back_fitting(residuals, layers, biclusters)
biclustering = Biclustering(biclusters)
if self.fit_background_layer:
biclusters.pop(0)
return biclustering
评论列表
文章目录