Phân lớp tập trung

Một phần của tài liệu TÍCH HỢP THÔNG TIN KHÔNG THUẦN NHẤT VỀ NGỮ NGHĨA TRONG MÔI TRƯỜNG PHÂN TÁN (Trang 70)

Việc phân lớp tập trung được thực hiện với một nguồn dữ liệu duy nhất. Trước khi thực hiện phân lớp, các nguồn dữ liệu sau khi được chuyển đổi thành dạng XML sẽ được chia thành 2 phần, một là dữ liệu huấn luyện được lưu trữ trong cơ sở dữ liệu quan hệ dưới dạng bảng, có tên là x_training (x có thể là adult, cars, nursery), một là dữ liệu kiểm thử được lưu dưới dạng bảng có tên là y_testing (dành cho việc kiểm thử, y có thể là adult, cars, nursery) và z_origin (dành cho việc đánh giá kết quả, z có thể là adult, cars, nursery). Dữ liệu kiểm thử và dữ liệu huấn luyện được lưu trữ trên cùng một máy. Thông tin thống kê được thu thập từ nguồn dữ liệu huấn luyện và làm cơ sở để phân lớp dữ liệu theo phương pháp dựa trên Naïve Bayes.

Hình 4.1. Sơ đồ phân lớp Naïve Bayes cho dữ liệu tập trung.

Thông tin thống kê

Bản ghi đã được phân lớp Bản ghi chưa được phân lớp Phân lớp dữ liệu Nguồn dữ liệu huấn luyện Thu nhận TT thống kê

4.3.2 Phân lớp dựa trên Naïve Bayes

Modul phân lớp dữ liệu bao gồm các lớp sau:

Discretize.class

Đối với những thuộc tính có nhiều giá trị hoặc những thuộc tính liên tục ( như age, education number,…), chúng ta cần phải rời rạc hóa miền giá trị nhằm hạn chế số lượng giá trị có thể có của các thuộc tính này. Ví dụ như đối với thuộc tính age trong nguồn dữ liệu, ta có thể rời rạc hóa nguồn dữ liệu này thành 6 giá trị có thể có (Min, 1st, Median, Mean, 3rd, Max).

st.execute("UPDATE " + tableName + " SET age = 'Min' WHERE age <

17");

st.execute("UPDATE " + tableName + " SET age = '1st' WHERE age >=

17 and age < 28");

st.execute("UPDATE " + tableName + " SET age = 'Median' WHERE age

>= 28 and age < 37");

st.execute("UPDATE " + tableName + " SET age = 'Mean' WHERE age >=

37 and age < 38");

st.execute("UPDATE " + tableName + " SET age = '3rd' WHERE age >=

38 and age < 48");

st.execute("UPDATE " + tableName + " SET age = 'Max' WHERE age >=

48");

GetStatistic.class.

Thu thập thông tin thống kê của các nguồn dữ liệu. Lớp bao gồm một phương thức Init để tính các giá trị thống kê cho nguồn dữ liệu. Đối với mỗi thuộc tính, ta xây dựng một mảng 2 chiều để lưu trữ các thông tin thống kê cho thuộc tính đó. Các cột biểu diễn số giá trị có thể có của thuộc tính, số hàng biểu diễn số lớp của nguồn dữ liệu. Ví dụ, đối với thuộc tính age của dữ liệu adult.

int[][] AGStatistic = new int[2][10];

Với mỗi AGStatistic[i][j] ta có, i là chỉ số thứ tự của lớp, j là chỉ số thứ tự của giá trị trong miền giá trị của thuộc tính age. Trong trường hợp i = 1

và j = 1 ta có, AGStatistic[1][1] sẽ cho số lượng bản ghi có giá trị của thuộc tính age = “1st” và thuộc tính class = “<=50K”.

NaiveBayesClassifier.class:

Lớp này bao gồm 2 phương thức: GetValue và Classify.

public float GetValue(int id, String value, int row, int totalCols): Trả về số bản ghi, trong đó:

 id: Số thứ tự của thuộc tính

 value: giá trị của thuộc tính

 row: thứ tự của lớp (adsbygoogle = window.adsbygoogle || []).push({});

 totalCols: tổng số giá trị thuộc tính có thể có

Phương thức Classify được thực hiện như sau: 1. Kết nối cơ sở dữ liệu

2. Chọn từng bản ghi trong cơ sở dữ liệu kiểm thử

3. Với mỗi bản ghi trong cơ sở dữ liệu kiểm thử, tính tần số xuất hiện của các giá trị (tương ứng với các thuộc tính) và các lớp của nguồn dữ liệu (gọi phương thức GetValue cho từng giá trị của bản ghi).

AGValueY = GetValue(1,AGName,0,6);

Tần số xuất hiện đồng thời của giá trị “Min” (thuộc tính age) và giá trị “>50K” (thuộc tính class) của nguồn dữ liệu adult.

AGValueN = GetValue(1,AGName,1,6);

Tần số xuất hiện đồng thời của giá trị “Min” (thuộc tính age) và giá trị “<=50K” (thuộc tính class) của nguồn dữ liệu adult.

4. Tính xác suất P(C | X) với C là tập các lớp, X là tập các thuộc tính của nguồn dữ liệu. Chọn lớp đạt giá trị xác suất lớn nhất. Gán giá trị lớp cho giá trị thuộc tính class của bản ghi (giá trị được gán tạm thời vào một mảng trung gian)

 Nếu chưa hết chuyển đến bước 3.

 Nếu đã hết, chuyển sang bước 6.

6. Cập nhập dữ liệu ở cột class trong bảng dữ liệu kiểm thử.

Evaluate.class:

Đánh giá độ chính xác phân lớp bằng cách so sánh giá trị ở thuộc tính class của bảng dữ liệu x_testing và x_origin tương ứng (x có thể là adult, cars, nursery). Độ chính xác của phân lớp được xác định bằng tỉ lệ số bản ghi được phân lớp đúng với tổng số các bản ghi có trong dữ liệu kiểm thử.

Kết quả

Thực hiện phân lớp đối với 3 nguồn dữ liệu (ADULT, CARS, NURSERY) cho ra một số kết quả như sau (thông tin chi tiết được trình bày tại bảng 4.5):

 Nguồn dữ liệu ADULT, với dữ liệu huấn luyện có 11.500 bản ghi, dữ liệu kiểm thử có 1.532 bản ghi, phân lớp đúng được 1.230 bản ghi, phân lớp không đúng 302 bản ghi. Đạt độ chính xác 80,29%.

 Nguồn dữ liệu CARS, với dữ liệu huấn luyện có 1.152 bản ghi, dữ liệu kiểm thử có 576 bản ghi, phân lớp đúng 380 bản ghi, phân lớp không đúng 196 bản ghi. Đạt độ chính xác 65,97%.

 Nguồn dữ liệu NURSERY, với dữ liệu huấn luyện có 8.640 bản ghi, dữ liệu kiểm thử có 4.320 bản ghi, phân lớp đúng 3.038 bản ghi, phân lớp không đúng 1.282 bản ghi. Đạt độ chính xác 70,32%. Tên nguồn dữ liệu Dữ liệu huấn luyện Dữ liệu kiểm thử Độ chính xác (%) Đúng Không đúng ADULT 11.500 1.532 80,29 1.230 302 CARS 1.152 576 65,90 380 196 NURSERY 8.640 4.320 70,32 3.038 1.282 Bảng 4.5. Kết quả phân lớp tập trung theo phương pháp Naïve Bayes.

4.3.3 Phân lớp dựa trên TANB

Xây dựng mô hình TANB cho các nguồn dữ liệu

Dựa trên các thủ tục xây dựng cây bao trùm cực đại, TANB cho các nguồn dữ liệu, tác giả đã xây dựng TANB cho các nguồn dữ liệu ADULT, CARS, NURSERY.

ADULT

Để xây dựng được mô hình TANB cho nguồn dữ liệu ADULT, điều đầu tiên cần thực hiện đó là xây dựng cây bao trùm cực đại dựa trên nguồn dữ liệu huấn luyện.

Cây bao trùm cực đại (thuật toán Kruskal)

Cây bao trùm cực đại là cây có tổng trọng số của các cung là lớn nhất, trong đó, các cung là các thuộc tính của nguồn dữ liệu, trọng số của các cung là giá trị của hàm thông tin hỗ trợ (mutual information function) (đã được trình bày cụ thể ở chương 3) của hai thuộc tính (mã nguồn của thuật toán xây dựng cây bao trùm cực đại được lưu trữ trong CreateTree.java).

Input:

Danh sách các cạnh đã được sắp xếp theo thứ tự giảm dần của trọng số (các điểm đầu là các thuộc tính, trọng số là giá trị của hàm thông tin hỗ trợ của hai thuộc tính tương ứng).

Output: (adsbygoogle = window.adsbygoogle || []).push({});

Danh sách các cạnh tạo nên cây bao trùm cực đại.

Thuật toán:

1. Khởi tạo một cây rỗng.

2. Lấy một cạnh từ danh sách (theo thứ tự đã được sắp xếp giảm dần).

- Thêm vào cây nếu không tạo thành chu trình.

- Loại bỏ nếu tạo thành chu trình trong cây

3. Nếu số cạnh được chọn bằng số đỉnh – 1 hoặc hết cạnh thì dừng thuật toán. Ngược lại, quay lại bước 2.

Sau khi thực hiện chương trình với dữ liệu huấn luyện gồm 11.500 bản ghi, cây bao trùm cực đại biểu diễn sự hỗ trợ thông tin của các thuộc tính được biểu diễn như sau (Hình 4.2).

Hình 4.2. Cây bao trùm cực đại được xây dựng trên nguồn dữ liệu ADULT.

Mô hình TANB cho nguồn dữ liệu ADULT

Dựa trên cây bao trùm cực đại đã được xây dựng ở bước trên, bằng cách thêm thuộc tính class và thêm các cung đi ra từ thuộc tính class, ta có được mô hình TANB cho nguồn dữ liệu ADULT (Hình 4.3)

CARS

Sử dụng thuật toán Kruskal cho nguồn dữ liệu huấn luyện CARS, ta thu được cây bao trùm cực đại thể hiện mối liên hệ giữa các thuộc tính trong nguồn dữ liệu.

Hình 4.4. Cây trùm cực đại được xây dựng dựa trên nguồn dữ liệu CARS

NURSERY

Thực hiện thuật toán Kruskal nhằm xây dựng cây bao trùm cực đại cho nguồn dữ liệu NURSERY với 8.640 bản ghi, kết quả như sau (Hình 4.6):

Hình 4.6. Cây bao trùm cực đại của nguồn dữ liệu NURSERY

Phân lớp TANB cho các nguồn dữ liệu

Dựa trên mô hình TANB của các nguồn dữ liệu, tính xác suất của các lớp dữ liệu đối với các bản ghi kiểm thử. Một đặc điểm khác của TANB đối với Naive Bayes (đã được mô tả chi tiết ở trong chương 3) đó là các thuộc tính không chỉ phụ thuộc vào thuộc tính lớp mà còn phụ thuộc vào các thuộc tính khác.

Ví dụ 4.1:

Khi tính xác suất cho các thuộc tính class của nguồn dữ liệu CARS, ta thực hiện như sau (Hình 4.5):

1 2 3 4 5 6 1 2 1 3 2 4 6 5 6 6 1 P(C)×P(X ,X ,X ,X ,X ,X |C)= P(C)×P(X |C)×P(X |X ,C) ×P(X |X ,C)×P(X |X ,C)×P(X |X ,C)×P(X |X ,C) Trong đó: 1 2 3 4 5 6

X : buying X : maint X : door X : person X : lugboot X : safety C = {unacc, acc, good, vgood}

Quá trình phân lớp dữ liệu dựa trên TANB tương tự với phương pháp dựa trên Naive Bayes, chỉ có khác ở công thức tính xác suất cho các giá trị thuộc tính lớp.

Kết quả của phân lớp tập trung TANB cho các nguồn dữ liệu được thể hiện chi tiết trong bảng 4.6. Trong đó, nguồn dữ liệu ADULT với dữ liệu huấn luyện gồm 11.500 bản ghi, dữ liệu kiểm thử gồm 1.532 bản ghi, phân lớp đúng được 1.200 bản ghi, phân lớp không đúng 332 bản ghi, đạt độ chính xác 78,36%.

Nguồn dữ liệu CARS, với dữ liệu huấn luyện gồm 1.152 bản ghi, dữ liệu kiểm thử gồm 576 bản ghi, phân lớp đúng được 377 bản ghi, phân lớp sai 199 bản ghi, đạt độ chính xác 65,56%. Nguồn dữ liệu NURSERY, với dữ liệu huấn luyện gồm 8.640 bản ghi, dữ liệu kiểm thử gồm 4.320 bản ghi, phân lớp đúng 3.102 bản ghi, phân lớp sai 1.218 bản ghi, đạt độ chính xác 71,80%.

Tên nguồn dữ liệu Dữ liệu huấn luyện Dữ liệu kiểm thử Độ chính xác (%) Đúng Không đúng ADULT 11.500 1.532 78,36 1.200 332 CARS 1.152 576 65,56 377 199 NURSERY 8.640 4.320 71,80 3.102 1.218 Bảng 4.6. Kết quả phân lớp TANB cho các nguồn dữ liệu.

4.4 Phân lớp dữ liệu phân tán

4.4.1 Phân lớp phân tán (adsbygoogle = window.adsbygoogle || []).push({});

Như đã trình bày ở mục 1, trong phần cài đặt thử nghiệm này, tác giả chỉ thực hiện cài đặt phân lớp phân tán dựa trên mô hình nguồn dữ liệu huấn luyện phân tán và nguồn dữ liệu kiểm thử tập trung. Như đã trình bày ở chương 1 dữ liệu thường được phân tán dưới hai dạng: phân tán phân mảnh ngang và phân tán phân mảnh dọc. Trong phạm vi luận văn này, tác giả thực hiện phân lớp dữ liệu với nguồn dữ liệu huấn luyện được lưu trữ ở dạng phân tán phân mảnh ngang.

Để thực hiện điều này, đối với mỗi nguồn dữ liệu, tác giả chia dữ liệu huấn luyện thành 2 phần theo phân mảnh ngang (mỗi phần đều có chứa toàn bộ tập thuộc tính của cả nguồn dữ liệu đó). Mỗi phần dữ liệu sẽ được lưu trữ tại các máy khác nhau. Dữ liệu huấn luyện của các nguồn được chia như sau:

 Nguồn ADULT được chia thành 2 phần: phần 1 chứa 6.500 bản ghi, phần 2 chứa 5.000 bản ghi.

 Nguồn CARS được chia thành 2 phần: phần 1 chứa 576 bản ghi, phần 2 chứa 576 bản ghi.

 Nguồn NURSERY được chia thành 2 phần: phần 1 chứa 4.320 bản ghi, phần 2 chứa 4.320 bản ghi.

Để hỗ trợ việc truyền thông tin trong môi trường phân tán, tác giả sử dụng RMI/JAVA như một công cụ hỗ trợ lập trình phân tán.

RMI/JAVA1

RMI – Remote Method Invoke là cách thức giao tiếp giữa các đối tượng Java có mã lệnh cài đặt (bao gồm phương thức và thuộc tính) nằm trên các máy khác nhau. Đối tượng ở máy này có thể gọi phương thức của các đối tượng được lưu trữ ở máy khác. Cách thức hoạt động của RMI có thể được mô hình hóa như sau (Hình 4.8).

Một ứng dụng RMI thường gồm 2 chương trình, một dành cho server và một dành cho client. Chương trình server tạo ra các đối tượng có thể truy cập từ xa và tạo ra các tham chiếu để truy cập đến các đối tượng này. Chương trình client thu thập các tham chiếu đến một hay nhiều đối tượng có thể truy cập từ xa trên server và gọi các phương thức của các đối tượng này khi cần. RMI cung cấp cơ chế để server và client có thể liên lạc và trao đổi thông tin.

Hình 4.8. Mô hình gọi các đối tượng từ xa (RMI).

1http://java.sun.com/docs/books/tutorial/rmi/index.html Máy C C1 C2 C3 Máy B B1 B2 Máy A A

Hình 4.9. Sử dụng RMI registry nhận tham chiếu của một đối tượng từ xa. Server gọi registry để đăng kí tên cho một đối tượng từ xa. Client tìm đối Server gọi registry để đăng kí tên cho một đối tượng từ xa. Client tìm đối tượng từ xa trên registry của server theo tên đã được đăng kí, sau đó gọi phương thức của đối tượng đó. Hình vẽ trên cũng mô tả việc hệ thống RMI sử dụng các máy chủ web để nạp các định nghĩa lớp cho các đối tượng khi cần.

Các phương thức, các giao diện, các đối tượng từ xa

Cũng giống như các ứng dụng khác của Java, một ứng dụng phân tán cũng có các giao diện và các lớp. Phần cài đặt cho các phương thức được xây dựng bên trong các giao diện, và ta có thể định nghĩa thêm các phương thức. Các đối tượng với các phương thức có thể được gọi thông qua các máy ảo Java được gọi là các đối tượng từ xa.

Một đối tượng có thể trở thành một đối tượng từ xa bằng việc cài đặt một giao diện từ xa. Giao diện từ xa có đặc điểm sau:

 Giao diện từ xa là mở rộng của giao diện java.rmi.Remote

 Mỗi phương thức của giao diện đều được định nghĩa

java.rmi.RemoteException trong phần throws.

RMI đối xử với các đối tượng từ xa khác với các đối tượng cục bộ. Khi các đối tượng được chuyển từ một máy ảo Java này đến một máy ảo Java khác thì thay vì việc tạo nên một bản copy của đối tượng trên máy nhận, RMI chuyển một stub

cho một đối tượng từ xa. Stub hoạt động như một đại diện cho đối tượng từ xa tại máy nhận. Máy client sẽ gọi phương thức thông qua stubstub có nhiệm vụ sẽ chuyển các tham số từ máy client đến cho server và nhận kết quả trả về.

Mô hình phân lớp phân tán

Yêu cầu cài đặt thử nghiệm phân tán cần 2 máy để lưu trữ các nguồn dữ liệu huấn luyện. Việc phân tán dữ liệu được thực hiện bằng cách xây dựng 2 nguồn dữ liệu độc lập và quá trình truy cập dữ liệu của hai nguồn là hoàn toàn độc lập. Hệ thống thử nghiệm được xây dựng trong mạng LAN. Điều này vẫn đảm bảo được tính chất phân tán của nguồn dữ liệu.

Ý tưởng chính cho cài đặt thử nghiệm là xây dựng hai nguồn dữ liệu huấn luyện nhằm cung cấp các thông tin thống kê cho việc phân lớp dữ liệu. Tại mỗi nguồn, tác giả xây dựng các phương thức có thể truy cập từ xa. Một chương trình tại máy client sẽ gọi phương thức từ xa để thu thập các thông tin thống kê từ nguồn dữ liệu. Sau đó, chương trình thực hiện phân lớp nguồn dữ liệu kiểm thử bằng việc sử dụng phương pháp Naive Bayes và các thông tin thống kê thu thập được từ 2 nguồn dữ liệu huấn luyện. Sơ đồ hệ thống phân lớp Naive Bayes phân tán được biểu diễn như hình 4.10.

Xử lí vấn đề không thuần nhất ngữ nghĩa của các nguồn dữ liệu

Để xử lí việc không thuần nhất về ngữ nghĩa của các nguồn dữ liệu (ở đây là tính không thuần nhất về sử dụng tên – các nguồn dữ liệu khác nhau có cách đặt tên các thuộc tính khác nhau) sử dụng các ánh xạ nhằm chỉ ra mối quan hệ giữa các tên gọi thuộc tính giữa các nguồn dữ liệu (xem Bảng 4.7).

Hình 4.10. Sơ đồ phân lớp Naïve Bayes cho dữ liệu phân tán

Một phần của tài liệu TÍCH HỢP THÔNG TIN KHÔNG THUẦN NHẤT VỀ NGỮ NGHĨA TRONG MÔI TRƯỜNG PHÂN TÁN (Trang 70)