コード例 #1
0
    def generateRandomGraph(self, egoFileName, alterFileName, infoProb, graph):
        """
        Generate numVertices vertices according to the distributions of egos and
        alters found in egoFileName, and alterFileName. Augment with an additional
        indicator variable with probabability infoProb. Also, use graph structure
        as given by graph. 
        """
        Parameter.checkFloat(infoProb, 0.0, 1.0)

        #Learn the distribution of the egos and alters
        eCsvReader = EgoCsvReader()

        self.egoQuestionIds = eCsvReader.getEgoQuestionIds()
        (X1, _) = eCsvReader.readFile(egoFileName, self.egoQuestionIds)

        alterQuestionIds = eCsvReader.getAlterQuestionIds()
        (X2, _) = eCsvReader.readFile(alterFileName, alterQuestionIds)

        X = numpy.r_[X1, X2]

        egoGenerator = EgoGenerator()
        (mu, sigmaSq) = Util.computeMeanVar(X)
        vList = egoGenerator.generateIndicatorVertices2(graph.getNumVertices(), mu, sigmaSq, infoProb, X.min(0), X.max(0))

        graph.setVertexList(vList)
        self.graph = graph

        return self.graph
コード例 #2
0
    def testGenerateIndicatorVertices(self):
        egoGenerator = EgoGenerator() 
        
        numVertices = 500000
        means = numpy.array([1, 10])
        vars = numpy.array([[5, 1], [1, 2]])
        p = 0.1
        
        vList = egoGenerator.generateIndicatorVertices(numVertices, means, vars, p)
        X = numpy.zeros((numVertices, means.shape[0]+1))
        
        for i in range(0, numVertices): 
            X[i, :] = vList.getVertex(i)
        
        (means2, vars2) = Util.computeMeanVar(X)

        self.assertTrue((X.astype(numpy.int32) == X).all())

        self.assertAlmostEquals(numpy.linalg.norm(means2[0:2] - means), 0, places=1)
        self.assertAlmostEquals(numpy.linalg.norm(vars2[0:2][:,0:2] - vars), 0, places=0)
        self.assertAlmostEquals(p, means2[2],places=2)

        #Try non-symmetric variance matrix
        vars = numpy.array([[5, 1], [8, 2]])
        self.assertRaises(ValueError, egoGenerator.generateIndicatorVertices, numVertices, means, vars, p)
コード例 #3
0
    def testGenerateIndicatorVertices2(self):
        egoGenerator = EgoGenerator()

        numVertices = 500000
        means = numpy.array([1, 10])
        vars = numpy.array([[5, 1], [1, 2]])
        mins = numpy.array([-1000, -1000])
        maxs = numpy.array([1000, 1000])

        p = 0.1

        vList = egoGenerator.generateIndicatorVertices2(numVertices, means, vars, p, mins, maxs)
        X = numpy.zeros((numVertices, means.shape[0]+1))

        for i in range(0, numVertices):
            X[i, :] = vList.getVertex(i)

        (means2, vars2) = Util.computeMeanVar(X)

        self.assertTrue((X.astype(numpy.int32) == X).all())

        self.assertAlmostEquals(numpy.linalg.norm(means2[0:2] - means), 0, places=1)
        self.assertAlmostEquals(numpy.linalg.norm(vars2[0:2][:,0:2] - vars), 0, places=0)
        self.assertAlmostEquals(p, means2[2],places=2)

        self.assertTrue((X[:, 0:2].min(0) >= mins).all())
        self.assertTrue((X[:, 0:2].max(0) <= maxs).all())

        #Try non-symmetric variance matrix
        vars = numpy.array([[5, 1], [8, 2]])
        self.assertRaises(ValueError, egoGenerator.generateIndicatorVertices2, numVertices, means, vars, p, mins, maxs)

        #Test min > max
        vars = numpy.array([[5, 1], [1, 2]])
        mins = numpy.array([-2, 6])
        maxs = numpy.array([10, 5])
        self.assertRaises(ValueError, egoGenerator.generateIndicatorVertices2, numVertices, means, vars, p, mins, maxs)

        #Test min == max
        numVertices = 1000
        vars = numpy.array([[5, 1], [1, 2]])
        mins = numpy.array([-2, 5])
        maxs = numpy.array([10, 5])
        vList = egoGenerator.generateIndicatorVertices2(numVertices, means, vars, p, mins, maxs)

        for i in range(0, numVertices):
            self.assertTrue(vList.getVertex(i)[1] == 5)

        #Try a new example with small range of min and max - check the mean and var
        numVertices = 500000
        means = numpy.array([1, 10])
        vars = numpy.array([[2, 0], [0, 2]])
        mins = numpy.array([-3, 6])
        maxs = numpy.array([5, 14])

        p = 0.1

        vList = egoGenerator.generateIndicatorVertices2(numVertices, means, vars, p, mins, maxs)
        X = numpy.zeros((numVertices, means.shape[0]+1))

        for i in range(0, numVertices):
            X[i, :] = vList.getVertex(i)

        (means2, vars2) = Util.computeMeanVar(X)

        self.assertAlmostEquals(numpy.linalg.norm(means2[0:2] - means), 0, places=1)
        self.assertAlmostEquals(numpy.linalg.norm(vars2[0:2][:,0:2] - vars), 0, places=0)
        self.assertAlmostEquals(p, means2[2],places=2)

        logging.debug((X[:, 0:2].min(0)))
        logging.debug((X[:, 0:2].max(0)))

        self.assertTrue((X[:, 0:2].min(0) >= mins).all())
        self.assertTrue((X[:, 0:2].max(0) <= maxs).all())