use of org.apache.ignite.ml.math.primitives.matrix.Matrix in project ignite by apache.
the class SparseMatrix method copy.
/**
* {@inheritDoc}
*/
@Override
public Matrix copy() {
Matrix cp = like(rowSize(), columnSize());
cp.assign(this);
return cp;
}
use of org.apache.ignite.ml.math.primitives.matrix.Matrix in project ignite by apache.
the class StackingTest method testSimpleStack.
/**
* Tests simple stack training.
*/
@Test
public void testSimpleStack() {
StackedDatasetTrainer<Vector, Vector, Double, LinearRegressionModel, Double> trainer = new StackedDatasetTrainer<>();
UpdatesStrategy<SmoothParametrized, SimpleGDParameterUpdate> updatesStgy = new UpdatesStrategy<>(new SimpleGDUpdateCalculator(0.2), SimpleGDParameterUpdate.SUM_LOCAL, SimpleGDParameterUpdate.AVG);
MLPArchitecture arch = new MLPArchitecture(2).withAddedLayer(10, true, Activators.RELU).withAddedLayer(1, false, Activators.SIGMOID);
MLPTrainer<SimpleGDParameterUpdate> trainer1 = new MLPTrainer<>(arch, LossFunctions.MSE, updatesStgy, 3000, 10, 50, 123L);
// Convert model trainer to produce Vector -> Vector model
DatasetTrainer<AdaptableDatasetModel<Vector, Vector, Matrix, Matrix, MultilayerPerceptron>, Double> mlpTrainer = AdaptableDatasetTrainer.of(trainer1).beforeTrainedModel((Vector v) -> new DenseMatrix(v.asArray(), 1)).afterTrainedModel((Matrix mtx) -> mtx.getRow(0)).withConvertedLabels(VectorUtils::num2Arr);
final double factor = 3;
StackedModel<Vector, Vector, Double, LinearRegressionModel> mdl = trainer.withAggregatorTrainer(new LinearRegressionLSQRTrainer().withConvertedLabels(x -> x * factor)).addTrainer(mlpTrainer).withAggregatorInputMerger(VectorUtils::concat).withSubmodelOutput2VectorConverter(IgniteFunction.identity()).withVector2SubmodelInputConverter(IgniteFunction.identity()).withOriginalFeaturesKept(IgniteFunction.identity()).withEnvironmentBuilder(TestUtils.testEnvBuilder()).fit(getCacheMock(xor), parts, new DoubleArrayVectorizer<Integer>().labeled(Vectorizer.LabelCoordinate.LAST));
assertEquals(0.0 * factor, mdl.predict(VectorUtils.of(0.0, 0.0)), 0.3);
assertEquals(1.0 * factor, mdl.predict(VectorUtils.of(0.0, 1.0)), 0.3);
assertEquals(1.0 * factor, mdl.predict(VectorUtils.of(1.0, 0.0)), 0.3);
assertEquals(0.0 * factor, mdl.predict(VectorUtils.of(1.0, 1.0)), 0.3);
}
use of org.apache.ignite.ml.math.primitives.matrix.Matrix in project ignite by apache.
the class TracerTest method testHtmlMatrixTracer.
/**
*/
@Test
public void testHtmlMatrixTracer() throws IOException {
Matrix mtx1 = makeRandomMatrix(100, 100);
// Custom color mapping.
verifyShowHtml(() -> Tracer.showHtml(mtx1, COLOR_MAPPER));
Matrix mtx2 = new DenseMatrix(100, 100);
double MAX = (double) (mtx2.rowSize() * mtx2.columnSize());
mtx2.assign((x, y) -> (double) (x * y) / MAX);
verifyShowHtml(() -> Tracer.showHtml(mtx2));
}
use of org.apache.ignite.ml.math.primitives.matrix.Matrix in project ignite by apache.
the class TracerTest method testHtmlMatrixTracerWithAsciiFallback.
/**
*/
@Test
public void testHtmlMatrixTracerWithAsciiFallback() throws IOException {
Matrix mtx1 = makeRandomMatrix(100, 100);
// Custom color mapping.
Tracer.showHtml(mtx1, COLOR_MAPPER, true);
Matrix mtx2 = new DenseMatrix(100, 100);
double MAX = (double) (mtx2.rowSize() * mtx2.columnSize());
mtx2.assign((x, y) -> (double) (x * y) / MAX);
Tracer.showHtml(mtx2, true);
}
use of org.apache.ignite.ml.math.primitives.matrix.Matrix in project ignite by apache.
the class GmmTrainer method updateModel.
/**
* Gets older model and returns updated model on given data.
*
* @param dataset Dataset.
* @param model Model.
* @return Updated model.
*/
@NotNull
private UpdateResult updateModel(Dataset<EmptyContext, GmmPartitionData> dataset, GmmModel model) {
boolean isConverged = false;
int countOfIterations = 0;
double maxProbInDataset = Double.NEGATIVE_INFINITY;
while (!isConverged) {
MeanWithClusterProbAggregator.AggregatedStats stats = MeanWithClusterProbAggregator.aggreateStats(dataset, countOfComponents);
Vector clusterProbs = stats.clusterProbabilities();
Vector[] newMeans = stats.means().toArray(new Vector[countOfComponents]);
A.ensure(newMeans.length == model.countOfComponents(), "newMeans.size() == count of components");
A.ensure(newMeans[0].size() == initialMeans[0].size(), "newMeans[0].size() == initialMeans[0].size()");
List<Matrix> newCovs = CovarianceMatricesAggregator.computeCovariances(dataset, clusterProbs, newMeans);
try {
List<MultivariateGaussianDistribution> components = buildComponents(newMeans, newCovs);
GmmModel newModel = new GmmModel(clusterProbs, components);
countOfIterations += 1;
isConverged = isConverged(model, newModel) || countOfIterations > maxCountOfIterations;
model = newModel;
maxProbInDataset = GmmPartitionData.updatePcxiAndComputeLikelihood(dataset, clusterProbs, components);
} catch (SingularMatrixException | IllegalArgumentException e) {
String msg = "Cannot construct non-singular covariance matrix by data. " + "Try to select other initial means or other model trainer. Iterations will stop.";
environment.logger().log(MLLogger.VerboseLevel.HIGH, msg);
isConverged = true;
}
}
return new UpdateResult(model, maxProbInDataset);
}
Aggregations