Package org.grouplens.lenskit.util

Source Code of org.grouplens.lenskit.util.IDMeanAccumulatorTest

/*
* LensKit, an open source recommender systems toolkit.
* Copyright 2010-2014 LensKit Contributors.  See CONTRIBUTORS.md.
* Work on LensKit has been funded by the National Science Foundation under
* grants IIS 05-34939, 08-08692, 08-12148, and 10-17697.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.grouplens.lenskit.util;

import org.grouplens.lenskit.vectors.SparseVector;
import org.junit.Before;
import org.junit.Test;

import static org.grouplens.lenskit.util.test.ExtraMatchers.notANumber;
import static org.hamcrest.Matchers.closeTo;
import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertThat;

public class IDMeanAccumulatorTest {
    private static final double EPSILON = 1.0e-5;
    IdMeanAccumulator acc;
    @Before
    public void createAccumulator() {
        acc = new IdMeanAccumulator();
    }

    @Test
    public void testNone() {
        assertThat(acc.globalMean(), notANumber());
        assertThat(acc.idMeans().isEmpty(),
                   equalTo(true));
        assertThat(acc.idMeanOffsets().isEmpty(),
                   equalTo(true));
    }

    @Test
    public void testSingleValue() {
        acc.put(5, Math.PI);
        assertThat(acc.globalMean(),
                   closeTo(Math.PI, EPSILON));
        SparseVector v = acc.idMeans();
        assertThat(v.size(), equalTo(1));
        assertThat(v.get(5), closeTo(Math.PI, EPSILON));
    }

    @Test
    public void testSeparateValues() {
        acc.put(5, Math.PI);
        acc.put(17, Math.E);
        assertThat(acc.globalMean(),
                   closeTo((Math.PI + Math.E) / 2, EPSILON));
        SparseVector v = acc.idMeans();
        assertThat(v.size(), equalTo(2));
        assertThat(v.get(5), closeTo(Math.PI, EPSILON));
        assertThat(v.get(17), closeTo(Math.E, EPSILON));
    }

    @Test
    public void testMultipleValues() {
        acc.put(5, 3);
        acc.put(17, 4);
        acc.put(17, 5);
        acc.put(5, 3);
        acc.put(3, 2);
        assertThat(acc.globalMean(),
                   closeTo(3.4, EPSILON));
        SparseVector v = acc.idMeans();
        assertThat(v.size(), equalTo(3));
        assertThat(v.get(5), closeTo(3, EPSILON));
        assertThat(v.get(17), closeTo(4.5, EPSILON));
        assertThat(v.get(3), closeTo(2, EPSILON));
    }

    @Test
    public void testMeanOffsets() {
        acc.put(5, 3);
        acc.put(17, 4);
        acc.put(17, 5);
        acc.put(5, 3);
        acc.put(3, 2);
        assertThat(acc.globalMean(),
                   closeTo(3.4, EPSILON));
        SparseVector v = acc.idMeanOffsets();
        assertThat(v.size(), equalTo(3));
        assertThat(v.get(5), closeTo(-0.4, EPSILON));
        assertThat(v.get(17), closeTo(1.1, EPSILON));
        assertThat(v.get(3), closeTo(-1.4, EPSILON));
    }

    @Test
    public void testDampedMeanOffsets() {
        acc.put(5, 3);
        acc.put(17, 4);
        acc.put(17, 5);
        acc.put(5, 3);
        acc.put(3, 2);
        assertThat(acc.globalMean(),
                   closeTo(3.4, EPSILON));
        SparseVector v = acc.idMeanOffsets(1);
        assertThat(v.size(), equalTo(3));
        assertThat(v.get(5), closeTo(-0.26666666667, EPSILON));
        assertThat(v.get(17), closeTo(0.73333333333, EPSILON));
        assertThat(v.get(3), closeTo(-0.7, EPSILON));
    }
}
TOP

Related Classes of org.grouplens.lenskit.util.IDMeanAccumulatorTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.