Python 随机抽取每个聚类的x%

Python 随机抽取每个聚类的x%,python,scikit-learn,Python,Scikit Learn,我正在进行一个项目,旨在利用我的数据集的聚类结构来改进用于二元分类的有监督主动学习分类器。我使用以下代码对数据进行集群,X使用scikit Leaner的K-Means实现: k = KMeans(n_clusters=(i+2), precompute_distances=True, ).fit(X) df = pd.DataFrame({'cluster' : k.labels_, 'percentage posotive' : y}) a = df.groupby('cluster').a

我正在进行一个项目,旨在利用我的数据集的聚类结构来改进用于二元分类的有监督主动学习分类器。我使用以下代码对数据进行集群,
X
使用scikit Leaner的K-Means实现:

k = KMeans(n_clusters=(i+2), precompute_distances=True, ).fit(X)
df = pd.DataFrame({'cluster' : k.labels_, 'percentage posotive' : y})
a = df.groupby('cluster').apply(lambda cluster:cluster.sum()/cluster.count())
这两个类是正数(由1表示)和负数(由0表示),并存储在数组
y
中。 该代码首先对
X
进行聚类,然后将每个聚类数和其中正实例的百分比存储在数据框中

我现在想从每个聚类中随机选择点,直到我已经采样了15%。我该怎么做

根据要求,这里有一个简化的脚本,包括一个测试数据集:

from sklearn.cluster import KMeans
import pandas as pd
X = [[1,2], [2,5], [1,2], [3,3], [1,2], [7,3], [1,1], [2,19], [1,11], [54,3], [78,2], [74,36]]
y = [0,0,0,0,0,0,0,0,0,1,0,0]
k = KMeans(n_clusters=(4), precompute_distances=True, ).fit(X)
df = pd.DataFrame({'cluster' : k.labels_, 'percentage posotive' : y})
a = df.groupby('cluster').apply(lambda cluster:cluster.sum()/cluster.count())
print(a)
注:实际数据集要大得多,由数千个特征和数千个数据实例组成

回应:

我不能告诉你太多,但基本上我们处理的是一个高度不平衡的数据集(1:10000),我们只对识别召回率>95%的少数类示例感兴趣,同时减少要求的标签数量。(召回率需要高到与医疗保健相关的程度。)


少数示例聚集在一起,任何包含正实例的集群通常至少包含x%,因此通过采样x%,我们确保识别所有具有正实例的集群。因此,我们能够快速减少数据集的大小,并带来潜在的积极影响。然后,该水平数据集可用于主动学习。我们的方法大致受

启发。如果我理解正确,下面的代码应该可以达到这个目的:

import numpy as np

# For each cluster 
# (1) Find all the points from X that are assigned to the cluster. 
# (2) Choose x% from those points randomly.

n_clusters = 4
x = 0.15 # percentage

for i in range(n_clusters):

    # (1) indices of all the points from X that belong to cluster i
    C_i = np.where(k.labels_ == i)[0].tolist() 
    n_i = len(C_i) # number of points in cluster i

    # (2) indices of the points from X to be sampled from cluster i
    sample_i = np.random.choice(C_i, int(x * n_i)) 
    print i, sample_i

出于好奇,您打算如何使用这些
x%
点进行主动学习?

我不认为您也用1表示否定。不管怎样,您发布了一个(小)示例数据集来进行此操作?@Denziloe Good catch,已经进行了相应的编辑。即将添加小测试数据集。@Denziloe已经添加了测试数据集。非常感谢@scutnex添加说明。谢谢!已经提供了接近的简要说明非常感谢@scutnex添加说明,非常感谢。