File size: 1,720 Bytes
4ff8b83
 
 
 
 
 
 
f462bd2
 
 
4ff8b83
 
f462bd2
 
 
 
4ff8b83
 
f462bd2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4ff8b83
f462bd2
 
 
 
 
4ff8b83
 
 
f462bd2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import pandas as pd
import numpy as np

import random
import math

'''
AP = a.ER^(bx) * sigmoidP(x)
ER: Tỉ lệ lỗi trong 1 phép tạo lỗi: 0.5% - 10%  
AP (augmentation_probability) : Tỉ lệ sửa (0.1 <= AP <= 0.5)
a: weight (0.5442)
b: bias (-16.94145)


SER: Tỷ lệ lỗi đã thêm (mong muốn: < 15% - tối đa <= 30%)

'''

ER_min = 0.01
ER_max = 0.1

def find_a_b_for_AP(min_AP = 0.5, max_AP = 1):

    '''

    :param min_AP:
    :param max_AP:
    :return: a, b

    {a * e^(b * ER_min) = max_AP
    {a * e^(b * ER_max) = min_AP

    (ER_max - ER_min) * b = ln(min_AP / max_AP)
    '''
    exponential = ER_max - ER_min
    b = np.log(min_AP / max_AP) / exponential

    '''
    a * e^(b * ER_min) = max_AP
    '''

    a = max_AP / math.pow(np.e, b * ER_min)

    return a, b


def AP_fomula(a = 0.5442, b = -16.94145, error_rate=0.1):

    a, b = find_a_b_for_AP()

    # print(a, b)

    augmentation_probability = a * math.pow(np.e, b * error_rate)

    return augmentation_probability



'''
Hàm sigmoid:

Sigmoid(x) = 1 / (1 + e^(-k * x))

Giới hạn tỉ lệ lỗi tối đa của một câu là <= 35%

x: là SER_max - SER_mong muốn

=> Sigmoid - lim(x) -> 0.35 ~ 1

Sigmoid(x) = 1 / (1 + e^(-k * x)) ~ 1

=> 1 / (1 + e^(-0.35k)) = 999/1000


Đk kich hoạt hàm sigmoid => Khi SER đạt đến một độ min nhật định vd: 10%
'''

def get_k_sigmoid(x=0.2, lim1 = 0.999):
    '''

    :param x: ##SER: Tỷ lệ lỗi đã thêm (mong muốn: < 15% - tối đa <= 30%)
    :param lim1: Giá trị ~1
    :return: k
    '''
    sum1 = 1 - lim1

    sum1 = sum1 / lim1

    k = -np.log(sum1) / x
    return k


print(1 - (1 / (1 + pow(math.e, 0.0 * get_k_sigmoid(x=0.1)))))