コード例 #1
0
        public ANEWEmotionSensor(string datadirectory)
        {
            // Data files contained in [datadrectory]/metrics
            string metricsdir = datadirectory + Path.DirectorySeparatorChar + "metrics" + Path.DirectorySeparatorChar;

            source  = new MemoizedSource <string, ThreeTuple <ContinuousDistribution, ContinuousDistribution, ContinuousDistribution> >(new ANEWFileSource(metricsdir + "anew.csv"));
            stemmer = new PorterStemmer();

            // These matrices are used in G emotion = vad
            // positives are mean > 5; negatives are mean < 5
            double[,] positives = new double[, ] {
                { .890, -.020, -.110, .116, -.035 },
                { .649, .139, -.287, .441, .051 },
                { .601, .153, -.305, .125, .042 }
            };
            double[,] positiveTs = new double[, ] {
                { 45.40, 0.73, 4.24, 4.95, 1.55 },
                { 19.75, 2.984, 6.57, 11.26, 1.36 },
                { 16.60, 2.98, 6.34, 2.88, 1.00 }
            };
            double[,] positiveSEs = Matrix.ElementwiseDivide(positives, positiveTs);
            double[,] negatives   = new double[, ] {
                { .291, -.044, -.515, .020, -.243 },
                { .050, .492, -.309, .670, -.042 },
                { .136, .369, -.625, -.144, .041 }
            };
            double[,] negativeTs = new double[, ] {
                { 8.91, 1.27, 13.80, 0.58, 8.27 },
                { 1.36, 12.59, 7.33, 17.11, 1.27 },
                { 2.93, 7.49, 11.75, 2.91, 0.98 }
            };
            double[,] negativeSEs = Matrix.ElementwiseDivide(negatives, negativeTs);

            ContinuousDistribution[,] randomPositives = RandomMatrix.MakeGaussians(positives, positiveSEs);
            ContinuousDistribution[,] randomNegatives = RandomMatrix.MakeGaussians(negatives, negativeSEs);

            positiveProduct = RandomMatrix.Multiply(RandomMatrix.Transpose(randomPositives),
                                                    RandomMatrix.Inverse(RandomMatrix.Multiply(randomPositives, RandomMatrix.Transpose(randomPositives))));
            negativeProduct = RandomMatrix.Multiply(RandomMatrix.Transpose(randomNegatives),
                                                    RandomMatrix.Inverse(RandomMatrix.Multiply(randomNegatives, RandomMatrix.Transpose(randomNegatives))));

            positiveMatrix = Matrix.Multiply(Matrix.Transpose(positives), Matrix.Inverse(Matrix.Multiply(positives, Matrix.Transpose(positives))));
            negativeMatrix = Matrix.Multiply(Matrix.Transpose(negatives), Matrix.Inverse(Matrix.Multiply(negatives, Matrix.Transpose(negatives))));
        }