Thuật toán tiếp cận gia tăng khi làm thô, làm mịn các giá trị thuộc tính

Một phần của tài liệu Một số thuật toán khai phá luật quyết định trên cơ sở dữ liệu di động (Trang 29)

Luận văn tiếp cận và tìm hiểu thuật toán theo hƣớng tiếp cận gia tăng để khai phá các luật quyết định khi làm thô làm mịn các thuộc tính điều kiện (quyết định). Thuật toán này đƣợc đề xuất bởi tiến sĩ Nguyễn Quang Khanh. Đặc điểm nổi bật của thuật toán là kết quả đầu ra là các luật quyết định có ý nghĩa và phạm vi đề cập của thuật toán có xem xét cả bốn trƣờng hợp khi làm thô và làm mịn các giá trị của thuộc tính điều kiện (quyết định). Bên cạnh đó, thuật toán không đòi hỏi việc phải thực hiện lại phân lớp khi các giá trị thuộc tính thay đổi mà chỉ cần tìm các lớp tƣơng đƣơng bị thay đổi để làm cơ sở cho việc cập nhật lại ma trận độ hỗ trợ. Dựa trên ma trận độ hỗ trợ tại thời điểm thay đổi, ta tính ma trận độ phủ và ma trận độ chính xác. Với hai ngƣỡng là

độ chính xác và độ phủ cho trƣớc, thuật toán sẽ trích rút ra các luật quyết định có ý nghĩa thỏa mãn bộ hai ngƣỡng này.

Dựa vào các kiến thức cơ bản theo hƣớng tiếp cận gia tăng đã trình bày ở mục 2.2.1, luận văn trình bày thuật toán tính toán gia tăng ma trận độ hỗ trợ để đƣa ra cách tính chính xác khi hệ thống có sự thay đổi do các phần tử hoặc các lớp có sự thay đổi giá trị của các thuộc tính điều kiện (quyết định). Đồng thời, thuật toán cũng đƣa ra cách tính ma trận độ chính xác và ma trận độ phủ ở thởi điểm t+1.

2.2.2.1. Các bước thực hiện của thuật toán

Bƣớc 1: Tính ma trận độ hỗ trợ thời điểm t

Từ hệ thống thông tin ban đầu tìm các phân lớp điều kiện và phân lớp quyết đinh. Sau đó, ta tính ma trận độ hỗ trợ ở thởi điểm t theo công thức ở định nghĩa 1.3: 𝑆𝑢𝑝𝑝 𝐶𝑖, 𝐷𝑗 = |𝐶𝑖 ∩ 𝐷𝑗| cho các luật 𝐶𝑖 → 𝐷𝑗.

Bƣớc 2: Tính ma trận độ hỗ trợ ở thời điểm t+1

Tìm các lớp điều kiện và lớp quyết định thay đổi do làm thô (mịn) các giá trị thuộc tính và cập nhật lại số phần tử và số thứ tự các lớp điều kiện và quyết định có thay đổi. Tiếp theo, ta tính độ hỗ trợ của các luật thay đổi: 𝐶𝑖𝑡𝑕𝑎𝑦 đổ𝑖 → 𝐷𝑗𝑡𝑕𝑎𝑦 đổ𝑖. Sau đó, ta xây dựng ma trân độ hỗ trợ thời điểm t+1

Bƣớc 3: Tính các ma trận độ chính xác và ma trận độ phủ ở thời điểm t+1:

Theo công thức ở định nghĩa 1.3

𝐴𝑐𝑐𝑡+1(𝐶𝑖, 𝐷𝑗) = 𝐶𝑖 ∩ 𝐷𝑖 𝑡+1 𝐶𝑖 𝑡+1 =𝑆𝑢𝑝𝑝𝑡+1(𝐶𝑖, 𝐷𝑗) 𝐶𝑖 𝑡+1 𝐶𝑜𝑣𝑡+1(𝐶𝑖, 𝐷𝑗) = 𝐶𝑖 ∩ 𝐷𝑖 𝑡+1 |𝐷𝑗 𝑡+1 =𝑆𝑢𝑝𝑝𝑡+1(𝐶𝑖, 𝐷𝑗) 𝐷𝑗 𝑡+1

Chọn các luật có bộ hai ngƣỡng độ phủ và độ chính xác đạt ngƣỡng cho phép để trích ra các luật quyết định có ý nghĩa (định nghĩa 1.4).

2.2.2.2. Thuật toán mô phỏng bằng mã chương trình

Thuật toán 2.1: Thuật toán trích rút luật quyết định khi làm thô, làm mịn thuộc tính theo hướng tiếp cận gia tăng ma trận độ hỗ trợ

Dữ liệu đầu vào:

1) Các lớp tƣơng đƣơng điều kiện 𝐶𝑖 2) Các lớp tƣơng đƣơng quyết định 𝐷𝑖 3) Ngƣỡng độ chính xác α, độ phủ γ

Kết quả đầu ra: Ma trận độ hỗ trợ, ma trận độ chính xác, ma trận độ phủ và các luật

quan tâm thời điểm t+1

Mã giả mô phỏng phƣơng pháp tính toán:

m=C.count; n=D.count;

for (int i=1;i<=m;i++)

for (int j=1;j<=n;j++) {

𝑆𝑢𝑝𝑝 𝐶𝑖, 𝐷𝑗 = |𝐶𝑖 ∩ 𝐷𝑗| }

//Tính ma trận độ hỗ trợ tại thời điểm t+1 khi làm thô các giá trị thuộc tính điều kiện.

//Thuộc tính điều kiện đƣợc làm thô a

//Các giá trị e, h của a đƣợc làm thô thành giá trị w

List <int> 𝐶𝑤 =Ø //Tập chứa các lớp tƣơng đƣơng đƣợc hợp thành một lớp mới int kiemtra;

for (int u=1; u<=m: u++)

for (int z=u+1; z<=m; z++) {

if ((𝑓𝑡 𝐶𝑢, 𝑎 == 𝑒 && ft Cz, a == h)||(𝑓𝑡 𝐶𝑢, 𝑎 == 𝑕 && ft Cz, a == e)) kiemtra=1;

for (int k=1; k<=C.count;k++) { (adsbygoogle = window.adsbygoogle || []).push({});

// kiểm tra các thuộc tính còn lại, 2 lớp có cùng giá trị không if ((𝑎𝑘 ! = 𝑎)&&(𝑓𝑡 𝐶𝑢, 𝑎𝑘 ! = 𝑓𝑡(𝐶𝑧, 𝑎𝑘 ))) { kiemtra=0; break; } } if (kiemtra ==1) { 𝐶𝑤= add.(𝐶𝑢) ; 𝐶𝑤= add.(𝐶𝑧) } }

// tính ma trận supp thời điểm t+1 foreach ( int item in 𝐶𝑤) {

for (int j=1;j<=n;j++)

Supp(𝐶𝑤, 𝐷𝑗) = Supp(𝐶𝑢, 𝐷𝑗) + Supp(𝐶𝑧, 𝐷𝑗);

//Xóa hai dòng tƣơng ứng với hai lớp điều kiện 𝐶𝑢, 𝐶𝑧 trên ma trận độ hỗ trợ 𝑆𝑢𝑝𝑝(𝐶, 𝐷).DeleteRow 𝐶𝑢 ;

//Thêm dòng tƣơng ứng 𝐶𝑤 trên ma trận độ hỗ trợ 𝑆𝑢𝑝𝑝(𝐶, 𝐷). 𝐴𝑑𝑑𝑅𝑜𝑤(𝐶𝑤);

}

//Tính ma trận độ hỗ trợ tại thời điểm t+1 khi làm mịn các giá trị thuộc tính điều kiện.

//Thuộc tính điều kiện đƣợc làm mịn a

//Tập E các đối tƣợng mà giá trị có giá trị w trên thuộc tính a đƣợc làm mịn thành e //Tập H các đối tƣợng mà giá trị có giá trị w trên thuộc tính a đƣợc làm mịn thành h // Tìm lớp điều kiện 𝐶𝑤 đƣợc tách thành 2 lớp mới 𝐶𝑢, 𝐶𝑧

for (int i=1; i<=m; i++) { List <int> 𝐶𝑢 = ∅; List<int> 𝐶𝑧 = ∅; if ( 𝑓𝑡 (𝐶𝑤, 𝑎)=w && (𝐶𝑤 ∩ 𝐸! = ∅)&&(𝐶𝑤 ∩ 𝐻! = ∅) { for (int x=0;x<=𝐶𝑤. 𝑐𝑜𝑢𝑛𝑡;x++) { if (𝑓 𝑥, 𝑎 == 𝑒) 𝐶𝑢. 𝐴𝑑𝑑(𝑥); else if (𝑓 𝑥, 𝑎 == 𝑕) 𝐶𝑧. 𝐴𝑑𝑑(𝑥); } } }

// tính Supp ở thời điểm t+1 for (int j=1; j<=n; j++) {

Tính supp(𝐶𝑢, 𝐷𝑗)

Supp(𝐶𝑧, 𝐷𝑗) = Supp(𝐶𝑤, 𝐷𝑗) - Supp(𝐶𝑢, 𝐷𝑗) }

//Xóa dòng tƣơng ứng với lớp điều kiện 𝐶𝑤 trên ma trận độ hỗ trợ 𝑆𝑢𝑝𝑝(𝐶, 𝐷).DeleteRow 𝐶𝑤 ;

//thêm hai dòng tƣơng ứng với hai lớp điều kiện 𝐶𝑢, 𝐶𝑧 trên ma trận độ hỗ trợ 𝑆𝑢𝑝𝑝(𝐶, 𝐷). 𝐴𝑑𝑑𝑅𝑜𝑤(𝐶𝑢);

𝑆𝑢𝑝𝑝(𝐶, 𝐷). 𝐴𝑑𝑑𝑅𝑜𝑤(𝐶𝑧);

// Tính ma trận độ hỗ trợ tại thời điểm t+1 khi làm thô các giá trị thuộc tính quyết //định.

//Thuộc tính quyết định đƣợc làm thô d

//Các giá trị e, h của a đƣợc làm thô thành giá trị w //Tìm 2 lớp 𝐷𝑢, 𝐷𝑍 đƣợc làm thô thành lớp mới 𝐷𝑤

int u=-1, z=-1;

{

if (𝑓 𝐷𝑗, 𝑑 == 𝑒) u=j; if (𝑓 𝐷𝑗, 𝑑 == 𝑕) z=j; }

//Tính ma trận supp thời điểm t+1 for (int i=1; i<=m: i++)

{

Supp(𝐶𝑖, 𝐷𝑤) = Supp(𝐶𝑖, 𝐷𝑢) + Supp(𝐶𝑖, 𝐷𝑧) ; }

//Xóa hai cột tƣơng ứng với hai lớp quyết định 𝐷𝑢, 𝐷𝑧 trên ma trận độ hỗ trợ 𝑆𝑢𝑝𝑝(𝐶, 𝐷). 𝐷𝑒𝑙𝑒𝑡𝑒𝐶𝑜𝑙𝑢𝑚𝑛 (𝐷𝑢);

𝑆𝑢𝑝𝑝(𝐶, 𝐷). 𝐷𝑒𝑙𝑒𝑡𝑒𝐶𝑜𝑙𝑢𝑚𝑛 (𝐷𝑧);

//Thêm cột tƣơng ứng 𝐷𝑤 trên ma trận độ hỗ trợ 𝑆𝑢𝑝𝑝 𝐶, 𝐷 . 𝐴𝑑𝑑𝐶𝑜𝑙𝑢𝑚𝑛 𝐷𝑤 ;

// Tính ma trận độ hỗ trợ tại thời điểm t+1 khi làm thô các giá trị thuộc tính quyết định. (adsbygoogle = window.adsbygoogle || []).push({});

//Thuộc tính điều kiện đƣợc làm mịn a

//Giá trị w trên thuộc tính quyết định d đƣợc làm mịn thành e //Giá trị w trên thuộc tính quyết định d đƣợc làm mịn thành h // Tìm lớp điều kiện 𝐶𝑤 đƣợc tách thành 2 lớp mới 𝐶𝑢, 𝐶𝑧 mới

int w=-1; List <int> 𝐶𝑢 = ∅; List<int> 𝐶𝑧 = ∅; for (int j=1;j<=n; j++) { if (𝑓 𝐷𝑗, 𝑑 == 𝑤) w=j; } //duyệt các phần tử trong 𝐷𝑤 for (int x=0;x<=𝐷𝑤. 𝑐𝑜𝑢𝑛𝑡;x++) { if (𝑓 𝑥, 𝐷𝑤 == 𝑒) 𝐷𝑢. 𝐴𝑑𝑑(𝑥); else if (𝑓 𝑥, 𝐷𝑤 == 𝑕) 𝐷𝑧. 𝐴𝑑𝑑(𝑥); } // tính ma trận thời điểm t+1 for (int i=1; i<=m; i++)

{

Supp(𝐶𝑖, 𝐷𝑧)=Supp(𝐶𝑖, 𝐷𝑤) - Supp(𝐶𝑖, 𝐷𝑢) ; }

//Xóa cột tƣơng ứng với lớp quyết định 𝐷𝑤 trên ma trận độ hỗ trợ 𝑆𝑢𝑝𝑝(𝐶, 𝐷). 𝐷𝑒𝑙𝑒𝑡𝑒𝐶𝑜𝑙𝑢𝑚𝑛 (𝐷𝑤);

//thêm hai cột tƣơng ứng với hai lớp quyết định 𝐶𝑢, 𝐶𝑧 trên ma trận độ hỗ trợ 𝑆𝑢𝑝𝑝(𝐶, 𝐷). 𝐴𝑑𝑑𝐶𝑜𝑙𝑢𝑚𝑛 (𝐷𝑧);

𝑆𝑢𝑝𝑝 𝐶, 𝐷 . 𝐴𝑑𝑑𝐶𝑜𝑙𝑢𝑚𝑛 𝐶𝑢 ;

// Tính ma trận độ chính xác và ma trận độ phủ thời điểm t+1

for (int i=1; i<=m; i++) for (int j=1; j<=n; j++) {

𝐴𝑐𝑐(𝐶𝑖, 𝐷𝑗) = 𝑆𝑢𝑝𝑝(𝐶𝑖, 𝐷𝑗) |𝐶𝑖| // |𝐶𝑖| là số phần tử có trong phân lớp điều kiện 𝐶𝑖

𝐶𝑜𝑣(𝐶𝑖, 𝐷𝑗) = 𝑆𝑢𝑝𝑝(𝐶𝑖, 𝐷𝑗) |𝐷𝑗| // |𝐷𝑗| là số phần tử có trong phân lớp quyết định 𝐷𝑗 }

// Thuật toán khai phá luật quyết định có ý nghĩa ở thời điểm t+1

for (int i=1; i<=m; i++) for (int j=1; j<=n;j++) {

If (Acc(𝐶𝑖, 𝐷𝑗) ≥ 𝛼 && Cov(𝐶𝑖, 𝐷𝑗) ≥ 𝛾) 𝐶𝑖 → 𝐷𝑗 }

2.2.3.Đánh giá độ phức tạp theo thời gian của thuật toán

Độ phức tạp tính toán ma trận độ hỗ trợ thời điểm t: Số phần tử trung bình

của m phân lớp điều kiện |𝑈|

𝑚. Số phần tử trung bình của n phân lớp tƣơng đƣơng quyết định |𝑈|

𝑛 . Độ hỗ trợ của một luật tƣơng ứng từ một phần tử trong lớp điều kiện với một phần tử trong lớp quyết định: |𝑈|

𝑚 ∗|𝑈|

𝑛 và số lần thực hiện phép tính này là m*n lần. Vậy ta có độ phức tạp tính toán của ma trận hỗ thời điểm t: |𝑈|

𝑚 ∗|𝑈|

𝑛 ∗ 𝑚 ∗ 𝑛 = 𝑈 2 . Vậy độ phức tạp tính toán 𝑂( 𝑈 2).

Độ phức tạp tính toán ma trận hỗ trợ thời điểm t+1:

(1)Khi làm thô các thuộc tính điều kiện: Ta mất 𝑚 ∗ (𝑚 − 1) để kiểm tra hai lớp 𝐶𝑢, 𝐶𝑧 có hợp thành lớp 𝐶𝑤 không. Ngoài ra, ta cũng mất n phép tính để tính độ hỗ trợ

của lớp mới (đƣợc tạo tính cộng độ hỗ trợ của tƣơng ứng của lớp 𝐶𝑢, 𝐶𝑧). Độ phức tạp tính toán khi chỉ có một cặp lớp điều kiện hợp thành một lớp điều kiện mới:

𝑚 ∗ 𝑚 − 1 + 𝑛. Độ phức tạp tính toán khi chỉ có |𝐶𝑤 | cặp lớp điều kiện hợp thành một lớp điều kiện mới: 𝑚 ∗ 𝑚 − 1 + 𝑛 ∗ |𝐶𝑤| ≤ 𝑈 2 (do m, n và |Cw| chỉ tối đa lớn nhất bằng số lƣợng phần tử của hệ thống |𝑈|). Vậy độ phức tạp tính toán 𝑂( 𝑈 2)

(2)Khi làm mịn các thuộc tính điều kiện: Do có m lớp tƣơng đƣơng điều kiện nên ta cần m phép tính để kiểm tra các lớp tƣơng đƣơng điều kiện Cw thành hai lớp tƣơng đƣơng điều kiện Cu, Cz. Trong đó, mỗi lớp Cw thỏa mãm cần n phép tính để tìm các phần tử trong lớp đó thuộc Cu hay Cz. Ta cũng cần phải tính n lần độ hỗ trợ U

m ∗ U (adsbygoogle = window.adsbygoogle || []).push({});

n tƣơng ứng với lớp Cu và thực hiện n phép trừ để tính độ hỗ trợ của lớp Cz.

Ta có độ phức tạp tính toán thời gian của ma trận độ hỗ trợ thời gian t+1 khi làm mịn các giá trị thuộc tính trong trƣờng hợp chỉ có một lớp 𝐶𝑤 tách thành 2 lớp Cu, Cz: 𝑚 + 𝑛 ∗|𝑈|

𝑚 ∗|𝑈|

𝑛 + 𝑛. Xét với độ phức tạp thời gian tồi nhất thì ta có m lớp 𝐶𝑤 tách thành 2 lớp Cu, Cz thì khi đó độ phức tạp tính toán:

𝑚 + 𝑚 ∗ 𝑛 ∗|𝑈|

𝑚 ∗|𝑈|

𝑛 + 𝑛 = 𝑚 + 𝑛 + 𝑈 2 ≈ 𝑈 2 (do m, n nhỏ hơn nhiều so với 𝑈 2

nên ta coi nhƣ không đáng kể). Vậy độ phức tạp tính toán 𝑂( 𝑈 2).

(3)Khi làm thô các thuộc tính quyết định: Ta cần 2n phép tính để kiểm tra xem có tồn tại hai lớp quyết định hợp thành một lớp quyết định không. Và ta cũng cần m phép tính cộng độ hỗ trợ của 2 lớp để có độ hỗ trợ của lớp đƣợc hợp thành bởi 2 lớp này. Độ phức tạp tính toán: 2 ∗ 𝑛 + 𝑚 ≈ |𝑈| (m, n chỉ tối đa bằng số lƣợng các phần tử có trong hệ thống). Vậy độ phức tạp tính toán 𝑂(|𝑈|).

(4)Khi làm mịn các thuộc tính quyết định: Ta cần n phép tính để kiểm tra một lớp 𝐷𝑤 có tách thành 2 lớp mới 𝐷𝑢, 𝐷𝑧 không và m phép tính độ hộ trợ của lớp 𝐷𝑢

( 𝑈 𝑚 ∗ 𝑈 𝑛 ) và m phép tính trừ để tính độ hỗ trợ của lớp 𝐷𝑧. Vậy ta có độ phức tạp tính toán sẽ là: 𝑛 + 𝑚 ∗ 𝑈 𝑚 ∗ 𝑈 𝑛 + 𝑚 = 𝑛 + 𝑚 + 𝑈 2

𝑛 ≤ 𝑈 2. (do m, n nhỏ hơn rấ nhiều so với |U|). Độ phức tạp tính toán 𝑂( 𝑈 2)

Độ phức tạp tính toán ma trận độ chính xác và độ phủ thời điểm t+1: Để tính

ma trân độ chính xác ta cần m phép tính để đếm các phần tử trong mỗi lớp, |𝑈 2 phép tính độ hỗ trợ và m*n phép tính chia. Vì vậy ta có độ phức tạp tính toán là

𝑚 + 𝑈 2 + 𝑚 ∗ 𝑛 ≤ 𝑈 2 ( do m, n chỉ tối đa bằng |U|). Tƣơng tự ta có độ tính toán ma trận độ phủ: 𝑛 + 𝑈 2 + 𝑚 ∗ 𝑛 ≤ 𝑈 2. Vậy độ phức tạp tính toán của ma trận độ chính xác và ma trận độ phủ 𝑂( 𝑈 2)

Độ phức tạp tính toán khi trích rút các luật có ý nghĩa tại thởi điểm t+1: Với

mỗi phần tự 𝐴𝑐𝑐(𝐶𝑖, 𝐷𝑗) và 𝐶𝑜𝑣(𝐶𝑖, 𝐷𝑗) ta cần so sánh với một bộ 2 ngƣỡng α và γ cho trƣớc vì vậy ta cần 2* m*n phép so sánh. Do m, n chỉ tối đa lớn nhất là bằng |U| nên độ phức tạp tính toán là 𝑂( 𝑈 2)

Qua việc tính độ phức tạp theo thời gian của ma trân độ hộ trợ thời điểm t, ma trận độ hỗ trợ thời điểm t+1, ma trận độ phủ, ma trận độ chính xác và việc trích rút các luật ở thời điểm t+1, ta thấy thuật toán khai phá luật quyết định theo hƣớng tiếp cận gia tăng khi có thay đổi giá trị thuộc tính có độ phức tạp tính toán theo thời gian là 𝑂( 𝑈 2).

Một phần của tài liệu Một số thuật toán khai phá luật quyết định trên cơ sở dữ liệu di động (Trang 29)