public void RelativeParameterConstructorTest() { var criteria = new RelativeParameterConvergence(iterations: 0, tolerance: 0.1); int progress = 1; double[] parameters = { 12345.6, 952.12, 1925.1 }; do { // Do some processing... // Update current iteration information: criteria.NewValues = parameters.Divide(progress++); } while (!criteria.HasConverged); // The method will converge after reaching the // maximum of 11 iterations with a final value // of { 1234.56, 95.212, 192.51 }: int iterations = criteria.CurrentIteration; // 11 var v = criteria.OldValues; // { 1234.56, 95.212, 192.51 } Assert.AreEqual(11, criteria.CurrentIteration); Assert.AreEqual(1234.56, criteria.OldValues[0]); Assert.AreEqual(95.212, criteria.OldValues[1]); Assert.AreEqual(192.51, criteria.OldValues[2]); }
/// <summary> /// Constructs a new Newton-Raphson learning algorithm /// for Cox's Proportional Hazards models. /// </summary> /// /// <param name="hazards">The model to estimate.</param> /// public ProportionalHazardsNewtonRaphson(ProportionalHazards hazards) { this.regression = hazards; this.parameterCount = hazards.Coefficients.Length; this.hessian = new double[parameterCount, parameterCount]; this.gradient = new double[parameterCount]; this.partialHessian = new double[parameterCount, parameterCount]; this.partialGradient = new double[parameterCount]; this.convergence = new RelativeParameterConvergence() { Iterations = 0, Tolerance = 1e-5 }; }
/// <summary> /// Constructs a new Newton-Raphson learning algorithm /// for Cox's Proportional Hazards models. /// </summary> /// /// <param name="hazards">The model to estimate.</param> /// public ProportionalHazardsNewtonRaphson(ProportionalHazards hazards) { this.regression = hazards; this.parameterCount = hazards.Coefficients.Length; this.hessian = new double[parameterCount, parameterCount]; this.gradient = new double[parameterCount]; this.partialHessian = new double[parameterCount, parameterCount]; this.partialGradient = new double[parameterCount]; this.convergence = new RelativeParameterConvergence() { Iterations = 0, Tolerance = 1e-5 }; this.Estimator = HazardEstimator.BreslowNelsonAalen; this.Ties = HazardTiesMethod.Efron; this.Lambda = 0.1; }