Beispiel #1
0
    def trainPredictor():
        """
        Train the model for the simulation.
        """
        paramsFile = InfoExperiment.getSvmParamsFileName()
        sampleSize = InfoExperiment.getNumSimulationExamples()

        simulator = EgoNetworkSimulator(examplesFileName)
        params, paramFuncs = InfoExperiment.loadParams(paramsFile)

        startTime = time.time()
        simulator.trainClassifier(params, paramFuncs, sampleSize)
        endTime = time.time()
        logging.info("Time taken for training is " + str((endTime-startTime)) + " seconds.")

        return simulator
class EgoNetworkSimulatorTest(unittest.TestCase):
    def setUp(self):
        logging.basicConfig(stream=sys.stdout, level=logging.INFO)
        dataDir = PathDefaults.getDataDir() + "infoDiffusion/"

        numVertices = 100
        numFeatures = 5

        c = numpy.random.rand(numFeatures)

        vList = VertexList(numVertices, numFeatures)
        vList.setVertices(numpy.random.rand(numVertices, numFeatures))
        graph = SparseGraph(vList)

        p = 0.1
        generator = ErdosRenyiGenerator(p)
        graph = generator.generate(graph)

        #Now rewrite some vertices to have different labels which depend only
        #on the alter. 
        edges = graph.getAllEdges()

        for i in range(edges.shape[0]):
            edgeLabel = numpy.dot(graph.getVertex(edges[i, 1]), c)
            graph.addEdge(edges[i, 0], edges[i, 1], edgeLabel)

        #Create the predictor
        lmbda = 0.01

        self.alterRegressor = PrimalRidgeRegression(lmbda)
        self.egoRegressor = PrimalRidgeRegression(lmbda)
        predictor = EgoEdgeLabelPredictor(self.alterRegressor, self.egoRegressor)

        self.egoNetworkSimulator = EgoNetworkSimulator(graph, predictor)
        self.graph = graph 

    def testSampleExamples(self):
        numEdges = 100 
        graph = self.egoNetworkSimulator.sampleEdges(numEdges)

        self.assertEquals(graph.getNumEdges(), numEdges)
        self.assertEquals(graph.getNumVertices(), self.graph.getNumVertices())
        self.assertEquals(graph.isUndirected(), self.graph.isUndirected())


    def testModelSelection(self):
        paramList = [[0.1, 0.1], [0.2, 0.1], [0.1, 0.2]]
        paramFunc = [self.egoRegressor.setLambda, self.alterRegressor.setLambda] 
        folds = 3
        errorFunc = Evaluator.rootMeanSqError
        sampleSize = 100 

        params, paramFuncs, errors = self.egoNetworkSimulator.modelSelection(paramList, paramFunc, folds, errorFunc, sampleSize)

        logging.debug(params)
        logging.debug(paramFuncs)
        logging.debug(errors)

    def testEvaluateClassifier(self):
        params = [0.1, 0.1]
        paramFunc = [self.egoRegressor.setLambda, self.alterRegressor.setLambda]
        folds = 3
        errorFunc = Evaluator.rootMeanSqError
        sampleSize = 100 

        (means, vars) = self.egoNetworkSimulator.evaluateClassifier(params, paramFunc, folds, errorFunc, sampleSize)

        logging.debug(means)
        logging.debug(vars)

    def testTrainClassifier(self):
        params= [0.1, 0.1]
        paramFuncs = [self.egoRegressor.setLambda, self.alterRegressor.setLambda]
        sampleSize = 100 

        self.egoNetworkSimulator.trainClassifier(params, paramFuncs, sampleSize)

    def testGenerateRandomGraph(self):
        egoFileName = PathDefaults.getDataDir() + "infoDiffusion/EgoData.csv"
        alterFileName = PathDefaults.getDataDir()  + "infoDiffusion/AlterData.csv"
        numVertices = 1000
        infoProb = 0.1
        graphType = "SmallWorld"
        p = 0.1
        neighbours = 10

        self.egoNetworkSimulator.generateRandomGraph(egoFileName, alterFileName, numVertices, infoProb, graphType, p, neighbours)

    def testRunSimulation(self):
        egoFileName = PathDefaults.getDataDir() + "infoDiffusion/EgoData.csv"
        alterFileName = PathDefaults.getDataDir()  + "infoDiffusion/AlterData.csv"
        numVertices = 1000
        infoProb = 0.1
        graphType = "SmallWorld"
        p = 0.1
        neighbours = 10

        params= [0.1, 0.1]
        paramFuncs = [self.egoRegressor.setLambda, self.alterRegressor.setLambda]
        sampleSize = 100 

        maxIterations = 5

        self.egoNetworkSimulator.trainClassifier(params, paramFuncs, sampleSize)
        self.egoNetworkSimulator.generateRandomGraph(egoFileName, alterFileName, numVertices, infoProb, graphType, p, neighbours)
        self.egoNetworkSimulator.runSimulation(maxIterations)