Esempio n. 1
0
 public string writeModel(string outModelPath)
 {
     if (lr == null)
     {
         buildModel();
     }
     outPath = outModelPath;
     using (System.IO.StreamWriter sw = new System.IO.StreamWriter(outPath))
     {
         sw.WriteLine(modelTypes.LogisticRegression.ToString());
         sw.WriteLine(InTablePath);
         sw.WriteLine(String.Join(",", IndependentFieldNames));
         sw.WriteLine(String.Join(",", DependentFieldNames));
         sw.WriteLine(String.Join(",", ClassFieldNames));
         sw.WriteLine(String.Join(",", Categories));
         sw.WriteLine(NumberOfIndependentVariables.ToString());
         sw.WriteLine(NumberOfCategories.ToString());
         sw.WriteLine(LogLikelihood.ToString());
         sw.WriteLine(Deviance.ToString());
         sw.WriteLine(X2.ToString());
         sw.WriteLine(PValue.ToString());
         sw.WriteLine(String.Join(",", (from double d in minValues select d.ToString()).ToArray()));
         sw.WriteLine(String.Join(",", (from double d in maxValues select d.ToString()).ToArray()));
         sw.WriteLine(String.Join(",", (from double d in sumValues select d.ToString()).ToArray()));
         sw.WriteLine(String.Join(",", (from double d in Coefficients select d.ToString()).ToArray()));
         sw.WriteLine(String.Join(",", (from double d in StandardError select d.ToString()).ToArray()));
         sw.WriteLine(String.Join(",", (from Accord.Statistics.Testing.WaldTest d in WaldStatistic select d.Statistic.ToString()).ToArray()));
         sw.WriteLine(String.Join(",", (from Accord.Statistics.Testing.WaldTest d in WaldStatistic select d.PValue.ToString()).ToArray()));
         sw.Close();
     }
     return(outPath);
 }
Esempio n. 2
0
 public void getReport(double alpha)
 {
     Forms.RunningProcess.frmRunningProcessDialog rd = new Forms.RunningProcess.frmRunningProcessDialog(false);
     rd.Text               = "Logistic Regression Results";
     rd.TopLevel           = true;
     rd.pgbProcess.Visible = false;
     rd.FormBorderStyle    = System.Windows.Forms.FormBorderStyle.Sizable;
     rd.addMessage("LogLikelihood = " + LogLikelihood.ToString());
     rd.addMessage("Deviance = " + Deviance.ToString());
     rd.addMessage("Likelihood Ratio Chi-squared = " + X2.ToString() + " DF = " + DegreesOfFredom.ToString() + " p-value = " + PValue.ToString());
     rd.addMessage("\n\nClasses: " + String.Join(", ", Categories));
     rd.addMessage("Reference Class = " + Categories[0]);
     rd.addMessage("\nParameter coefficients:\n");
     rd.addMessage("intercept, " + String.Join(", ", IndependentFieldNames));
     rd.addMessage("Coef: " + String.Join(" ", (from double d in Coefficients select d.ToString()).ToArray()));
     rd.addMessage("STE:  " + String.Join(", ", (from double d in StandardError select d.ToString()).ToArray()));
     rd.addMessage("\n\nWald stats for coefficients:\nchi-sq: " + String.Join(", ", (from Accord.Statistics.Testing.WaldTest d in WaldStatistic select d.Statistic.ToString()).ToArray()));
     rd.addMessage("p-value: " + String.Join(", ", (from Accord.Statistics.Testing.WaldTest d in WaldStatistic select d.PValue.ToString()).ToArray()));
     try
     {
         if (ModelHelper.chartingAvailable() && System.Windows.Forms.MessageBox.Show("Do you want to build probability graphs?", "Graphs", System.Windows.Forms.MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
         {
             createRegChart();
         }
     }
     catch
     {
         System.Windows.Forms.MessageBox.Show("Cannot create charts");
     }
     rd.Show();
     rd.enableClose();
 }
Esempio n. 3
0
        private double[] PredictNextValue(IGaussianMixtureModelState model, IPredictionRequest request, double[][] trainingSet)
        {
            var N      = trainingSet.Length;
            var K      = trainingSet[0].Length;
            var result = new double[K];

            var yesterday           = trainingSet[N - 1];
            var yesterdayLikelihood = LogLikelihood.Calculate(new[] { yesterday }, model.Mixture.Coefficients, GetCovariances(model.Mixture.Components), GetMeans(model.Mixture.Components));

            Debug.WriteLine("Yesterday Likelihood : " + new Vector(yesterday) + " : " + yesterdayLikelihood + " ");

            var guessess       = FindMostSimilarObservations(model, trainingSet, yesterdayLikelihood, request.Tolerance);
            var bestGuessPlace = FindBestGuess(request, guessess);
            var tomorrow       = trainingSet[bestGuessPlace.PlaceInSequence + 1];
            var mostSimilar    = trainingSet[bestGuessPlace.PlaceInSequence];

            for (var k = 0; k < K; k++)
            {
                if (bestGuessPlace.PlaceInSequence != trainingSet.Length)
                {
                    result[k] = yesterday[k] + (tomorrow[k] - mostSimilar[k]);
                }
            }

            Debug.WriteLine("Predicted : " + new Vector(result) + " : " + LogLikelihood.Calculate(new[] { result }, model.Mixture.Coefficients, GetCovariances(model.Mixture.Components), GetMeans(model.Mixture.Components)));

            return(result);
        }
Esempio n. 4
0
 public void getReport(double alpha)
 {
     Forms.RunningProcess.frmRunningProcessDialog rd = new Forms.RunningProcess.frmRunningProcessDialog(false);
     rd.Text               = "GLM Results";
     rd.TopLevel           = true;
     rd.pgbProcess.Visible = false;
     rd.FormBorderStyle    = System.Windows.Forms.FormBorderStyle.Sizable;
     rd.addMessage("Dependent field = " + DependentFieldNames[0]);
     rd.addMessage("Independent fields = " + String.Join(", ", IndependentFieldNames));
     rd.addMessage("Sample size = " + SampleSize.ToString());
     rd.addMessage("Iteration = " + Iterations.ToString());
     rd.addMessage("Delta Convergence " + DeltaC.ToString());
     rd.addMessage("Chi-Sqr = " + ChiSquare.ToString() + " p-value = " + PValue.ToString());
     rd.addMessage("Deviance = " + Deviance.ToString());
     rd.addMessage("Log Likelihood = " + LogLikelihood.ToString());
     rd.addMessage("Log Likelihood Ratio = " + LogLikelihoodratio.ToString() + "\n\nCoefficents and standard errors:\n");
     rd.addMessage("Param: Intercept, " + String.Join(", ", IndependentFieldNames));
     rd.addMessage("Coef:  " + string.Join(", ", (from double d in Coefficients select d.ToString()).ToArray()));
     rd.addMessage("STE:   " + string.Join(", ", (from double d in StdError select d.ToString()).ToArray()) + "\n");
     try
     {
         if (ModelHelper.chartingAvailable() && System.Windows.Forms.MessageBox.Show("Do you want to build distribution graphs?", "Graphs", System.Windows.Forms.MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
         {
             createRegChart();
         }
     }
     catch
     {
         System.Windows.Forms.MessageBox.Show("Cannot create charts.");
     }
     rd.Show();
     rd.enableClose();
 }
Esempio n. 5
0
        /// <summary>
        ///     Fits Distribution parameters to given observation vector
        /// </summary>
        /// <param name="observations">Vector</param>
        /// <param name="weights">Vector</param>
        /// <param name="likelihood">Output value</param>
        /// <returns>IDistribution</returns>
        public override IDistribution Evaluate(double[][] observations, double[] weights, out double likelihood)
        {
            var mean       = Utils.Mean(observations, weights);
            var covariance = Utils.Covariance(observations, mean, weights);
            var result     = new NormalDistribution(mean, covariance);

            likelihood = LogLikelihood.Calculate(observations, result.Covariance, result.Mean);
            return(result);
        }
Esempio n. 6
0
 public void getReport(double alpha)
 {
     Forms.RunningProcess.frmRunningProcessDialog rd = new Forms.RunningProcess.frmRunningProcessDialog(false);
     rd.Text               = "PLR Results";
     rd.TopLevel           = true;
     rd.pgbProcess.Visible = false;
     rd.FormBorderStyle    = System.Windows.Forms.FormBorderStyle.Sizable;
     rd.addMessage("Iterations = " + NumberOfIterationsToConverge.ToString());
     rd.addMessage("Convergence = " + Delta.ToString());
     rd.addMessage("LogLikelihood = " + LogLikelihood.ToString());
     rd.addMessage("Deviance = " + Deviance.ToString());
     rd.addMessage("Likelihood Ratio Chi-squared = " + X2.ToString() + " DF = " + DegreesOfFredom.ToString() + " p-value = " + PValue.ToString());
     rd.addMessage("\n\nClasses: " + String.Join(", ", Categories));
     rd.addMessage("Reference Class = " + Categories[0]);
     rd.addMessage("\nParameter coefficients:\n");
     rd.addMessage("intercept, " + String.Join(", ", IndependentFieldNames));
     for (int i = 0; i < Coefficients.Length; i++)
     {
         double[] c = Coefficients[i];
         rd.addMessage(String.Join(" ", (from double d in c select d.ToString()).ToArray()));
     }
     rd.addMessage("\nParameter standard error:");
     for (int i = 0; i < StandardError.Length; i++)
     {
         double[] c = StandardError[i];
         rd.addMessage(String.Join(", ", (from double d in c select d.ToString()).ToArray()));
     }
     rd.addMessage("\nParameter Wald Chi-Squared:");
     for (int i = 0; i < WaldStatistic.Length; i++)
     {
         double[] c = WaldStatistic[i];
         rd.addMessage(String.Join(", ", (from double d in c select d.ToString()).ToArray()));
     }
     rd.addMessage("\nParameter Wald P-value:");
     for (int i = 0; i < WaldPvalue.Length; i++)
     {
         double[] c = WaldPvalue[i];
         rd.addMessage(String.Join(", ", (from double d in c select d.ToString()).ToArray()));
     }
     try
     {
         if (ModelHelper.chartingAvailable() && System.Windows.Forms.MessageBox.Show("Do you want to build probability graphs?", "Graphs", System.Windows.Forms.MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
         {
             regChart();
             //if (mlr == null) mlr = buildModel();
         }
     }
     catch
     {
         System.Windows.Forms.MessageBox.Show("Cannot create charts");
     }
     rd.Show();
     rd.enableClose();
 }
Esempio n. 7
0
 public string writeModel(string outModelPath)
 {
     if (mlr == null)
     {
         buildModel();
     }
     outPath = outModelPath;
     using (System.IO.StreamWriter sw = new System.IO.StreamWriter(outPath))
     {
         sw.WriteLine(modelTypes.PLR);
         sw.WriteLine(InTablePath);
         sw.WriteLine(String.Join(",", IndependentFieldNames));
         sw.WriteLine(String.Join(",", DependentFieldNames));
         sw.WriteLine(String.Join(",", ClassFieldNames));
         sw.WriteLine(String.Join(",", Categories));
         sw.WriteLine(NumberOfIndependentVariables.ToString());
         sw.WriteLine(NumberOfCategories.ToString());
         sw.WriteLine(Delta.ToString());
         sw.WriteLine(NumberOfIterationsToConverge.ToString());
         sw.WriteLine(LogLikelihood.ToString());
         sw.WriteLine(Deviance.ToString());
         sw.WriteLine(X2.ToString());
         sw.WriteLine(PValue.ToString());
         sw.WriteLine(String.Join(",", (from double d in minValues select d.ToString()).ToArray()));
         sw.WriteLine(String.Join(",", (from double d in maxValues select d.ToString()).ToArray()));
         sw.WriteLine(String.Join(",", (from double d in sumValues select d.ToString()).ToArray()));
         for (int i = 0; i < Coefficients.Length; i++)
         {
             string[] vlArr = (from double d in Coefficients[i] select d.ToString()).ToArray();
             sw.WriteLine(String.Join(" ", vlArr));
         }
         for (int i = 0; i < StandardError.Length; i++)
         {
             string[] vlArr = (from double d in StandardError[i] select d.ToString()).ToArray();
             sw.WriteLine(String.Join(" ", vlArr));
         }
         for (int i = 0; i < WaldStatistic.Length; i++)
         {
             string[] vlArr = (from double d in WaldStatistic[i] select d.ToString()).ToArray();
             sw.WriteLine(String.Join(" ", vlArr));
         }
         for (int i = 0; i < WaldPvalue.Length; i++)
         {
             string[] vlArr = (from double d in WaldPvalue[i] select d.ToString()).ToArray();
             sw.WriteLine(String.Join(" ", vlArr));
         }
         sw.Close();
     }
     return(outPath);
 }
Esempio n. 8
0
        private double doItemSimilarity(long itemID1, long itemID2, long preferring1, long numUsers)
        {
            DataModel model = base.getDataModel();
            long      num   = model.getNumUsersWithPreferenceFor(itemID1, itemID2);

            if (num == 0L)
            {
                return(double.NaN);
            }
            long   num2 = model.getNumUsersWithPreferenceFor(itemID2);
            double num3 = LogLikelihood.logLikelihoodRatio(num, num2 - num, preferring1 - num, ((numUsers - preferring1) - num2) + num);

            return(1.0 - (1.0 / (1.0 + num3)));
        }
Esempio n. 9
0
        private double doItemSimilarity(long itemID1, long itemID2, long preferring1, long numUsers)
        {
            IDataModel dataModel       = getDataModel();
            long       preferring1and2 = dataModel.GetNumUsersWithPreferenceFor(itemID1, itemID2);

            if (preferring1and2 == 0)
            {
                return(Double.NaN);
            }
            long   preferring2   = dataModel.GetNumUsersWithPreferenceFor(itemID2);
            double logLikelihood =
                LogLikelihood.logLikelihoodRatio(preferring1and2,
                                                 preferring2 - preferring1and2,
                                                 preferring1 - preferring1and2,
                                                 numUsers - preferring1 - preferring2 + preferring1and2);

            return(1.0 - 1.0 / (1.0 + logLikelihood));
        }
Esempio n. 10
0
        public double userSimilarity(long userID1, long userID2)
        {
            DataModel model = base.getDataModel();
            FastIDSet other = model.getItemIDsFromUser(userID1);
            FastIDSet set2  = model.getItemIDsFromUser(userID2);
            long      num   = other.size();
            long      num2  = set2.size();
            long      num3  = (num < num2) ? ((long)set2.intersectionSize(other)) : ((long)other.intersectionSize(set2));

            if (num3 == 0L)
            {
                return(double.NaN);
            }
            long   num4 = model.getNumItems();
            double num5 = LogLikelihood.logLikelihoodRatio(num3, num2 - num3, num - num3, ((num4 - num) - num2) + num3);

            return(1.0 - (1.0 / (1.0 + num5)));
        }
Esempio n. 11
0
        public IDistribution Evaluate(double[][] observations, double[] weights, double treshold, out double likelihood)
        {
            // Calculate Maximization of the Likelihood
            _stepsTillConvirgence = 0;
            var convirged = false;
            var pdf       = (IMultivariateDistribution[])_components.Clone();
            var K         = _coefficients.Length;
            var N         = observations.Length;

            //// Initialize pi, covariance matrix and mean
            var pi = (double[])_coefficients.Clone();

            weights = weights.Product(N);

            likelihood = LogLikelihood.Calculate(observations, _coefficients, GetCovariances(pdf), GetMeans(pdf));

            while (!convirged)
            {
                //// Expectation
                var gamma = CalculateGamma(observations, weights, pdf, pi);
                //// Maximization
                pi = CalculatePi(gamma);
                //// For each component train new distribution function
                for (var k = 0; k < K; k++)
                {
                    var mean       = CalculateMean(gamma, observations, k);
                    var covariance = CalculateCovariance(gamma, observations, mean, k);
                    pdf[k] = new NormalDistribution(mean, covariance);
                }

                //// Check treshold
                var newLikelihood = LogLikelihood.Calculate(observations, _coefficients, GetCovariances(pdf), GetMeans(pdf));
                if (double.IsNaN(newLikelihood) || double.IsInfinity(newLikelihood))
                {
                    throw new ApplicationException("EM algorithm does not convirged");
                }

                convirged  = (newLikelihood - likelihood) <= treshold;
                likelihood = newLikelihood;
                _stepsTillConvirgence++;
            }

            return(new Mixture <IMultivariateDistribution>(pi, pdf));
        }
Esempio n. 12
0
        private IList <ObservationWithLikelihood <double[]> > FindMostSimilarObservations(IGaussianMixtureModelState model, double[][] trainingSet, double yesterdayLikelihood, double tolerance)
        {
            var N        = trainingSet.Length;
            var guessess = new List <ObservationWithLikelihood <double[]> >();

            for (var n = N - 2; n > 0; n--)
            {
                var x          = new[] { trainingSet[n] };
                var likelihood = LogLikelihood.Calculate(x, model.Mixture.Coefficients, GetCovariances(model.Mixture.Components), GetMeans(model.Mixture.Components));
                //Debug.Write((new Vector(observations[n])).ToString() + " : " + likelihood + " " + Environment.NewLine);

                if (Math.Abs(yesterdayLikelihood) - tolerance < Math.Abs(likelihood) && Math.Abs(yesterdayLikelihood) + tolerance > Math.Abs(likelihood))
                {
                    guessess.Add(new ObservationWithLikelihood <double[]>()
                    {
                        LogLikelihood = likelihood, Observation = trainingSet[n], PlaceInSequence = n - 1
                    });
                }
            }

            return(guessess);
        }
Esempio n. 13
0
        public double UserSimilarity(long userID1, long userID2)
        {
            IDataModel dataModel = getDataModel();
            FastIDSet  prefs1    = dataModel.GetItemIDsFromUser(userID1);
            FastIDSet  prefs2    = dataModel.GetItemIDsFromUser(userID2);

            long prefs1Size       = prefs1.Count();
            long prefs2Size       = prefs2.Count();
            long intersectionSize =
                prefs1Size < prefs2Size?prefs2.IntersectionSize(prefs1) : prefs1.IntersectionSize(prefs2);

            if (intersectionSize == 0)
            {
                return(Double.NaN);
            }
            long   numItems      = dataModel.GetNumItems();
            double logLikelihood =
                LogLikelihood.logLikelihoodRatio(intersectionSize,
                                                 prefs2Size - intersectionSize,
                                                 prefs1Size - intersectionSize,
                                                 numItems - prefs1Size - prefs2Size + intersectionSize);

            return(1.0 - 1.0 / (1.0 + logLikelihood));
        }