Phân lớp 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 79)

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

1 23

Tuoi Age Adult_age Age Age Age Congviec Workclass Adult_wc Workclass Workclass Workclass

Trongluong Fnlwgt Adult_fn Fnlwgt Fnlwgt Fnlwgt Trinhdo Education Adult_edu Education Education Education Sonamhoc E_number Adult_en E_number E_number E_number TTHN M_status Adult_ms M_status M_status M_status Nghenghiep Occupation Adult_oc Occupation Occupation Occupation

Quanhe Relationship Adult_rs Relationship Relationship Relationship Sactoc Race Adult_race Race Race Race

Gioitinh Sex Adult_sex Sex Sex Sex Thunhap Cap_gain Adult_cg Cap_gain Cap_gain Cap_gain

Chitieu Cap_loss Adult_cl Cap_loss Cap_loss Cap_loss Sogiolv HP_week Adult_hpw HP_week HP_week HP_week Quoctich N_country Adult_nc N_country N_country N_country

Bảng 4.7. Bảng dữ liệu ánh xạ dùng cho thuần nhất thuộc tính

Client

Thông tin thống kê

Máy 1 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ê

Dữ liệu kiểm thử Kết quả

Nguồn dữ liệu huấn luyện

Thu nhận TT thống kê

Thông tin thống kê

Các tập ánh xạ   1, 2, 3được lưu trữ dưới dạng các bảng dữ liệu quan hệ. 1

là tập ánh xạ được xây dựng cho quan hệ của các thuộc tính của nguồn dữ liệu thứ nhất với tập thuộc tính chung. 2 là quan hệ của các thuộc tính nguồn dữ liệu thứ hai với tập thuộc tính chung. 3 là quan hệ của các thuộc tính nguồn dữ liệu kiểm thử với tập thuộc tính chung. Dựa trên   1, 2, 3, thành phần thu thập thông tin thống kê có thể truy vấn được các nguồn dữ liệu không thuần nhất cũng đơn giản như đối với nguồn dữ liệu thuần nhất. Ví dụ như khi hệ thống muốn tìm tần suất xuất hiện của giá trị a của thuộc tính Race của nguồn dữ liệu huấn luyện 2, hệ thống sẽ truy cập vào bảng dữ liệu ánh xạ 2và thấy rằng thay vì tìm tần suất xuất hiện của giá trị a của thuộc tính Race, hệ thống cần tìm tần suất xuất hiện của giá trị a của thuộc tính Adult_race.

4.4.2 Phân lớp dựa trên Naive Bayes

Để có thể sử dụng RMI trong ứng dụng phân tán, cần phải khai báo như sau:

import java.rmi.*;

Đối với lớp server, cần khai báo việc sẽ sử dụng một số phương thức cho việc đăng kí đối tượng với rmiregistry.

import java.rmi.server.*;

Cách tiến hành thử nghiệm

Tại máy 1, máy 2.

SendData.class:

Định nghĩa lớp SendData và phương thức GetValue để truyền dữ liệu giữa server và client.

public interface SendData extends Remote{

public float GetValue(int id, String value, int row, int totalCols) throws RemoteException;

public void Init() throws RemoteException; }

GetStatistic.class

Thu thập các thông tin thống kê tại nguồn dữ liệu huấn luyện.

SendDataImpl.class:

Cài đặt các phương thức được định nghĩa trong SendData.class.

 public void Init();// gọi phương thức tính thống kê

 public float GetValue(int id, String value, int row, int totalCols); trả về tần số xuất hiện của giá trị value

SendDataImpl_Stub.class, SendDataImpl_Skel.class:

Lớp giao tiếp được rmic sinh ra dùng để tạo cầu nối giữa các đối tượng từ xa và đối tượng cục bộ.

SendDataServer.class:

Tạo ra đối tượng và đăng kí đối tượng.

// Tao doi tuong

SendDataImpl sd = new SendDataImpl();

// Dang ki su hien dien cua doi tuong voi may ao Java UnicastRemoteObject.exportObject(sd);

// Dang ki voi RMI

Naming.rebind("rmi://localhost/server1",sd);

Tại máy client.

SendData.class: (được gửi đến từ máy server)

Định nghĩa lớp SendData và phương thức dùng để truyền dữ liệu.

NBClient.class: Gồm 1 phương thức Classify.

1. Thu thập tham chiếu về các đối tượng thông qua tên đã được đăng kí với rmiregistry.

SendData dataSrv1 = (SendData)Naming.lookup("rmi://

localhost/server1");

SendData dataSrv2 = (SendData)Naming.lookup("rmi://

localhost/server2");

2. Kích hoạt thủ tục tính thông tin thống kê ở các server

dataSrv1.Init(); dataSrv2.Init();

3. Kết nối cơ sở dữ liệu kiểm thử.

4. Với mỗi bản ghi thuộc dữ liệu kiểm thử.

 Tính tần số suất hiện của từng giá trị thuộc tính và giá trị của lớp.

 Tính giá trị xác suất của bản ghi với từng lớp trong tập các lớp có thể có của nguồn dữ liệu. Xác định lớp có xác suất lớn nhất và lưu vào một mảng tạm thời (ResultList).

5. Cập nhập thuộc tính class trong cơ sở dữ liệu kiểm thử bằng các giá trị trong mạng tạm thời theo thứ tự tương ứng.

Evaluate.class: Đánh giá kết quả phân lớp.

Kết quả

Sau khi thực hiện phân lớp phân tán theo phương pháp dựa Naïve Bayes cho 3 nguồn dữ liệu ADULT, CARS, NURSERY, kết quả đạt được như sau (thông tin chi tiết được mô tả tại bảng 4.6):

 Nguồn dữ liệu ADULT với 2 nguồn dữ liệu huấn luyện (nguồn 1 chứa 6.500 bản ghi, nguồn 2 chứa 5.000 bản ghi) thực hiện phân lớp trên 1.532 bản ghi, phân lớp đúng được 1.231 bản ghi, phân lớp không đúng 301 bản ghi. Đạt độ chính xác 80,39%.

 Nguồn dữ liệu NURSERY với 2 nguồn dữ liệu huấn luyện (nguồn 1 chứa 4.320 bản ghi, nguồn 2 chứa 4.320 bản ghi) thực hiện phân lớp trên 4.320 bản ghi, phân lớp đúng được 3.038 bản ghi, phân lớp không đúng 1.282 bản ghi. Đạt độ chính xác 70,32%.

 Nguồn dữ liệu CARS với 2 nguồn dữ liệu huấn luyện (nguồn 1 chứa 576 bản ghi, nguồn 2 chứa 576 bản ghi) thực hiện phân lớp trên 576 bản ghi, phân lớp đúng được 380 bản ghi, phân lớp không đúng 196 bản ghi. Đạt độ chính xác 65,90%.

Tên nguồn

dữ liệu Nguồn 1 Nguồn 2 kiểm thử Dữ liệu Độ chính xác (%) Đúng Không đúng ADULT 6.500 5.000 1.532 80,29 1.231 301

CARS 576 576 576 65,90 380 196

NURSERY 4.320 4.320 4.320 70,32 3.038 1.282 Bảng 4.8. Kết quả phân lớp theo phương pháp Naive Bayes

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

Về nguyên tắc, mô hình phân lớp phân tán TANB dựa trên mô hình phân lớp phân tán Naive Bayes (Hình 4.10). Dữ liệu huấn luyện được lưu trữ phân tán tại hai máy khác nhau. Dữ liệu kiểm thử được lưu trữ tập trung tại một máy. Tác giả dùng các đối tượng từ xa trong RMI để truyền thông tin từ các nguồn dữ liệu huấn luyện đến phân lớp.

Kết quả thực hiện phân lớp phân tán theo phương pháp TANB cho 3 nguồn dữ liệu ADULT, CARS, NURSERY.

Tên nguồn

dữ liệu Nguồn 1 Nguồn 2

Dữ liệu kiểm thử Độ chính xác (%) Đúng Không đúng ADULT 6.500 5.000 1.532 78,39 1.200 332 CARS 576 576 576 69,21 399 177 NURSERY 4.320 4.320 4.320 61,00 2.635 1.685 Bảng 4.9. Kết quả phân lớp phân tán theo phương pháp TANB

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 79)