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); }
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(); }
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); }
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(); }
/// <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); }
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(); }
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); }
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))); }
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)); }
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))); }
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)); }
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); }
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)); }