def test_bivariate_model():
	spamsDict = {
		"lambda1": 0.1, 
		"it0": 3, 
		"max_it": 10,
		"intercept" : True
	}
	spamsDict['compute_gram'] = True
	spamsDict["loss"] = "square"
	spamsDict["regul"] = "l1l2"
	learner = BatchBivariateLearner(**spamsDict)
	gen = BillMatlabGenerator(MATLAB_FILE_LOC,98,True)

	for i in range(10):
		X,Y = gen.generate()
		learner.process(X,Y)
def runExperiment():
    spamsDict = {
        "numThreads": 1,
        "lambda1": 0.0001,
        "bivar_it0": 3,
        "bivar_max_it": 10,
        "max_it": 500,
        "tol": 1e-3,
        "intercept": True,
    }
    spamsDict["compute_gram"] = True
    spamsDict["loss"] = "square"
    spamsDict["regul"] = "l1l2"
    learner = BatchBivariateLearner(**spamsDict)
    gen = BillMatlabGenerator(MATLAB_DATA, 98, True)
    evaluator = RootMeanSumSquareEval(learner)
    for i in range(35):
        logger.info("New Item Seen: %d" % i)
        X, Y = gen.generate()
        if learner.w is not None and learner.u is not None:
            loss = evaluator.evaluate(X, Y)
            logger.info("Loss: %2.5f" % loss)
            logger.info("W sparcity: %2.2f" % learner._wsparcity())
            logger.info("U sparcity: %2.2f" % learner._usparcity())
            logger.info("Bias: %s" % learner.bias)
            logger.info("The predictions:")
            for t in range(Y.shape[1]):
                dotproduct = learner.u[:, t : t + 1].T.dot(X.T).dot(learner.w[:, t : t + 1])[0, 0]
                withoutbias = dotproduct
                dotproduct += learner.bias[0, t]
                logger.info(
                    "task=%d,y=%2.5f,v=%2.5f,vb=%2.5f,rse=%2.5f"
                    % (t, Y[0, t], dotproduct, withoutbias, sqrt(pow(Y[0, t] - dotproduct, 2)))
                )
                # calculate loss of Y for new X
            pass
        learner.process(X, Y)
        loss = evaluator.evaluate(X, Y)
        logger.info("Loss (post addition): %2.5f" % loss)
def runExperiment():
	spamsDict = {
		"numThreads": 1,
		"L0": 0.1,
		"lambda1": 0.001,
		"it0":100,
		"max_it":500,
		"tol":1e-3,
		"intercept":True, 
		"bivar_it0": 3, 
		"bivar_max_it": 10,
	}
	spamsDict['compute_gram'] = True
	spamsDict["loss"] = "square"
	spamsDict["regul"] = "l1l2"
	learner = BatchBivariateLearner(**spamsDict)
	gen = BillMatlabGenerator(MATLAB_DATA,98,True)
	evaluator = RootMeanSumSquareEval(learner)
	foldN = 0;
	for fold in gen.folds:
		logger.info("Performing fold: %d"%foldN)
		X,Y = gen.fromFold(fold['training'])
		learner.process(X,Y)
		if learner.w is not None and learner.u is not None:
			Xtest,Ytest = gen.fromFold(fold['test'])
			
			logger.info("W sparcity: %2.2f"%learner._wsparcity())
			logger.info("U sparcity: %2.2f"%learner._usparcity())
			logger.info("Bias: %s"%learner.bias)
			loss = evaluator.evaluate(Xtest,Ytest)
			logger.info("Loss: %2.5f"%loss)
			logger.info("The predictions:")
			for i in range(len(Xtest)):
				for t in range(Y.shape[1]):
					dotproduct = learner.u[:,t:t+1].T.dot(Xtest[i].T).dot(learner.w[:,t:t+1])[0,0]
					withoutbias = dotproduct
					if learner.bias is not None: dotproduct += learner.bias[0,t]
					logger.info("task=%d,i=%d,y=%2.5f,v=%2.5f,vb=%2.5f,delta=%3.5f"%(
						t,i,Ytest[i,t],dotproduct,withoutbias,
						pow(Ytest[i,t]-dotproduct,2)
					))
			# calculate loss of Y for new X
			pass
		foldN +=1
		break
def runExperiment():
	spamsDict = {
		"numThreads": 1, 
		"lambda1": 0.0001,
		"bivar_it0": 3, 
		"bivar_max_it": 10,
		"max_it":500,
		"tol":1e-3,
		"intercept":True, 
	}
	spamsDict['compute_gram'] = True
	spamsDict["loss"] = "square"
	spamsDict["regul"] = "l1l2"
	learner = BatchBivariateLearner(**spamsDict)
	gen = BillMatlabGenerator(MATLAB_DATA,98,True)
	evaluator = RootMeanSumSquareEval(learner)
	for i in range(35):
		logger.info("New Item Seen: %d"%i)
		X,Y = gen.generate()
		if learner.w is not None and learner.u is not None:
			loss = evaluator.evaluate(X,Y)
			logger.info("Loss: %2.5f"%loss)
			logger.info("W sparcity: %2.2f"%learner._wsparcity())
			logger.info("U sparcity: %2.2f"%learner._usparcity())
			logger.info("Bias: %s"%learner.bias)
			logger.info("The predictions:")
			for t in range(Y.shape[1]):
				dotproduct = learner.u[:,t:t+1].T.dot(X.T).dot(learner.w[:,t:t+1])[0,0]
				withoutbias = dotproduct
				dotproduct += learner.bias[0,t]
				logger.info("task=%d,y=%2.5f,v=%2.5f,vb=%2.5f,rse=%2.5f"%(
					t,Y[0,t],dotproduct,withoutbias,
					sqrt(pow(Y[0,t]-dotproduct,2))
				))
			# calculate loss of Y for new X
			pass
		learner.process(X,Y)
		loss = evaluator.evaluate(X,Y)
		logger.info("Loss (post addition): %2.5f"%loss)