Exemplo n.º 1
0
 def parallel_listener(self,result_queue):
   qtk.progress("MonteCarlo", "waiting results from",
                self.parallel, "threads")
   # check result every 0.01 second, HARD CODED
   while result_queue.empty():
     sleep(0.01)
   result = result_queue.get() # collect results
   qtk.done() # indicate job done
   # return results to master
   return result[0], result[1], result[2] 
Exemplo n.º 2
0
 def parallel_listener(self, result_queue):
     qtk.progress("MonteCarlo", "waiting results from", self.parallel,
                  "threads")
     # check result every 0.01 second, HARD CODED
     while result_queue.empty():
         sleep(0.01)
     result = result_queue.get()  # collect results
     qtk.done()  # indicate job done
     # return results to master
     return result[0], result[1], result[2]
Exemplo n.º 3
0
    def predict(self, size, **kwargs):
        template = copy.deepcopy(self.rest_set)
        index = range(len(self.rest_set))
        rd.shuffle(index)
        test_list = index[:size]
        i = 0
        self.test_set = [self.rest_set[i] for i in test_list]
        self.kernelVectors = np.atleast_2d([])
        self.testCoord = np.array([data.getVector() for data in self.test_set])
        rrows, rcolumns = self.refCoord.shape
        trows, tcolumns = self.testCoord.shape

        # exteral C module
        qtk.progress("Predition", "generating",\
                     "%dx%d" % (trows, rrows),\
                     "kernel projection..." )
        self.kernelVectors = kv.kernel_vectors(self.refCoord, rrows, rcolumns,
                                               self.testCoord, trows, tcolumns,
                                               self.kernel, self.klargs)
        qtk.done()
        test_true = []
        test_pred = []
        for i in range(len(self.test_set)):
            prediction = np.dot(self.kernelVectors[i], self.alphas)
            self.test_set[i].prediction = prediction
            test_true.append(self.test_set[i].ref)
            test_pred.append(prediction)

        # analize and status report
        self.testTrue = np.array(test_true)
        self.testPred = np.array(test_pred)
        self.error = abs(self.testPred - self.testTrue)
        self.MAE = sum(self.error) / len(self.error)
        self.RMSE = np.sqrt(sum(self.error**2) / len(self.testTrue))
        max_index = list(self.error).index(max(self.error))
        min_index = list(self.error).index(min(self.error))
        max_name = self.test_set[max_index].getName()
        min_name = self.test_set[min_index].getName()
        qtk.report("predicted  MAE", self.MAE)
        qtk.report("predicted RMSE", self.RMSE)
        qtk.report("Maximum  error", max(self.error), max_name)
        qtk.report("Minimum  error", min(self.error), min_name)

        def error_estimate(ker, vec):
            tmp = np.vstack([ker, vec])
            K = np.vstack([tmp.T, np.append(vec, 1)]).T
            old = np.linalg.det(ker)
            new = np.linalg.det(K)

            #kvec = np.dot(ker, vec.T)
            #nvec = np.linalg.norm(vec)
            #nkvec = np.linalg.norm(kvec)
            # angle
            #return np.arccos(np.dot(kvec,vec)/nvec/nkvec)
            # length
            return new / old

        #ee = error_estimate(self.kernelMatrix, self.kernelVectors[0])
        def error_i(i):
            return error_estimate(self.kernelMatrix, self.kernelVectors[i])

        verror = np.vectorize(error_i)
        self.errorEstimate = verror(range(trows))
Exemplo n.º 4
0
    def training(self, size, **kwargs):
        """
    set up training set, test set, and calculate alphas
    """

        # 'lambda' is a python keyword...
        if 'deviation' in kwargs:
            self._lambda = kwargs['deviation']
        else:
            self._lambda = 0

        qtk.report("Deviation parameter", self._lambda)

        template = copy.deepcopy(self.data)
        index = range(self.data_size)
        rd.shuffle(index)
        max_index = size
        i = 0
        self.training_set = []
        self.training_index = []
        reference_vector = []
        ref_coord = []
        # keep the flexibility for unset reference datapoint
        while i < max_index:
            if i == self.data_size:
                qtk.exit("reference not set")
            data_point = template[index[i]]
            if not np.isnan(data_point.ref):
                self.training_set.append(data_point)
                self.training_index.append(index[i])
                reference_vector.append(data_point.getRef())
                ref_coord.append(data_point.getVector())
            else:
                max_index += 1
            i += 1
        self.refVector = np.array(reference_vector)
        self.refCoord = np.array(ref_coord)

        self.rest_set = [
            data for i, data in enumerate(template)
            if i not in self.training_index
        ]

        def reset_alpha(i):
            self.rest_set[i].alpha = np.nan

        vreset_alpha = np.vectorize(reset_alpha)
        vreset_alpha(range(len(self.rest_set)))

        rows, columns = self.refCoord.shape

        qtk.progress("Kernel", "generating",\
                     "%dx%d" % (size, size), "kernel matrix...")
        # exteral C module
        self.kernelMatrix = km.kernel_matrix(self.refCoord, rows, columns,
                                             self.kernel, self.klargs)
        qtk.done()

        if 'eigen' in kwargs and kwargs['eigen']:
            qtk.progress("Kernel", "proceed diagonalization...")
            self.kernelEW, self.kernelEV =\
              np.linalg.eigh(self.kernelMatrix)
            qtk.done()

        qtk.progress("Kernel", "inverting...")
        self.alphas = np.dot(np.linalg.inv(self.kernelMatrix\
                             + self._lambda*np.eye(size))\
                            ,self.refVector)
        qtk.done()

        def set_alpha(i):
            self.training_set[i].alpha = self.alphas[i]

        vset_alpha = np.vectorize(set_alpha)
        vset_alpha(range(len(self.training_set)))
Exemplo n.º 5
0
  def predict(self, size, **kwargs):
    template = copy.deepcopy(self.rest_set)
    index = range(len(self.rest_set))
    rd.shuffle(index)
    test_list = index[:size]
    i = 0
    self.test_set = [self.rest_set[i] for i in test_list]
    self.kernelVectors = np.atleast_2d([])
    self.testCoord = np.array(
                      [data.getVector() for data in self.test_set])
    rrows, rcolumns = self.refCoord.shape
    trows, tcolumns = self.testCoord.shape

    # exteral C module
    qtk.progress("Predition", "generating",\
                 "%dx%d" % (trows, rrows),\
                 "kernel projection..." )
    self.kernelVectors = kv.kernel_vectors(self.refCoord, 
                                           rrows, rcolumns, 
                                           self.testCoord, 
                                           trows, tcolumns,
                                           self.kernel,self.klargs)
    qtk.done()
    test_true = []
    test_pred = []
    for i in range(len(self.test_set)):
      prediction = np.dot(self.kernelVectors[i], self.alphas)
      self.test_set[i].prediction = prediction
      test_true.append(self.test_set[i].ref)
      test_pred.append(prediction)

    # analize and status report
    self.testTrue = np.array(test_true)
    self.testPred = np.array(test_pred)
    self.error = abs(self.testPred - self.testTrue)
    self.MAE = sum(self.error)/len(self.error)
    self.RMSE = np.sqrt(sum(self.error**2)/len(self.testTrue))
    max_index = list(self.error).index(max(self.error))
    min_index = list(self.error).index(min(self.error))
    max_name = self.test_set[max_index].getName()
    min_name = self.test_set[min_index].getName()
    qtk.report("predicted  MAE", self.MAE)
    qtk.report("predicted RMSE", self.RMSE)
    qtk.report("Maximum  error", max(self.error), max_name)
    qtk.report("Minimum  error", min(self.error), min_name)
    
    def error_estimate(ker, vec):
      tmp = np.vstack([ker, vec])
      K = np.vstack([tmp.T, np.append(vec,1)]).T
      old = np.linalg.det(ker)
      new = np.linalg.det(K)
      
      #kvec = np.dot(ker, vec.T)
      #nvec = np.linalg.norm(vec)
      #nkvec = np.linalg.norm(kvec)
      # angle
      #return np.arccos(np.dot(kvec,vec)/nvec/nkvec)
      # length
      return new/old

    #ee = error_estimate(self.kernelMatrix, self.kernelVectors[0])
    def error_i(i):
      return error_estimate(self.kernelMatrix,
                            self.kernelVectors[i])
    verror = np.vectorize(error_i)
    self.errorEstimate = verror(range(trows))
Exemplo n.º 6
0
  def training(self, size, **kwargs):
    """
    set up training set, test set, and calculate alphas
    """

    # 'lambda' is a python keyword...
    if 'deviation' in kwargs:
      self._lambda = kwargs['deviation']
    else:
      self._lambda = 0

    qtk.report("Deviation parameter", self._lambda)

    template = copy.deepcopy(self.data)
    index = range(self.data_size)
    rd.shuffle(index)
    max_index = size
    i = 0
    self.training_set = []
    self.training_index = []
    reference_vector = []
    ref_coord = []
    # keep the flexibility for unset reference datapoint
    while i<max_index:
      if i==self.data_size:
        qtk.exit("reference not set")
      data_point = template[index[i]]
      if not np.isnan(data_point.ref):
        self.training_set.append(data_point)
        self.training_index.append(index[i])
        reference_vector.append(data_point.getRef())
        ref_coord.append(data_point.getVector())
      else:
        max_index += 1
      i += 1
    self.refVector = np.array(reference_vector)
    self.refCoord = np.array(ref_coord)
    
    self.rest_set = [data for i, data in enumerate(template) 
                     if i not in self.training_index]
    def reset_alpha(i):
      self.rest_set[i].alpha = np.nan
    vreset_alpha = np.vectorize(reset_alpha)
    vreset_alpha(range(len(self.rest_set)))

    rows, columns = self.refCoord.shape

    qtk.progress("Kernel", "generating",\
                 "%dx%d" % (size, size), "kernel matrix...")
    # exteral C module
    self.kernelMatrix = km.kernel_matrix(self.refCoord,
                                         rows, columns,
                                         self.kernel,self.klargs)
    qtk.done()

    if 'eigen' in kwargs and kwargs['eigen']:
      qtk.progress("Kernel", "proceed diagonalization...")
      self.kernelEW, self.kernelEV =\
        np.linalg.eigh(self.kernelMatrix)
      qtk.done()

    qtk.progress("Kernel", "inverting...")
    self.alphas = np.dot(np.linalg.inv(self.kernelMatrix\
                         + self._lambda*np.eye(size))\
                        ,self.refVector)
    qtk.done()
    def set_alpha(i):
      self.training_set[i].alpha = self.alphas[i]
    vset_alpha = np.vectorize(set_alpha)
    vset_alpha(range(len(self.training_set)))