Büyük bir veri kümeniz varsa ve isteğe bağlı kümeleri çıkarmanız gerekiyorsa, numpy.where
'u kullanarak bir miktar hızlanma görürsünüz. İşte iris veri kümesi üzerinde bir örnektir:
from sklearn.cluster import KMeans
from sklearn import datasets
import numpy as np
centers = [[1, 1], [-1, -1], [1, -1]]
iris = datasets.load_iris()
X = iris.data
y = iris.target
km = KMeans(n_clusters=3)
km.fit(X)
sağladığınız cluster_id endeksleri ayıklamak için bir fonksiyon tanımlanır. (Burada iki işlev karşılaştırma için, her ikisi de aynı değerleri döndürür vardır):
ClusterIndicesNumpy(2, km.labels_)
array([ 52, 77, 100, 102, 103, 104, 105, 107, 108, 109, 110, 111, 112,
115, 116, 117, 118, 120, 122, 124, 125, 128, 129, 130, 131, 132,
134, 135, 136, 137, 139, 140, 141, 143, 144, 145, 147, 148])
Numpy kriter kazanır:
def ClusterIndicesNumpy(clustNum, labels_array): #numpy
return np.where(labels_array == clustNum)[0]
def ClusterIndicesComp(clustNum, labels_array): #list comprehension
return np.array([i for i, x in enumerate(labels_array) if x == clustNum])
Diyelim ki küme 2
bulunan tüm numunelerin istediğinizi varsayalım
%timeit ClusterIndicesNumpy(2,km.labels_)
100000 loops, best of 3: 4 µs per loop
%timeit ClusterIndicesComp(2,km.labels_)
1000 loops, best of 3: 479 µs per loop
Artık çok sevdiği küme 2 veri noktalarının tümünü çıkarabilir:
X[ClusterIndicesNumpy(2,km.labels_)]
array([[ 6.9, 3.1, 4.9, 1.5],
[ 6.7, 3. , 5. , 1.7],
[ 6.3, 3.3, 6. , 2.5],
... #truncated
kez daha kontrol yukarıdaki kesik diziden ilk üç endeks: Ben benzer bir gereksinim vardı ve ben veri kümesinin indeksi ile yeni bir dataframe oluşturmak için pandaların kullanıyorum
print X[52], km.labels_[52]
print X[77], km.labels_[77]
print X[100], km.labels_[100]
[ 6.9 3.1 4.9 1.5] 2
[ 6.7 3. 5. 1.7] 2
[ 6.3 3.3 6. 2.5] 2
devamı yöntem işe İdime 3 de, tüm veri noktaları filtre oldukça kolaydır. Ancak, etiketlerin verimli olması için hepsinde yinelenen çok fazla veri noktası olduğunda. Sadece belirli bir kümenin veri noktalarının listesiydi. Bunu yapmanın başka bir yolu yok mu? – user77005