コード例 #1
0
        /**
         * Use equilateral encoding to encode a column, use zero for the off value and one for the on value.
         * <p/>
         * http://www.heatonresearch.com/wiki/Equilateral
         *
         * @param column   The column to use.
         * @param offValue The off value to use.
         * @param onValue  The on value to use.
         * @return The column to index mapping (the same result as calling enumerateClasses).
         */

        public IDictionary <string, int> EncodeEquilateral(int column, double offValue, double onValue)
        {
            // remember the column name
            var name = _headers[column];

            // make space for it
            var classes    = EnumerateClasses(column);
            var classCount = classes.Count;

            InsertColumns(column + 1, classCount - 1);

            // perform the equilateral
            var eq = new Equilateral(classCount, offValue, onValue);

            foreach (var obj in _data)
            {
                var index = classes[obj[column].ToString()];

                var encoded = eq.Encode(index);

                for (var i = 0; i < classCount - 1; i++)
                {
                    obj[column + i] = encoded[i];
                }
            }

            // name the new columns
            for (var i = 0; i < classes.Count; i++)
            {
                _headers[column + i] = name + "-" + i;
            }

            return(classes);
        }
コード例 #2
0
ファイル: SimpleLearn.cs プロジェクト: danielmarcelino/aifh
        /// <summary>
        ///     Query a regression algorithm using equilateral encoding.
        /// </summary>
        /// <param name="alg">The algorithm being used.</param>
        /// <param name="theTrainingData">The training data.</param>
        /// <param name="items">The category items classified.</param>
        /// <param name="high">The high value.</param>
        /// <param name="low">The low value.</param>
        public static void QueryEquilateral(
            IRegressionAlgorithm alg,
            IList<BasicData> theTrainingData,
            IDictionary<string, int> items,
            double high, double low)
        {
            // first, we need to invert the items.  Right now it maps from category to index.  We need index to category.
            IDictionary<int, string> invMap = new Dictionary<int, string>();
            foreach (var key in items.Keys)
            {
                var value = items[key];
                invMap[value] = key;
            }

            // now we can query
            var eq = new Equilateral(items.Count, high, low);
            foreach (var data in theTrainingData)
            {
                var output = alg.ComputeRegression(data.Input);
                var idealIndex = eq.Decode(data.Ideal);
                var actualIndex = eq.Decode(output);
                Console.WriteLine(VectorUtil.DoubleArrayToString(data.Input) + " -> " + invMap[actualIndex]
                                  + ", Ideal: " + invMap[idealIndex]);
            }
        }
コード例 #3
0
ファイル: DataSet.cs プロジェクト: legendvijay/aifh
        /**
         * Use equilateral encoding to encode a column, use zero for the off value and one for the on value.
         * <p/>
         * http://www.heatonresearch.com/wiki/Equilateral
         *
         * @param column   The column to use.
         * @param offValue The off value to use.
         * @param onValue  The on value to use.
         * @return The column to index mapping (the same result as calling enumerateClasses).
         */

        public IDictionary<string, int> EncodeEquilateral(int column, double offValue, double onValue)
        {
            // remember the column name
            var name = _headers[column];

            // make space for it
            var classes = EnumerateClasses(column);
            var classCount = classes.Count;
            InsertColumns(column + 1, classCount - 1);

            // perform the equilateral
            var eq = new Equilateral(classCount, offValue, onValue);

            foreach (var obj in _data)
            {
                var index = classes[obj[column].ToString()];

                var encoded = eq.Encode(index);

                for (var i = 0; i < classCount - 1; i++)
                {
                    obj[column + i] = encoded[i];
                }
            }

            // name the new columns
            for (var i = 0; i < classes.Count; i++)
            {
                _headers[column + i] = name + "-" + i;
            }

            return classes;
        }