def test_nmf(self): test_cases = [np.mat([[1,2,3],[2,4,6],[4,17,13]], dtype = np.double), np.mat([[1,0,0]], dtype = np.double)] for in_mat in test_cases: red = Nmf(2) d_mat = DenseMatrix(in_mat) #wd_init, hd_init = red.random_init(d_mat) wd_init, hd_init = red.v_col_init(d_mat) s_mat = SparseMatrix(in_mat) ws_init = SparseMatrix(wd_init) hs_init = SparseMatrix(hd_init) wd_mat, hd_mat = Linalg.nmf(d_mat, wd_init, hd_init) ws_mat, hs_mat = Linalg.nmf(s_mat, ws_init, hs_init) #TESTED IT AGAINST MATLAB IMPLEMENTATION - ALL GOOD #print wd_mat.mat #print hd_mat.mat #print ws_mat.mat.todense() #print hs_mat.mat.todense() print "V:", in_mat print "WH:", (ws_mat*hs_mat).mat.todense() np.testing.assert_array_almost_equal(wd_mat.mat, ws_mat.mat.todense(), 2) np.testing.assert_array_almost_equal(hd_mat.mat, hs_mat.mat.todense(), 2)
def test_nmf(self): test_cases = [np.mat([[1,2,3],[2,4,6],[4,17,13]], dtype = np.double), np.mat([[1,0,0]], dtype = np.double)] for in_mat in test_cases: red = Nmf(2) d_mat = DenseMatrix(in_mat) #wd_init, hd_init = red.random_init(d_mat) wd_init, hd_init = red.v_col_init(d_mat) s_mat = SparseMatrix(in_mat) ws_init = SparseMatrix(wd_init) hs_init = SparseMatrix(hd_init) wd_mat, hd_mat = Linalg.nmf(d_mat, wd_init, hd_init) ws_mat, hs_mat = Linalg.nmf(s_mat, ws_init, hs_init) #TESTED IT AGAINST MATLAB IMPLEMENTATION - ALL GOOD #print wd_mat.mat #print hd_mat.mat #print ws_mat.mat.todense() #print hs_mat.mat.todense() print "V:", in_mat print "WH:", (ws_mat*hs_mat).mat.todense() np.testing.assert_array_almost_equal(wd_mat.mat, ws_mat.mat.todense(), 2) np.testing.assert_array_almost_equal(hd_mat.mat, hs_mat.mat.todense(), 2)
def apply(self, matrix_): matrix_.assert_positive() #w_init, h_init = self.nndsvd_init(matrix_) w_init, h_init = self.v_col_init(matrix_) #w_init, h_init = self.random_init(matrix_) w, h = Linalg.nmf(matrix_, w_init, h_init) return w, Linalg.pinv(h)
def apply(self, matrix_): matrix_.assert_positive() #w_init, h_init = self.nndsvd_init(matrix_) w_init, h_init = self.v_col_init(matrix_) #w_init, h_init = self.random_init(matrix_) w, h = Linalg.nmf(matrix_, w_init, h_init) return w, Linalg.pinv(h)