# 根据各簇均值,将数据集中的各对象,分配到每个簇,注意,各族保存的是对象下标 def allocation_objects_to_cluster(means, D): ''' params: means:各簇均值 D :数据集 return: clusters:返回包含各族的数组,每个簇用数组保存该簇中的数据对象 ''' # 保存每个簇中对象索引 clusters_indices=[[] for i in means] # 对每一个对象 for idx in range(len(D)): # 第idx个对象 obj=D[idx] #计算第idx个对象与每个均值的距离 dists=euclidean_distance(obj,means) #print(idx, dists) #找出短距离下标,该下标对应的就是相应的簇下标 min_idx=np.argmin(dists) #将该对象下标idx,保存到min_idx簇中 clusters_indices[min_idx].append(idx) #print([len(cluster_indicess) for cluster_indices in clusters_indices]) return clusters_indices
时间: 2024-02-14 16:16:21 浏览: 83
根据您提供的代码,函数allocation_objects_to_cluster的实现似乎是正确的。该函数计算每个对象到每个簇均值的距离,并将每个对象分配到最近的簇中。函数将返回一个包含所有簇的列表,每个簇都是一个由对象索引构成的列表。以下是函数的实现:
```python
def allocation_objects_to_cluster(means, D):
'''
params:
means: 各簇均值
D: 数据集
return:
clusters: 返回包含各族的数组,每个簇用数组保存该簇中的数据对象
'''
# 保存每个簇中对象索引
clusters_indices = [[] for i in means]
# 对每一个对象
for idx in range(len(D)):
# 第idx个对象
obj = D[idx]
# 计算第idx个对象与每个均值的距离
dists = euclidean_distance(obj, means)
# 找出短距离下标,该下标对应的就是相应的簇下标
min_idx = np.argmin(dists)
# 将该对象下标idx,保存到min_idx簇中
clusters_indices[min_idx].append(idx)
return clusters_indices
```
您可以使用以下代码来测试该函数:
```python
test_D=np.array([
[4.6, 3.1, 1.5, 0.2],
[5. , 3.6, 1.4, 0.2],
[5.4, 3.9, 1.7, 0.4],
[4.6, 3.4, 1.4, 0.3],
[5. , 3.4, 1.5, 0.2],
[4.4, 2.9, 1.4, 0.2],
[4.9, 3.1, 1.5, 0.1],
[5.4, 3.7, 1.5, 0.2],
[4.8, 3.4, 1.6, 0.2]
])
clusters_indice = [[0, 3, 6], [1, 2, 4, 7, 8], [5]]
means = count_clusters_means(clusters_indice, test_D)
clusters = allocation_objects_to_cluster(means, test_D)
print(clusters)
```
该代码将输出一个包含三个簇的列表,每个簇都是一个由对象索引构成的列表。
阅读全文