笑脸数据集——用于聚类分析

密度聚类算法通常需要多种形状的数据集进行测试,提供一种笑脸数据的实现方法。

import numpy as np
from sklearn import datasets
import matplotlib.pyplot as plt

def smileface(std):
    radius = 0.55
    theta = np.linspace(np.pi*5/4, np.pi*7/4, 100)
    Mouth = np.zeros((len(theta), 2))
    Mouth[:, 0] = radius * np.cos(theta)
    Mouth[:, 1] = radius * np.sin(theta)
    noise = np.random.normal(0, std, (len(theta), 2))
    Mouth = Mouth + noise
    Face, face1 = datasets.make_circles(n_samples=200, factor=0.99, noise=std)
    EyeL, eyel = datasets.make_blobs(n_samples=50, n_features=2, centers=[[-0.375, 0.3]], cluster_std=[[std*2]], random_state=9)
    EyeR, eyeR = datasets.make_blobs(n_samples=50, n_features=2, centers=[[0.375, 0.3]], cluster_std=[[std*2]], random_state=9)
    X = np.concatenate((Face, Mouth, EyeL, EyeR))
    return X

if __name__ == "__main__":
    Smileface1 = smileface(0.01)
    Smileface2 = smileface(0.1)
    plt.subplot(1, 2, 1)
    plt.scatter(Smileface1[:, 0], Smileface1[:, 1])
    plt.title('std = 0.01')
    plt.subplot(1, 2, 2)
    plt.scatter(Smileface2[:, 0], Smileface2[:, 1])
    plt.title('std = 0.1')
    plt.suptitle('SMILE FACE')
    plt.show()

脸部轮廓由datasets.make.make_circles()函数生成圆形。

双眼由datasets.make_blobs()生成两个点状散点。

datasets中无直接实现半弧形数据的函数,因此通过设计一个圆形数据,取其-\frac{3}{4}\pi-\frac{1}{4}\pi的部分,再使用random函数生成噪声。

最后通过np.concatenate()函数将上述数据合并为一个数据集。

smileface()参数std为数据噪声的标准差,std越大,数据离散程度越大,std越小,数据越集中,建议在0.01至0.1范围内取值。

下图为std分别为0.01和0.1时生成的数据集。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值