4.3 Phân lớp dữ liệu tập trung
4.3.1 Phân lớp tập trung
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 Nạve Bayes.
Hình 4.1. Sơ đồ phân lớp Nạ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 Nạ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
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 Nạ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 tố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 tố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:
Danh sách các cạnh tạo nên cây bao trùm cực đại.
Thuật tố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
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 tố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 tố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
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 tồ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).
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 stub và stub 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à hồn tồ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 Nạve Bayes cho dữ liệu phân tán
1 2 3
Tuoi Age Adult_age Age Age Age Congviec Workclass Adult_wc Workclass Workclass Workclass