|
|
|
@@ -1,97 +0,0 @@ |
|
|
|
# coding: utf-8 |
|
|
|
#================================================================# |
|
|
|
# Copyright (C) 2021 Freecss All rights reserved. |
|
|
|
# |
|
|
|
# File Name :nonshare_example.py |
|
|
|
# Author :freecss |
|
|
|
# Email :karlfreecss@gmail.com |
|
|
|
# Created Date :2021/06/07 |
|
|
|
# Description : |
|
|
|
# |
|
|
|
#================================================================# |
|
|
|
|
|
|
|
from utils.plog import logger |
|
|
|
from models.wabl_models import DecisionTree, KNN |
|
|
|
import pickle as pk |
|
|
|
import numpy as np |
|
|
|
import time |
|
|
|
import framework |
|
|
|
|
|
|
|
from multiprocessing import Pool |
|
|
|
import os |
|
|
|
from datasets.data_generator import generate_data_via_codes, code_generator |
|
|
|
from collections import defaultdict |
|
|
|
from abducer.abducer_base import AbducerBase |
|
|
|
from abducer.kb import ClsKB, RegKB |
|
|
|
|
|
|
|
def run_test(params): |
|
|
|
code_len, times, code_num, share, model_type, need_prob, letter_num = params |
|
|
|
|
|
|
|
if share: |
|
|
|
result_dir = "share_result" |
|
|
|
else: |
|
|
|
result_dir = "non_share_result" |
|
|
|
|
|
|
|
recoder_file_path = f"{result_dir}/random_{times}_{code_len}_{code_num}_{model_type}_{need_prob}.pk" |
|
|
|
|
|
|
|
words = code_generator(code_len, code_num, letter_num) |
|
|
|
kb = ClsKB(words) |
|
|
|
abducer = AbducerBase(kb, dist_func = "confidence", pred_res_parse = lambda x : x["prob"]) |
|
|
|
|
|
|
|
label_lists = [[] for _ in range(code_len)] |
|
|
|
for widx, word in enumerate(words): |
|
|
|
for cidx, c in enumerate(word): |
|
|
|
label_lists[cidx].append(c) |
|
|
|
|
|
|
|
if share: |
|
|
|
label_lists = [sum(label_lists, [])] |
|
|
|
|
|
|
|
recoder = logger() |
|
|
|
recoder.set_savefile("test.log") |
|
|
|
for idx, err in enumerate(range(15, 41)): |
|
|
|
start = time.process_time() |
|
|
|
err = err / 40. |
|
|
|
if 1 - err < (1. / letter_num): |
|
|
|
break |
|
|
|
|
|
|
|
print("Start expriment", idx) |
|
|
|
if model_type == "KNN": |
|
|
|
model = KNN(code_len, label_lists = label_lists, share=share) |
|
|
|
elif model_type == "DT": |
|
|
|
model = DecisionTree(code_len, label_lists = label_lists, share=share) |
|
|
|
|
|
|
|
pre_X, pre_Y = generate_data_via_codes(words, err, letter_num) |
|
|
|
X, Y = generate_data_via_codes(words, 0, letter_num) |
|
|
|
|
|
|
|
str_words = ["".join(str(c) for c in word) for word in words] |
|
|
|
|
|
|
|
recoder.print(str_words) |
|
|
|
|
|
|
|
model.train(pre_X, pre_Y) |
|
|
|
abl_epoch = 30 |
|
|
|
res = framework.train(model, abducer, X, Y, sample_num = 10000, verbose = 1) |
|
|
|
print("Initial data accuracy:", 1 - err) |
|
|
|
print("Abd word accuracy: ", res["accuracy_word"] * 1.0 / res["total_word"]) |
|
|
|
print("Abd char accuracy: ", res["accuracy_abd_char"] * 1.0 / res["total_abd_char"]) |
|
|
|
print("Ori char accuracy: ", res["accuracy_ori_char"] * 1.0 / res["total_ori_char"]) |
|
|
|
print("End expriment", idx) |
|
|
|
print() |
|
|
|
|
|
|
|
recoder.dump(open(recoder_file_path, "wb")) |
|
|
|
return True |
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
|
os.system("mkdir share_result") |
|
|
|
os.system("mkdir non_share_result") |
|
|
|
|
|
|
|
for times in range(5): |
|
|
|
for code_num in [32, 64, 128]: |
|
|
|
params = [11, times, code_num, False, "KNN", True, 2] |
|
|
|
run_test(params) |
|
|
|
|
|
|
|
params = [11, times, code_num, False, "KNN", False, 2] |
|
|
|
run_test(params) |
|
|
|
|
|
|
|
#params = [11, 0, 32, False, "DT", False, 2] |
|
|
|
#run_test(params) |
|
|
|
|