K++算法筛选最远点

K++算法是优化版的kmeans算法,它避免不准确,所以要筛选两个距离远的点来作为中心点
1.在样本中随机一个中心点
2.在样本中找到距上一个中心点较远的一个点作为中心点
3.用kmeans算法进行聚类
下面是筛选距离的一个方法源代码


def roll_select(samples_distance):
    """
        samples_distance:为样本当前的距离列表,get_distance的返回结果
        选择下一个聚类中心,以距离远近作为概率值,距离越远则被选择概率越大,距离越近则概率越小
    """
    # 依据距离计算每个样本点被选择作为下一个聚类中心点的概率
    p = samples_distance / np.sum(samples_distance)
    # 采用轮盘赌选择法选择下一个聚类中心
    cum_p = np.cumsum(p)#累计和
    # print(cum_p)
    select_index_lst = []
    # 为确保选择聚类中心比较靠谱,做多次轮盘赌选择出现次数比较多的样本索引
    for i in range(int(0.15 * len(samples_distance))):
        rand_num = rd.random()
        select_index = list(rand_num > cum_p).index(False)#
        print(select_index)
        select_index_lst.append(select_index)
    count_dict = {i: select_index_lst.count(i) for i in np.unique(select_index_lst)}#选出不同的元素并计算出出现次数
    select_index = sorted(count_dict, key=lambda x: count_dict[x])[-1]#排序从后向前排序
    return select_index

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值