首页 > 解决方案 > 有没有办法计算 make_blob 生成的数据集的 cluster_std?

问题描述

make_blobs()用于生成用于聚类的各向同性高斯斑点。

参数cluster_std是集群的标准偏差。

我生成了一个数据集:

x, y = make_blobs(n_samples=100, centers=6,
                       cluster_std=0.60, random_state=1234)

并试图计算标准偏差:

np.std(x)

输出

5.122249276993561

这与初始参数相去甚远0.60

有没有办法正确计算标准差?

标签: pythonnumpyscikit-learnstandard-deviationdata-generation

解决方案


make_blobs()中,您可以看到标准偏差的规范0.60已作为参数接收generator.normal(loc=centers[i], scale=std, size=(n, n_features)),这是 sklearn 为每个集群生成数据点的方式。

您应该计算每个集群中每个特征的标准差:

import numpy as np

for i in set(y):
    print('--> label {}'.format(i))
    for j in range(x.shape[1]):
        print('std for feature {}: {}'.format(j, np.std(x[y==i][:,j])))

你得到:

--> label 0
std for feature 0: 0.345293121830674
std for feature 1: 0.7142696641502757
--> label 1
std for feature 0: 0.5041694666576663
std for feature 1: 0.6269103210381141
--> label 2
std for feature 0: 0.4168488521809934
std for feature 1: 0.6994177825578384
--> label 3
std for feature 0: 0.5760022004454849
std for feature 1: 0.580543624607708
--> label 4
std for feature 0: 0.5977962642901783
std for feature 1: 0.5271686872743192
--> label 5
std for feature 0: 0.6462807280468825
std for feature 1: 0.4928028738564903

推荐阅读