示例#1
0
def run_single_nmf_experiment(mat, n_components, apply_nan, labels):
    if apply_nan:
        nmf = NMF.NMF(n_components=n_components, apply_nan_mask=True, nan_weight=0.1)
    else:
        nmf = NMF.NMF(n_components=n_components)

    W, H = nmf.decompose(mat)
    clusters = W.argmax(axis=1)

    nmi, nmi_t, nmi_p = calc_score_significance(labels, clusters, normalized_mutual_info_score)
    if nmi_p >= 0.05:
        print('non conclusive NMI with {} and nan_mask={} '.format(n_components, apply_nan),
              nmi_t, nmi_p)

    sill = silhouette_score(mat.toarray(), clusters)

    accs = []
    f1s = []
    for i in range(20):
        f1, f1_t, f1_p, acc, acc_t, acc_p = semi_supervised_classify(labels, clusters)
        accs.append(acc)
        f1s.append(f1)
        if f1_p >= 0.05:
            print('non conclusive f1 score with {} and nan_mask={} '.format(n_components, apply_nan),
                  f1_t, f1_p)
        if acc_p >= 0.05:
            print('non conclusive accuracy score with {} and nan_mask={} '.format(n_components, apply_nan),
                  acc_t, acc_p)

    return {'nmi': nmi, 'nmi_p': nmi_p, 'sill': sill,
            'acc': np.mean(accs), 'acc_std': np.std(accs),
            'f1': np.mean(f1s), 'f1_std': np.std(f1s)}