Quá Trình Kiểm Tra ­ Phân Loại (Testing)

Output: Tập bộ dò lưu trong bảng băm kích thước: 2r x (ℓ­r+1).

Quá trình thực hiện

Quá trình huấn luyện như sau:

­ Đọc lần lượt các dòng của 9 file đầu vào, từ đó tạo mảng chuỗi lưu trữ giá trị của 57 thuộc tính (trừ thuộc tính 58).

­ Thống kê lại các chuỗi thuộc tính sao cho không còn các giá trị trùng nhau.

­ Chuyển đổi theo quy tắc các dãy thuộc tính sang dạng các dãy nhị phân.

­ Mỗi thuộc tính của từng email sẽ ứng với một dãy nhị phân, kết hợp các dãy nhị phân của 57 thuộc tính lại ta được một dãy nhị phân của từng email và giá trị của các dòng dữ liệu trong các file khi chuyển sang dạng nhị phân sẽ có độ dài như nhau.

­ Duyệt ℓ ­ r + 1 dãy con độ dài r của từng dãy nhị phân, áp dụng cách tính toán của phương pháp tạo tập bộ dò bằng bảng băm để xây dựng bảng A.

Đoạn chương trình tạo bảng A

……………

string[] s = new string[5000]; for (lh = 1; lh <= somail; lh++)

{

s = mail[lh].Split(','); int i1 = 0, cc = 0, k; string chuoiNP ="";

while (i1 < s.Length ­ 1)

{

for (k = cc; k <= dau[i1]; k++)

{

if (s[i1].CompareTo(A[k + 1]) == 0)

{

chuoiNP += B[k + 1]; break;

}

}

cc = dau[i1]; i1++;

}

l = chuoiNP.Length; string xc ="";

int i2, i3, i4, tong;

for (i2 = 0; i2 <= l ­ r; i2++)

{

xc = chuoiNP.Substring(i2, r); tong = 0;

i3 = xc.Length ­ 1; i4 = 0;

while (i4 <= i3)

{

if (xc[i4] =='1') tong += (int)Math.Pow(2, i3 ­ i4); i4++;

}

if (bangbam[tong, i2 + 1] == 0) bangbam[tong, i2 + 1] = 1;

}

}


3.2.3. Quá trình kiểm tra ­ phân loại (testing)

Input: Bảng băm đã tạo; File thư thường còn lại và file thư rác SPAM.txt

Output: Các số liệu: Acc, DR, FPR.

Quá trình thực hiện


Thiết lập các thông số sau có giá trị 0: TN, FP, TP, FN, Acc, DR, FPR.

*) Kiểm tra khả năng phát hiện thư thường

­ Đọc lần lượt từng dòng dữ liệu trong file thư thường còn lại, ta dựng dãy nhị phân dựa vào mảng chứa các dãy nhị phân đã tạo được ở quá trình huấn luyện cho từng dòng dữ liệu. Từ đó ta có được dãy nhị phân của từng email.

­ Chuyển ℓ ­ r + 1 dãy nhị phân con độ dài r của từng email từ hệ nhị phân sang hệ cơ số 10 lưu bằng số nguyên k.

+ Nếu xuất hiện bất kì một trường hợp A[k, j]= 0 (các đoạn bit từ j đến bit thứ j + r ­ 1 với j=1,…, ℓ ­ r + 1) thì tăng giá trị FP thêm 1 (kết luận email đang kiểm tra là spam).

+ Nếu toàn bộ A[k, j]= 1 thì tăng giá trị TN thêm 1 (kết luận email đang kiểm tra là thư thường).

*) Kiểm tra khả năng phát hiện thư rác

­ Đọc lần lượt từng dòng dữ liệu trong file thư spam: SPAM.txt, ta dựng dãy nhị phân dựa vào mảng chứa các dãy nhị phân đã tạo được ở quá trình huấn luyện cho từng dòng dữ liệu. Từ đó ta có được dãy nhị phân của từng email.

­ Chuyển ℓ ­ r + 1 dãy nhị phân con độ dài r của từng email từ hệ nhị phân sang hệ cơ số 10 lưu bằng số nguyên k.

+ Nếu xuất hiện bất kì một trường hợp A[k, j]= 0 (các đoạn bit từ j đến bit thứ j + r ­ 1 với j=1,…, ℓ ­ r + 1) thì tăng giá trị TP thêm 1 (kết luận email đang kiểm tra là spam).

+ Nếu toàn bộ A[k, j]= 1 thì tăng giá trị FN thêm 1 (kết luận email đang kiểm tra là thư thường).

*) Sau 2 quá trình kiểm tra trên, tính toán 3 thông số: DR = TP/(TP + FN)

FPR = FP/(TN + FP)

Acc = (TP + TN) /(TP + TN + FP + FN)

Kết luận

Thực hiện quá trình kiểm tra trên 10 lần (tương ứng mỗi lần sử dụng 1 file thư thường HSub i.txt làm file test, i=1,…,10). Kết thúc quá trình, đưa ra kết quả khi lấy giá trị trung bình 10 lần của 3 thông số: DR, FPR, Acc.

Đoạn mã lệnh thực hiện

{

…………………………..

// Kiểm tra file ham thứ ii;

StreamReader ham = new StreamReader("HSub " + ii.ToString() + ".txt"); string chuoikt, np;

string[] lam = new string[60];

while ((chuoikt = ham.ReadLine()) != null)

{

lam = chuoikt.Split(','); int i5 = 0, i6 = 1, d = 0; np ="";

bool ok;

while (i5 < lam.Length ­ 1)

{

ok = true;

while (i6 <= dau[i5])

{

if (lam[i5] == A[i6])

{

np = np + B[i6]; ok = false; break;

}

i6++;

}

if (ok)

{

Random ngaunhien = new Random(); int h = ngaunhien.Next(d + 1, dau[i5]); np += B[h];

}

d = dau[i5];

i6 = dau[i5] + 1; i5++;

}

int i2, i3, i4, tong; string xc;

l = np.Length;

bool kt = true; //Là thư HAM for (i2 = 0; i2 <= l ­ r; i2++)

{

xc = np.Substring(i2, r); tong = 0;

i3 = xc.Length ­ 1; i4 = 0;

while (i4 <= i3)

{

if (xc[i4] =='1') tong += (int)Math.Pow(2, i3 ­ i4); i4++;

}

if (bangbam[tong, i2 + 1] == 0)

{

kt = false; break;

}

}

if (kt) TN++; else FP++;

}

ham.Close();

// Kiểm tra file Spam;

StreamReader spam = new StreamReader("SPAM.txt"); while ((chuoikt = spam.ReadLine()) != null)

{

lam = chuoikt.Split(','); int i5 = 0, i6 = 1, d = 0; np ="";

bool ok;

while (i5 < lam.Length ­ 1)

{

ok = true;

while (i6 <= dau[i5])

{

if (lam[i5] == A[i6])

{

np = np + B[i6]; ok = false; break;

}

i6++;

}

if (ok)

{

Random ngaunhien = new Random(); int h = ngaunhien.Next(d + 1, dau[i5]); np += B[h];

}

d = dau[i5];

i6 = dau[i5] + 1; i5++;

}

bool kt = true;

int i2, i3, i4, tong; string xc;

l = np.Length;

for (i2 = 0; i2 <= l ­ r; i2++)

{

xc = np.Substring(i2, r); tong = 0;

i3 = xc.Length ­ 1; i4 = 0;

while (i4 <= i3)

{

if (xc[i4] =='1') tong += (int)Math.Pow(2, i3 ­ i4); i4++;

}

if (bangbam[tong, i2 + 1] == 0)

{

kt = false;

break;

}

}

if (kt) FN++; else TP++;

}

spam.Close();

}

//In các thông số sau khi thực hiện 10 lần lặp TP = TP / 10;

TN = TN / 10; FN = FN / 10; FP = FP / 10;

DR = (float)TP / ((float)TP + (float)FN); FPR = (float)FP / ((float)TN + (float)FP);

Acc = ((float)TP + (float)TN) / ((float)TP + (float)TN + (float)FP + (float)FN); listBox1.Items.Add("FN =" + FN + "; TP =" + TP + "; FP =" + FP + "; TN =" + TN);

listBox1.Items.Add("DR =" + DR* 100 + "; FPR =" + FPR * 100 + "; Acc =" + Acc * 100);

……………………

3.3. Phân tích kết quả

3.3.1. Khả năng phát hiện thư thường và thư rác

Khả năng phát hiện của chương trình phụ thuộc vào độ chặt chẽ của bảng băm A, bảng A có mức độ chặt chẽ cao hay thấp còn tùy thuộc vào việc ta đặt giá trị của r. Giá trị r càng cao mức độ kiểm tra (so khớp) càng chặt chẽ và ngược lại.

Trong chương trình, sẽ thử nghiệm giá trị của r trong đoạn [7,10], trong đoạn giá trị này bộ dò cho những kết quả tốt nhất.


r

DR (%)

FPR (%)

Acc (%)

Thời gian (s)

Có thể bạn quan tâm!

Xem toàn bộ 69 trang tài liệu này.

Ứng dụng hệ miễn dịch nhân tạo cho lọc thư rác - Lương Văn Lâm - 6

75.50

29.62

74.82

24.7

8

82.34

42.52

79.15

25.59

9

87.77

54.41

82.15

24.95

10

91.81

60.51

84.84

26.57

Xem tất cả 69 trang.

Ngày đăng: 05/05/2022
Trang chủ Tài liệu miễn phí