2015-07-20 18 views
12

ile birden fazla veri kümesi üzerine veriyorum Büyük ve çok yoğun bir veri kümesi üzerinde bazı KMeans kümeleme yapıyorum ve kümeleri görselleştirmenin en iyi yolunu bulmaya çalışıyorum.altıgen

2B'de, hexbin iyi bir iş yapar gibi görünüyor, ancak aynı şekilde kümeleri overplot yapamıyorum. Her bir küme için hexbin'u her biri için ayrı bir renk haritasıyla ayrı ayrı kullanmak istiyorum, ancak bir nedenden dolayı bu işe yaramıyor gibi görünüyor. Görüntü, ikinci ve üçüncü veri kümelerini çizmeye çalışırken elde ettiğimi gösterir.

Bu konuda nasıl ilerleyeceğinize dair herhangi bir öneriniz var mı? enter image description here

bazı işe yaramaz sonra parça kümeleri kesişme vardı ben biraz çalışacak rağmen (kdeplot adresinin çözüm oldukça iyi olduğunu düşünüyorum şahsen Seaborn's kdeplot

enter image description here

+4

İlginç soru hexbin clusters

scatterplot clusters

. Her bir hexbin için 'alpha 'ayarlamayı denediniz mi? Minimal, Tam ve Doğrulanabilir bir örnek yapabilir misiniz? – farenorth

+1

@Labibah Bu, aynı soruya ilginç geliyor: Minimal, Tam ve Doğrulanabilir bir örnek yapabilir misiniz? – rll

+0

@farenorth ile aynı fikirdeyim. Çizim kodunuzla birlikte rastgele sayılarla (kümeleme işleminin nasıl yapıldığını biçimlendirilmiş olarak biçimlendirilmiş) sahte bir veri kümesi oluşturabilir/oluşturabilir misiniz? Diğerleri ile oynamak için çok daha hızlı olacak ... – tmthydvnprt

cevap

3

ile bu hale başardı). Her halükarda, sorunuza yanıt olarak, hexbin'e minimum sayımı sağlayabilirsiniz (tüm boş hücreleri şeffaf olarak bırakarak). İşte bazı deneyler yapmak isteyebilirsiniz herkes için rasgele kümeleri üretmek için küçük bir işlev var (yorum sizin soru, kullanıcılardan çok ilgi inşa etmek gibiydi kullanmak için ücretsiz düştü):

import numpy as np 
import matplotlib.pyplot as plt 

# Building random clusters 
def cluster(number): 
    def clusterAroundX(a,b,number): 
     x = np.random.normal(size=(number,)) 
     return (x-x.min())*(b-a)/(x.max()-x.min())+a 
    def clusterAroundY(x,m,b): 
     y = x.copy() 
     half = (x.max()-x.min())/2 
     middle = half+x.min() 
     for i in range(x.shape[0]): 
      std = (x.max()-x.min())/(2+10*(np.abs(middle-x[i])/half)) 
      y[i] = np.random.normal(x[i]*m+b,std) 
     return y + np.abs(y.min()) 
    m,b = np.random.randint(-700,700)/100,np.random.randint(0,50) 
    print(m,b) 
    f = np.random.randint(0,30) 
    l = f + np.random.randint(10,50) 
    x = clusterAroundX(f,l,number) 
    y = clusterAroundY(x,m,b) 
    return x,y 

, bu kullanarak kod bir kaç küme ürettim, scatterplot ile bunları çizdim (genellikle bunu kendi küme analizlerimde kullanırım, ama sanırım bende denizaltına bakmalıyım), hexbin, imshow (daha fazla kontrol için pcolormesh için değişim) ve konturf:

:

clusters = 5 
samples = 300 
xs,ys = [],[] 
for i in range(clusters): 
    x,y = cluster(samples) 
    xs.append(x) 
    ys.append(y) 

# SCATTERPLOT 
alpha = 1 
for i in range(clusters): 
    x,y = xs[i],ys[i] 
    color = (np.random.randint(0,255)/255,np.random.randint(0,255)/255,np.random.randint(0,255)/255) 
    plt.scatter(x,y,c = color,s=90,alpha=alpha) 
plt.show() 

# HEXBIN 
# Hexbin seems a bad choice because I think you cant control the size of the hexagons. 
alpha = 1 
cmaps = ['Reds','Blues','Purples','Oranges','Greys'] 
for i in range(clusters): 
    x,y = xs[i],ys[i] 
    plt.hexbin(x,y,gridsize=20,cmap=cmaps.pop(),mincnt=1) 
plt.show() 

# IMSHOW 
alpha = 1 
cmaps = ['Reds','Blues','Purples','Oranges','Greys'] 
xmin,xmax = min([i.min() for i in xs]), max([i.max() for i in xs]) 
ymin,ymax = min([i.min() for i in ys]), max([i.max() for i in ys]) 
nums = 30 
xsize,ysize = (xmax-xmin)/nums,(ymax-ymin)/nums 
im = [np.zeros((nums+1,nums+1)) for i in range(len(xs))] 
def addIm(im,x,y): 
    for i,j in zip(x,y): 
     im[i,j] = im[i,j]+1 
    return im 
for i in range(len(xs)): 
    xo,yo = np.int_((xs[i]-xmin)/xsize),np.int_((ys[i]-ymin)/ysize) 
    #im[i][xo,yo] = im[i][xo,yo]+1 
    im[i] = addIm(im[i],xo,yo) 
    im[i] = np.ma.masked_array(im[i],mask=(im[i]==0)) 
for i in range(clusters): 
    # REPLACE BY pcolormesh if you need more control over image locations. 
    plt.imshow(im[i].T,origin='lower',interpolation='nearest',cmap=cmaps.pop()) 
plt.show() 

# CONTOURF 
cmaps = ['Reds','Blues','Purples','Oranges','Greys'] 
for i in range(clusters): 
    # REPLACE BY pcolormesh if you need more control over image locations. 
    plt.contourf(im[i].T,origin='lower',interpolation='nearest',cmap=cmaps.pop()) 
plt.show() 

, sonuç folloing vardır

imshow clusters

countourf clusters

İlgili konular