コード例 #1
0
    def setUp(cls):
        # initialize the data
        n = 10000
        cls.alpha = 1.5
        cls.beta = -2.0
        np.random.seed(20170807)
        theta_vec = np.random.normal(loc=0.0, scale=1.0, size=n)
        y1 = []
        y0 = []
        for i in range(n):
            # generate the two parameter likelihood
            prob = tools.irt_fnc(theta_vec[i], cls.beta, cls.alpha)
            # generate the response sequence
            if prob >= np.random.uniform():
                y1.append(1.0)
                y0.append(0.0)
            else:
                y1.append(0.0)
                y0.append(1.0)
        # the response format follows the solver API
        response_data = [y1, y0]
        cls.init_theta_vec = theta_vec

        cls.solver = optimizer.irt_2PL_Optimizer()
        cls.solver.load_res_data(response_data)
        cls.solver.set_c(0)
        cls.solver.set_bounds([(-4.0, 4.0), (0.05, 2)])
コード例 #2
0
    def setUpClass(cls):
        # initialize the data
        n = 1000
        cls.theta = 1.5
        np.random.seed(20170807)
        alpha_vec = np.random.random(n) + 1  # 1-2
        beta_vec = np.random.normal(loc=0.0, scale=2.0, size=n)
        c_vec = np.zeros(n)
        y1 = []
        y0 = []
        for i in range(n):
            # generate the two parameter likelihood
            prob = tools.irt_fnc(cls.theta, beta_vec[i], alpha_vec[i])
            # generate the response sequence
            if prob >= np.random.uniform():
                y1.append(1.0)
                y0.append(0.0)
            else:
                y1.append(0.0)
                y0.append(1.0)
        # the response format follows the solver API
        response_data = [y1, y0]

        # initialize optimizer
        cls.solver = optimizer.irt_factor_optimizer()
        cls.solver.load_res_data(response_data)
        cls.solver.set_item_parameter(alpha_vec, beta_vec, c_vec)
        cls.solver.set_bounds([(-4, 4)])
コード例 #3
0
 def setUpClass(cls):
     # simulate
     np.random.seed(20170807)
     thetas = np.random.rand(N,1)*theta_range - theta_range/2   
     cls.data = []
     for i in range(N):
         for t in range(T):
             prob = irt_fnc(thetas[i,0], beta[t], alpha[t], c[t])
             cls.data.append((i, item_ids[t] ,np.random.binomial(1,prob)))
コード例 #4
0
 def test_irt_fnc(self):
     # make sure the shuffled sequence does not lose any elements
     prob = tools.irt_fnc(0.0, 0.0, 1.0)
     self.assertEqual(prob, 0.5)
     # alpha should play no role
     prob = tools.irt_fnc(0.0, 0.0, 2.0)
     self.assertEqual(prob, 0.5)
     # higher theta should have higher prob
     prob = tools.irt_fnc(1.0, 0.0, 1.0)
     self.assertEqual(prob, 1.0 / (1.0 + math.exp(-1.0)))
     # cancel out by higher beta
     prob = tools.irt_fnc(1.0, -1.0, 1.0)
     self.assertEqual(prob, 0.5)
     # test for c as limit situation
     prob = tools.irt_fnc(-99, 0.0, 1.0, 0.25)
     self.assertTrue(abs(prob - 0.25) < 1e-5)
     prob = tools.irt_fnc(99, 0.0, 1.0, 0.25)
     self.assertTrue(abs(prob - 1.0) < 1e-5)