//Training Data Should have only Two Attributes public override Common.MLCore.ModelBase BuildModel(double[][] trainingData, string[] attributeHeaders, int indexTargetAttribute) { VerifyData(trainingData, attributeHeaders, indexTargetAttribute); double[] x, y; ModelLinearBase model = new ModelLinearBase(_missingValue, _indexTargetAttribute, _trainingData.Length - 1); //Additional Checks if (trainingData.Length != 2) { throw new InvalidTrainingDataException(); } if (indexTargetAttribute == 0) { x = trainingData[1]; y = trainingData[0]; } else { x = trainingData[0]; y = trainingData[1]; } model.B1 = _initB1; // Dispersion.CorrelationPearson(x, y) //* (Dispersion.StandardDeviationSample(y) / // Dispersion.StandardDeviationSample(x)); model.B0 = _initB0; // Dispersion.Mean(y) - //_lm.B1 * Dispersion.Mean(x); int iter = 0; int row; double predY, error; while (iter++ < _maxIterations) //Do for max iterations { for (row = 0; row < x.Length; row++) { predY = model.B0 + x[row] * model.B1; error = predY - y[row]; model.B0 = model.B0 - error * _learningRate; model.B1 = model.B1 - error * _learningRate * x[row]; } } //B0 and B1 values are computed return(model); }
//Training Data Should have only Two Attributes public override Common.MLCore.ModelBase BuildModel(double[][] trainingData, string[] attributeHeaders, int indexTargetAttribute) { VerifyData(trainingData, attributeHeaders, indexTargetAttribute); double[] x, y; ModelLinearBase model = new ModelLinearBase(_missingValue, _indexTargetAttribute, _trainingData.Length - 1); //Additional Checks if (trainingData.Length != 2) { throw new InvalidTrainingDataException(); } if (indexTargetAttribute == 0) { x = trainingData[1]; y = trainingData[0]; } else { x = trainingData[0]; y = trainingData[1]; } //x,y are arrays model.B1 = Dispersion.CorrelationPearson(x, y) * (Dispersion.StandardDeviationSample(y) / Dispersion.StandardDeviationSample(x)); model.B0 = Dispersion.Mean(y) - model.B1 * Dispersion.Mean(x); return(model); }