【论文代码复现2】Clustered sampling based on sample size

【论文代码复现】Clustered Sampling: Low-Variance and Improved Representativity for Clients Selection in Fede_admin11111111的博客-CSDN博客https://blog.csdn.net/admin11111111/article/details/120499243上一篇文章最后留了一个疑惑,经过检验确实是有问题的,那样写逻辑是错误的。并不符合论文中将所有clients都采样的说法。然后在更改了epsilon之后就可以正常运行了,但是给出的代码中直接是默认所有clients的样本量都相同,所以分配的权重也都相同。

算法1实现:

具体实现就是将100个clients按照权重大小从大到小排序再分成k=10组,然后计算根据权重大小计算每组中client的抽样概率。因为算法1中给的client的样本数量都相同,所以权重相同,各个clients抽样概率也相同。

于是这就有漏洞了——如果有恶意攻击者命名数据量很小,却说自己数据量很大则会导致系统崩溃。也就是数据量大,则抽样概率大幅增加,计算梯度时就会受到影响。

攻击方式

具体攻击策略就是还是按照他原本的样本量的shard划分,这样能保证攻击者的样本量不大,但是使得它的抽样概率大幅度增加,破坏了基于样本量大小的抽样策略。

def get_clusters_with_alg1(n_sampled: int, weights: np.array):
    "Algorithm 1"

    epsilon = int(10 ** 8)
    # associate each client to a cluster
    augmented_weights = np.array([w * n_sampled * epsilon for w in weights])
    ordered_client_idx = np.flip(np.argsort(augmented_weights))

    # 攻击方式1 ——如果有恶意攻击者命名数据量很小却说自己数据量很大会导致系统崩溃  20211017
    # 1. 直接让k=0组的某个client权重增加,或者某几个权重增加测试结果
    # 2. 让其他组的clients在组内的权重也不同
    augmented_weights[ordered_client_idx[0]] *= 8 # 权重增加8倍,抽样概率则变为0.8
    
    n_clients = len(weights)
    distri_clusters = np.zeros((n_sampled, n_clients)).astype(int)

    k = 0
    for client_idx in ordered_client_idx:

        while augmented_weights[client_idx] > 0:

            sum_proba_in_k = np.sum(distri_clusters[k])

            u_i = min(epsilon - sum_proba_in_k, augmented_weights[client_idx])

            distri_clusters[k, client_idx] = u_i
            augmented_weights[client_idx] += -u_i

            sum_proba_in_k = np.sum(distri_clusters[k])
            if sum_proba_in_k == 1 * epsilon:
                k += 1

    distri_clusters = distri_clusters.astype(float)
    for l in range(n_sampled):
        distri_clusters[l] /= np.sum(distri_clusters[l])

    return distri_clusters

解决这种攻击方式,则需要从实际样本量入手,但是联邦学习的隐私安全性是不允许获取clients的用户数据量大小的,所以论文代码的实现方案,选择的是不管clients样本量大小如何,都分配统一权重,那么如何实现算法1基于样本量大小的抽样方式呢?

补上算法2实现:

算法2的实现也是分配给所有clients同样的权重,然后根据梯度相似性来重新计算权重,最后对梯度相似性矩阵进行聚类得到91类,也就是说梯度的相似性会影响到clients的抽样权重。

太困了明天再写。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
以下是一些可能有用的Qiime2 16S双端数据分析代码示例: 1. 导入数据 ``` qiime tools import \ --type 'SampleData[PairedEndSequencesWithQuality]' \ --input-path /path/to/fastq \ --input-format CasavaOneEightSingleLanePerSampleDirFmt \ --output-path paired-end-demux.qza ``` 2. 进行序列质量控制 ``` qiime quality-filter q-score-joined \ --i-demux paired-end-demux.qza \ --o-filtered-demux filtered-demux.qza ``` 3. 对序列进行去嵌合 ``` qiime vsearch join-pairs \ --i-demultiplexed-seqs filtered-demux.qza \ --o-joined-sequences joined-seqs.qza ``` 4. 进行序列去噪 ``` qiime deblur denoise-16S \ --i-demultiplexed-seqs joined-seqs.qza \ --p-trim-length 250 \ --o-representative-sequences rep-seqs-deblur.qza \ --o-table table-deblur.qza \ --o-stats deblur-stats.qza ``` 5. 进行OTU聚类 ``` qiime vsearch cluster-features-de-novo \ --i-sequences rep-seqs-deblur.qza \ --p-perc-identity 0.97 \ --o-clustered-table table-otu.qza \ --o-clustered-sequences rep-seqs-otu.qza ``` 6. 进行alpha和beta多样性分析 ``` qiime diversity alpha-group-significance \ --i-alpha-diversity shannon.qza \ --m-metadata-file metadata.txt \ --o-visualization shannon-group-significance.qzv qiime diversity beta-group-significance \ --i-distance-matrix unweighted_unifrac_distance_matrix.qza \ --m-metadata-file metadata.txt \ --m-metadata-column treatment \ --o-visualization unweighted-unifrac-group-significance.qzv ``` 7. 进行物种注释 ``` qiime feature-classifier classify-sklearn \ --i-classifier classifier.qza \ --i-reads rep-seqs-otu.qza \ --o-classification taxonomy.qza qiime metadata tabulate \ --m-input-file taxonomy.qza \ --o-visualization taxonomy.qzv ``` 这些代码示例应该可以帮助您开始使用Qiime2进行16S双端数据分析。请注意,您需要根据自己的数据和研究问题进行调整和修改。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值