Exemple #1
0
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()