///
        public override void LearnAttributeToFactorMapping()
        {
            this.factor_bias = new float[num_factors];

            for (int i = 0; i < num_factors; i++)
            {
                factor_bias[i] = MatrixExtensions.ColumnAverage(item_factors, i);
                Console.Error.WriteLine("fb {0}: {1}", i, factor_bias[i]);
            }

            this.attribute_to_factor = new Matrix <float>(NumItemAttributes, num_factors);
            MatrixExtensions.InitNormal(attribute_to_factor, InitMean, InitStdDev);

            for (int i = 0; i < num_iter_mapping; i++)
            {
                IterateMapping();
            }

            _MapToLatentFactorSpace = Utils.Memoize <int, float[]>(__MapToLatentFactorSpace);
        }