public void ClusterNmf(int numClusters, string path) { var data = _dataset.AllSamples.Select(ir => new { Row = _userMapping.ToInternalID(ir.User.Id), Col = _itemMapping.ToInternalID(ir.Item.Id), Value = Convert.ToDouble(ir.Rating) }).ToList(); File.WriteAllLines(path + ".data", data.Select(d => string.Format("{0},{1},{2}", d.Row, d.Col, d.Value)).ToList()); var rows = data.Select(d => d.Row).ToArray(); var colums = data.Select(d => d.Col).ToArray(); var values = data.Select(d => d.Value).ToArray(); int numRows = rows.Max(); int numCols = colums.Max(); Console.WriteLine("Creating sparse matrix...\nNum users: {0} Num items: {1} Num ratings: {2}", numRows, numCols, values.Count()); SparseCompressedColumnMatrix sparseMatrix = Matrix.CreateSparse(numRows + 1, numCols + 1, rows, colums, values); var nmf = new NonNegativeMatrixFactorization(sparseMatrix, numClusters); Console.WriteLine("Decomposing..."); nmf.Decompose(); Console.WriteLine("Writing decompose matrixes..."); var lf = nmf.LeftFactor.ToArray(MatrixElementOrder.RowMajor); var rf = nmf.RightFactor.ToArray(MatrixElementOrder.RowMajor); var lfWriter = new StreamWriter(path + ".lf"); var rfWriter = new StreamWriter(path + ".rf"); for (int i = 0; i < lf.Length; i++) { if (i != 0 && i % numClusters == 0) { lfWriter.WriteLine(); } lfWriter.Write(lf[i] + " "); } lfWriter.Close(); for (int i = 0; i < rf.Length; i++) { if (i != 0 && i % numClusters == 0) { rfWriter.WriteLine(); } rfWriter.Write(rf[i] + " "); } rfWriter.Close(); Console.WriteLine("Finished writing."); }
public void ClusterNmf(int numClusters, string path) { var data = _dataset.AllSamples.Select(ir => new { Row = _userMapping.ToInternalID(ir.User.Id), Col = _itemMapping.ToInternalID(ir.Item.Id), Value = Convert.ToDouble(ir.Rating) }).ToList(); File.WriteAllLines(path + ".data", data.Select(d => string.Format("{0},{1},{2}", d.Row, d.Col, d.Value)).ToList()); var rows = data.Select(d => d.Row).ToArray(); var colums = data.Select(d => d.Col).ToArray(); var values = data.Select(d => d.Value).ToArray(); int numRows = rows.Max(); int numCols = colums.Max(); Console.WriteLine("Creating sparse matrix...\nNum users: {0} Num items: {1} Num ratings: {2}", numRows, numCols, values.Count()); SparseCompressedColumnMatrix sparseMatrix = Matrix.CreateSparse(numRows + 1, numCols + 1, rows, colums, values); var nmf = new NonNegativeMatrixFactorization(sparseMatrix, numClusters); Console.WriteLine("Decomposing..."); nmf.Decompose(); Console.WriteLine("Writing decompose matrixes..."); var lf = nmf.LeftFactor.ToArray(MatrixElementOrder.RowMajor); var rf = nmf.RightFactor.ToArray(MatrixElementOrder.RowMajor); var lfWriter = new StreamWriter(path + ".lf"); var rfWriter = new StreamWriter(path + ".rf"); for (int i = 0; i < lf.Length; i++) { if (i != 0 && i % numClusters == 0) { lfWriter.WriteLine(); } lfWriter.Write(lf[i] + " "); } lfWriter.Close(); for (int i = 0; i < rf.Length; i++) { if (i != 0 && i % numClusters == 0) { rfWriter.WriteLine(); } rfWriter.Write(rf[i] + " "); } rfWriter.Close(); Console.WriteLine("Finished writing."); }