示例#1
0
        static void Main(string[] args)
        {
            Console.WriteLine("Similarity & Distance Examples");
            Console.WriteLine("------------------------------");
            Console.WriteLine(Environment.NewLine);

            InsightVector u = new InsightVector(new double[] { 1, 2, 3, 4, 5 });
            Console.WriteLine("Vector u:");
            Console.WriteLine(u.ToString());
            Console.WriteLine(Environment.NewLine);

            InsightVector v = new InsightVector(new double[] { 5, 4, 3, 2, 1 });
            Console.WriteLine("Vector v:");
            Console.WriteLine(v.ToString());
            Console.WriteLine(Environment.NewLine);

            double distance = u.DistanceFrom(v);
            Console.WriteLine("Euclidean distance (u, v) = {0}", distance.ToString("F4"));
            Console.WriteLine(Environment.NewLine);

            distance = u.DistanceFrom(v, DistanceMethod.HammingDistance);
            Console.WriteLine("Hamming distance (u, v) = {0}", distance.ToString("F4"));
            Console.WriteLine(Environment.NewLine);

            distance = u.DistanceFrom(v, DistanceMethod.ManhattanDistance);
            Console.WriteLine("Manhattan distance (u, v) = {0}", distance.ToString("F4"));
            Console.WriteLine(Environment.NewLine);

            double similarity = u.SimilarityTo(v);
            Console.WriteLine("Cosine similarity (u, v) = {0}", similarity.ToString("F4"));
            Console.WriteLine(Environment.NewLine);

            similarity = u.SimilarityTo(v, SimilarityMethod.JaccardCoefficient);
            Console.WriteLine("Jaccard coefficient (u, v) = {0}", similarity.ToString("F4"));
            Console.WriteLine(Environment.NewLine);

            similarity = u.SimilarityTo(v, SimilarityMethod.PearsonCorrelation);
            Console.WriteLine("Pearson correlation (u, v) = {0}", similarity.ToString("F4"));
            Console.WriteLine(Environment.NewLine);

            Console.ReadKey();

            Console.WriteLine(Environment.NewLine);
            Console.WriteLine("Covariance & Correlation Examples");
            Console.WriteLine("------------------------------");
            Console.WriteLine(Environment.NewLine);

            InsightMatrix matrix = new InsightMatrix(new double[,] {
                { 2.1, 8 }, { 2.5, 12 }, { 4.0, 14 }, { 3.6, 10 }
            });

            Console.WriteLine("Example matrix:");
            Console.WriteLine(matrix.ToString());
            Console.WriteLine(Environment.NewLine);

            var cov = matrix.CovarianceMatrix();
            Console.WriteLine("Covariance matrix:");
            Console.WriteLine(cov.ToString());
            Console.WriteLine(Environment.NewLine);

            var cor = matrix.CorrelationMatrix();
            Console.WriteLine("Correlation matrix:");
            Console.WriteLine(cor.ToString());
            Console.WriteLine(Environment.NewLine);

            Console.ReadKey();

            Console.WriteLine(Environment.NewLine);
            Console.WriteLine("Feature Extraction Examples");
            Console.WriteLine("------------------------------");
            Console.WriteLine(Environment.NewLine);

            InsightMatrix matrix2 = new InsightMatrix(new double[,] {
                { 2.5, 2.4 }, { 0.5, 0.7 }, { 2.2, 2.9 }, { 1.9, 2.2 }, { 3.1, 3.0 }, { 2.3, 2.7 },
                { 2.0, 1.6 }, { 1.0, 1.1 }, { 1.5, 1.6 }, { 1.1, 0.9 }
            });
            Console.WriteLine("First test matrix:");
            Console.WriteLine(matrix2.ToString());
            Console.WriteLine(Environment.NewLine);

            var pca = matrix2.ExtractFeatures(ExtractionMethod.PrincipalComponentAnalysis, 1);
            Console.WriteLine("Result of principal components analysis:");
            Console.WriteLine(pca.ToString());
            Console.WriteLine(Environment.NewLine);

            var svd = matrix2.ExtractFeatures(ExtractionMethod.SingularValueDecomposition, 1);
            Console.WriteLine("Result of singular value decomposition:");
            Console.WriteLine(svd.ToString());
            Console.WriteLine(Environment.NewLine);

            InsightMatrix matrix3 = new InsightMatrix(new double[,] {
                { 4, 2, 1 }, { 2, 4, 1 }, { 2, 3, 1 }, { 3, 6, 1 }, { 4, 4, 1 },
                { 9, 10, 2 }, { 6, 8, 2 }, { 9, 5, 2 }, { 8, 7, 2 }, { 10, 8, 2 }
            });
            Console.WriteLine("Second test matrix:");
            Console.WriteLine(matrix3.ToString());
            Console.WriteLine(Environment.NewLine);

            var lda = matrix3.ExtractFeatures(ExtractionMethod.LinearDiscriminantAnalysis);
            Console.WriteLine("Result of linear discriminant analysis:");
            Console.WriteLine(lda.ToString());
            Console.WriteLine(Environment.NewLine);

            Console.ReadKey();

            Console.WriteLine(Environment.NewLine);
            Console.WriteLine("Optimization Examples");
            Console.WriteLine("------------------------------");
            Console.WriteLine(Environment.NewLine);

            var simpleHillClimber = new SimpleHillClimbing<double>();
            var transforms = new List<Func<double, double>>();
            transforms.Add(x => x + 1);
            transforms.Add(x => x - 1);
            transforms.Add(x => x + 0.3);
            transforms.Add(x => x - 0.3);
            transforms.Add(x => x + 0.1);
            transforms.Add(x => x - 0.1);
            var solution = simpleHillClimber.FindMaxima(
                0,
                transforms,
                x => Math.Abs(x) - (x * x));
            Console.WriteLine("Simple hill climber solution = {0}", solution.Solution);
            Console.WriteLine("Simple hill climber score = {0}", solution.Score);
            Console.WriteLine(Environment.NewLine);

            var steepestAscentHillClimber = new SteepestAscentHillClimbing<double>();
            var solution2 = steepestAscentHillClimber.FindMaxima(
                0,
                transforms,
                x => Math.Abs(x) - (x * x));
            Console.WriteLine("Steepest ascent hill climber solution = {0}", solution2.Solution);
            Console.WriteLine("Steepest ascent hill climber score = {0}", solution2.Score);
            Console.WriteLine(Environment.NewLine);

            var stocasticHillClimber = new StochasticHillClimbing<double>();
            var solution3 = stocasticHillClimber.FindMaxima(
                0,
                transforms,
                x => Math.Abs(x) - (x * x));
            Console.WriteLine("Stocastic hill climber solution = {0}", solution3.Solution);
            Console.WriteLine("Stocastic hill climber score = {0}", solution3.Score);
            Console.WriteLine(Environment.NewLine);

            Console.ReadKey();

            Console.WriteLine(Environment.NewLine);
            Console.WriteLine("Data Loading Examples");
            Console.WriteLine("------------------------------");
            Console.WriteLine(Environment.NewLine);

            InsightMatrix iris = DataLoader.ImportFromCSV("../../../data/iris.data", ',', false, true);

            Console.WriteLine("Iris data set:");
            Console.WriteLine(iris.ToString());

            Console.ReadKey();

            Console.WriteLine(Environment.NewLine);
            Console.WriteLine("Clustering Examples");
            Console.WriteLine("------------------------------");
            Console.WriteLine(Environment.NewLine);

            var clusterResults = iris.Cluster(ClusteringMethod.KMeans);
            Console.WriteLine("K-Means");
            Console.WriteLine("Distortion = {0}", clusterResults.Distortion);
            Console.WriteLine("Centroids:");
            Console.WriteLine(clusterResults.Centroids.ToString());

            Console.ReadKey();

            var clusterResults2 = iris.Cluster(ClusteringMethod.KMeans, DistanceMethod.EuclideanDistance, 3, 10);
            Console.WriteLine("K-Means (best of 10)");
            Console.WriteLine("Distortion = {0}", clusterResults.Distortion);
            Console.WriteLine("Centroids:");
            Console.WriteLine(clusterResults.Centroids.ToString());

            Console.ReadKey();

            Console.WriteLine(Environment.NewLine);
            Console.WriteLine("Linear Regression");
            Console.WriteLine("------------------------------");
            Console.WriteLine(Environment.NewLine);

            Console.WriteLine("Loading regression sample data...");
            InsightMatrix data1 = DataLoader.ImportFromCSV("../../../data/ex1data1.txt", ',', false, false);

            Console.WriteLine("Training model...");
            var model1 = new LinearRegression();
            model1.Train(data1);
            Console.WriteLine("Model training complete.  Parameters:");
            Console.WriteLine(model1.Theta.ToString());
            Console.WriteLine(model1.Error.ToString());

            Console.WriteLine("Predicting output for first data point...");
            data1 = data1.RemoveColumn(data1.ColumnCount - 1);
            var prediction = model1.Predict(data1.Row(0));
            Console.WriteLine("Prediction = {0}", prediction);

            Console.ReadKey();

            Console.WriteLine(Environment.NewLine);
            Console.WriteLine("Logistic Regression");
            Console.WriteLine("------------------------------");
            Console.WriteLine(Environment.NewLine);

            Console.WriteLine("Loading classification sample data...");
            InsightMatrix data2 = DataLoader.ImportFromCSV("../../../data/ex2data1.txt", ',', false, false);

            Console.WriteLine("Training model...");
            var model2 = new LogisticRegression();
            model2.Train(data2);
            Console.WriteLine("Model training complete.  Parameters:");
            Console.WriteLine(model2.Theta.ToString());
            Console.WriteLine(model2.Error.ToString());

            Console.WriteLine("Predicting output for first data point...");
            data2 = data2.RemoveColumn(data2.ColumnCount - 1);
            var classification = model2.Classify(data2.Row(0));
            Console.WriteLine("Classification = {0}", classification);

            Console.ReadKey();
        }