def statistics_kmm (n,d): from shogun.Features import RealFeatures from shogun.Features import DataGenerator from shogun.Kernel import GaussianKernel, MSG_DEBUG from shogun.Statistics import KernelMeanMatching from shogun.Mathematics import Math # init seed for reproducability Math.init_random(1) random.seed(1); data = random.randn(d,n) # create shogun feature representation features=RealFeatures(data) # use a kernel width of sigma=2, which is 8 in SHOGUN's parametrization # which is k(x,y)=exp(-||x-y||^2 / tau), in constrast to the standard # k(x,y)=exp(-||x-y||^2 / (2*sigma^2)), so tau=2*sigma^2 kernel=GaussianKernel(10,8) kernel.init(features,features) kmm = KernelMeanMatching(kernel,array([0,1,2,3,7,8,9],dtype=int32),array([4,5,6],dtype=int32)) w = kmm.compute_weights() #print w return w
def train_kmm(self): width = float(self.sigma.text()) degree = int(self.degree.text()) self.axes.clear() self.axes.grid(True) self.axes.plot(self.data.x1_test, self.data.x2_test, 'ro') self.axes.plot(self.data.x1_train, self.data.x2_train, 'bo') # train kmm labels = self.data.get_labels() lab = BinaryLabels(labels) features = self.data.get_examples() train = RealFeatures(features) nTrain=len(self.data.x1_train); nTest=len(self.data.x1_test); trainI=numpy.array(range(nTrain), dtype=numpy.int32) testI=numpy.array(range(nTrain,nTest+nTrain),dtype=numpy.int32) kernel_name = self.kernel_combo.currentText() print "current kernel is %s" % (kernel_name) if kernel_name == "LinearKernel": gk = LinearKernel(train, train) gk.set_normalizer(IdentityKernelNormalizer()) elif kernel_name == "PolynomialKernel": gk = PolyKernel(train, train, degree, True) gk.set_normalizer(IdentityKernelNormalizer()) elif kernel_name == "GaussianKernel": gk = GaussianKernel(train, train, width) kmm = KernelMeanMatching(gk, trainI, testI) w = kmm.compute_weights() print 'Weights' print w self.axes.clear() self.axes.grid(True) self.axes.plot(self.data.x1_test, self.data.x2_test, 'ro') m_size=numpy.array(w*1000, dtype=numpy.int32) self.axes.scatter(self.data.x1_train, self.data.x2_train, s=m_size) self.axes.set_xlim((-5,5)) self.axes.set_ylim((-5,5)) self.canvas.draw()