Example #1
0
        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.");
        }
Example #2
0
        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.");
        }