Python 使用KMeans按空间划分划分训练/验证集:确保训练/验证的每个子集都包含所有标签
我希望在这里能得到一些帮助。我想使用Kmeans聚类来划分下一阶段监督学习的训练集,这在文献中称为Python 使用KMeans按空间划分划分训练/验证集:确保训练/验证的每个子集都包含所有标签,python,scikit-learn,cluster-analysis,k-means,image-segmentation,Python,Scikit Learn,Cluster Analysis,K Means,Image Segmentation,我希望在这里能得到一些帮助。我想使用Kmeans聚类来划分下一阶段监督学习的训练集,这在文献中称为空间分割 我已经从三维图像数据(在一个扩展的遮罩内)中提取了特征(X_序列),其中包括X、y和z(体素的位置),遮罩包括两个标签(y_序列={0:background,1:obj1})。这意味着每个体素可以是背景或带有遮罩的对象 我在scikit learn中使用了Kmeans聚类,并将训练数据集的体素位置([x,y,z])聚类为80个不同的聚类 问题问题是,一旦我根据80个集群划分了训练集 fr
空间分割
我已经从三维图像数据(在一个扩展的遮罩内)中提取了特征(X_序列
),其中包括X、y和z(体素的位置),遮罩包括两个标签(y_序列={0:background,1:obj1}
)。这意味着每个体素可以是背景或带有遮罩的对象
我在scikit learn中使用了Kmeans聚类,并将训练数据集的体素位置([x,y,z]
)聚类为80个不同的聚类
问题问题是,一旦我根据80个集群划分了训练集
from sklearn.cluster import KMeans
pos_ind=[0,1,2]
kmeans_model= KMeans(n_clusters=80, random_state=rng).fit(X_TRAIN[:,pos_ind])
稍后,我加载kmeans\u模型
,并将验证集分配给集群:
Dval_clusters = kmeans_model.predict(X_DVAL[:, pos_ind])
然后我找到了验证集的行索引,它属于cidx
th类
cluster_idx = np.unique(kmeans_model.labels_)
Dval_rows = np.where(Dval_clusters==cluster_idx[cidx])[0] # find the rows of X_dval that belongs to cidx th cluster
X_dval = X_Dval[Dval_rows]
y_dval = y_Dval[Dval_rows]
一旦我在训练模型上拟合验证集,训练模型可能有两个标签0
和1
,但是,在拟合验证
集的过程中显示错误,这意味着在将验证样本分配给簇的过程中,它只拾取具有背景
或obj
体素的体素(即,一个簇的一个验证集中的所有样本只有一个类别标签)
问题我知道聚类不使用标签,但在聚类过程中,是否可以对两个标签进行采样,从而强制执行聚类?还是有什么诀窍?因为背景只是一个类标签,我们需要将对象类(类:1)与背景(类:0)分开
如果你把你的专家意见留在这里,我将不胜感激
ValueError: could not broadcast input array from shape (30527,1) into shape (30527,2)