/// <summary> /// This method creates PxFormula class object and set in it calculated nu vector and sigma matrix values. /// </summary> /// <param name="trainingSet">This is TrainingSet class object. Must contain training set with ONLY normal records.</param> /// <returns>PxFormula class object with setted nu vector and sigma matrix values.</returns> private PxFormula calcFormula(TrainingSet trainingSet) { int training_set_count = trainingSet.getCountOfRecords(); int size = trainingSet.getAllRecords().First().Length; // calculate nu vector value double[] nu = new double[size]; foreach (double[] feature_vector in trainingSet.getAllRecords()) { nu = Matrix.Add(nu, feature_vector); } nu = Matrix.Divide(nu, training_set_count); // calculate sigme matrix double[,] sigma = new double[size, size]; foreach (double[] feature_vector in trainingSet.getAllRecords()) { double[] x_nu = Matrix.Subtract(feature_vector, nu); sigma = Matrix.Add(sigma, Matrix.Multiply(Matrix.ColumnVector(x_nu), Matrix.RowVector(x_nu))); } sigma = Matrix.Divide(sigma, training_set_count); // return PxFormula class object with setted nu and sigma values return(new PxFormula(nu, sigma)); }
/// <summary> /// This method creates PxFormula class object and set in it calculated nu vector and sigma matrix values. /// </summary> /// <param name="trainingSet">This is TrainingSet class object. Must contain training set with ONLY normal records.</param> /// <returns>PxFormula class object with setted nu vector and sigma matrix values.</returns> private PxFormula calcFormula (TrainingSet trainingSet) { int training_set_count = trainingSet.getCountOfRecords(); int size = trainingSet.getAllRecords().First().Length; // calculate nu vector value double[] nu = new double[size]; foreach (double[] feature_vector in trainingSet.getAllRecords()) { nu = Matrix.Add(nu, feature_vector); } nu = Matrix.Divide(nu,training_set_count); // calculate sigme matrix double[,] sigma = new double[size, size]; foreach (double[] feature_vector in trainingSet.getAllRecords()) { double[] x_nu = Matrix.Subtract(feature_vector, nu); sigma = Matrix.Add(sigma, Matrix.Multiply(Matrix.ColumnVector(x_nu), Matrix.RowVector(x_nu))); } sigma = Matrix.Divide(sigma, training_set_count); // return PxFormula class object with setted nu and sigma values return new PxFormula(nu, sigma); }