Пример #1
0
def _median(x, inplace):
    assert(x.ndim == 1)
    n = x.shape[0]
    if n > 3:
        k = n >> 1
        s = select(x, k, inplace=inplace)
        if n & 1:
            return s[k]
        else:
            return 0.5*(s[k]+s[:k].max())      
    elif n == 0:
        return np.nan
    elif n == 2:
        return 0.5*(x[0]+x[1])        
    else: # n == 3
        s = select(x, 1, inplace=inplace)
        return s[1]
Пример #2
0
 def pred_knn(self, sample):
     distances = [euclidean(x, sample) for x in self.X_train]
     tmp_dst = distances[:]
     k_smallest = q.select(tmp_dst, 0, len(tmp_dst) - 1, self.k)
     labels = [
         self.Y_train[i] for i, dist in enumerate(distances)
         if dist < k_smallest
     ]
     return max(set(labels), key=labels.count)
Пример #3
0
    def predict(self, X_test):
        predictions = []
        for sample in X_test:
            distances = [euclidean(x, sample) for x in self.X_train]
            # indices = np.array(distances).argsort()[:self.k]
            # labels = [Y_train[index] for index in indices]
            tmp_dst = distances[:]
            k_smallest = q.select(tmp_dst, 0, len(tmp_dst) - 1, self.k)
            labels = [
                self.Y_train[i] for i, dist in enumerate(distances)
                if dist < k_smallest
            ]
            predictions.append(max(set(labels), key=labels.count))

        return predictions
Пример #4
0
	def partition(self, points, start, end, cutdim, minx, miny, maxx, maxy):
		n = kdnode();
		n.st = start;
		n.end = end;
		n.minx = minx;
		n.miny = miny;
		n.width = maxx-minx;
		n.height = maxy-miny;
		if ( cutdim >= 2 ):
			cutdim = 0;
		if ( (end-start) > self.maxbinsz ):
			med = select(points, int( (start+end)/2 )-start, cutdim, start, end-1);
			n.dim = cutdim;
			n.val = med;
			## Plotting ##
			s = [minx, miny];
			e = [maxx, maxy];
			s[n.dim] = n.val[n.dim];
			e[n.dim] = n.val[n.dim];
			plt.plot([s[0], e[0]], [s[1], e[1]]);
			self.fig.canvas.draw();
			self.fig.canvas.flush_events();
			plt.show();
			
			if self.stepmode:
				a = input("Press Enter to step or c to continue:")
				if a == 'c':
					self.stepmode = False
					print("finishing...")
			else:
				time.sleep(self.timer);
			## -------- ##
			mid = int( (start+end)/2 );
			if (cutdim == 0):
				n.lessChild = self.partition(points, start, mid, cutdim+1, minx, miny, e[0], maxy);
				n.greaterChild = self.partition(points, mid, end, cutdim+1, s[0], miny, maxx, maxy);
			elif (cutdim == 1):
				n.lessChild = self.partition(points, start, mid, cutdim+1, minx, miny, maxx, e[1]);
				n.greaterChild = self.partition(points, mid, end, cutdim+1, minx, s[1], maxx, maxy);
		return n;