Xây dựng chương trình

Một phần của tài liệu Phát hiện luật bằng cách sử dụng siêu phằng tối ưu theo hướng tiếp cận thô (Trang 54 - 58)

Chương trình được xây dựng trên ngôn ngữ lập trình Visual C++ 6.0 theo phương pháp lập trình hướng đối tượng hoàn toàn, thực hiện thuật toán được trình bày trong Chương 2 phần 2.2.2.4.

Chương trình có cấu trúc như sau:

Lớp các đối tượng CObj:

class CObj {

public:

int FindTheBestAttribute(); int DelObject();

//hàm lấy thông tin về một đối tượng ởđầu danh sách.

int GetObject(int &iNAttribute,float *arrAttri);

//hàm thêm một đối ởđầu danh sách.

void AddObject(int iNAttribute,float *arrAttr);

// sô thuộc tính của đối tượng.

int iNumberAttribute;

//mảng giá trị của các thuộc tính.

float *arrAttribute;

//con trỏđến đối tượng tiếp theo.

CObj *pntNext; CObj();

virtual ~CObj(); };

Mỗi biến thuộc lớp này lưu thông tin về một danh sách các đối tượng, tại mỗi nút lưu thông tin về một đối tượng, con trỏ pntNext là con trỏ chỉ đến đối tượng tiếp theo thuộc danh sách.

Lớp siêu phẳng CHyperPlane:

Khai báo:

class CHyperPlane {

public:

float fPower; //độ mạnh của siêu phẳng

// Thông tin về nhát cắt gồm thuộc tính iAttribute và giá trị nhát cắt trên thuộc tính đó fCut. float fCut; int iAttribute; CHyperPlane(); virtual ~CHyperPlane(); };

Mỗi đối tượng thuộc lớp này chứa thông tin về một siêu phẳng. Môt siêu phẳng đặc trưng bởi 2 giá trị là iAttribute là tên thuộc tính được chọn và fCut là giá trị trên nhát cắt đó được chọn.

Lớp tập giá trị của một thuộc tính CValueSet: class CValueSet { public: float arrValue[1000]; int iNumberValue; CValueSet(); virtual ~CValueSet(); };

Mỗi đối tượng chứa thông tin về các giá trị của một thuộc tính được tính bằng hàm GetValueSet() trong lớp CDecisionTree sẽđược trình bày sau đây.

Lớp cây quyết định CDecisionTree: class CDecisionTree { public: // Các biến của lớp float fValueDecision; CHyperPlane hypBest; CValueSet ValueSetCurrent; CObj *pntObjects ;

CDecisionTree *pntLeft,*pntRight;

// Các hàm thực hiện trên các biến của lớp int testObject(CObj *pntObj);

void SinhLuat(char *strRule); void MDAlgoritthm(); (adsbygoogle = window.adsbygoogle || []).push({});

float GetPower(float fCut,int iAttribute); void FindTheBestHyperPlane();

float GetGain(int iAttribute); int FindTheBestAttri();

void GetValueSet(int iAttribute);

int GetNumberObject(int iAttribute=0, float fValue=0.0); float GetEntropy(int iAttribute=0,float fValueAttri=0); int DelObject();

void AddObjects(int iNAttribute,float *arrAttr); CDecisionTree();

virtual ~CDecisionTree(); };

Mỗi đối tượng thuộc lớp này thể hiện một nút trong cây quyết định. Các biến thuộc lớp có ý nghĩa như sau:

Các biến:

fValueDecisionlà một biến kiểu float lưu giá trị quyết định ở các nút

hypBest là biến kiểu CHyperPlane lưu thông tin về siêu phẳng được chọn tại các nút trong của cây quyết định. Trong trường hợp là nút lá thì biến này không được xét đến.

ValueSetCurrent là biến kiểu CValueSet lưu thông tin về tập giá trị

của thuộc tính tai thời điểm xét.

− Con trỏ pntObjects là biến kiểu CObj lưu thông tin về tập các đối tượng thuộc nút. Trong trường hợp là nút là thì con trỏ có giá trị NULL.

− Hai con trỏ pntLeftpntRight là biến kiểu CDecisionTree chính là 2 nút con của nút hiện tại trong thuật toán.

Các hàm:

testObject(CObj *pntObj) là hàm thực hiện kiểm tra xem đối tượng

pntObj có được phân lớp đúng theo cấy quyết định được tạo ra không.

SinhLuat(char *strRule) thực hiện sinh luật dựa trên cây quyết định.

MDAlgoritthm()đây là hàm thực hiện thuật toán chính.

GetPower(float fCut,int iAttribute) là hàm trả về độ mạnh của siêu

phẳng.

FindTheBestHyperPlane() là hàm tìm siêu phẳng tốt nhất.

GetGain(int iAttribute) là hàm lấy độ đo thông tin của thuộc tính

iAttribute.

FindTheBestAttri() là hàm tìm thuộc tính tốt nhất.

GetValueSet(int iAttribute) là hàm lấy về tập giá trị của thuộc tính

iAttribute trả về biến ValueSet.

GetNumberObject(int iAttribute=0, float fValue=0.0) trả về số đối

tượng thuộc nút tai thời điểm gọi.

GetEntropy(int iAttribute=0,float fValueAttri=0) hàm tính Entropy. (adsbygoogle = window.adsbygoogle || []).push({});

DelObject() thực hiện xoá một đối tượng thuộc pntObjects.

AddObjects(int iNAttribute,float *arrAttr) thực hiện thêm một đối

tượng thuộc pntObjects.

Trong các hàm trên chú ý nhất là hàm MDAlgoritthm() là hàm thực hiện thuật toán.

void CDecisionTree::MDAlgoritthm() {

. . . }

Chương trình được xây dựng để có thể chạy không chỉ trên bộ dữ liệu về bệnh tiểu đường mà còn có thể thực hiện khai phá luật trên cả những bộ dữ liệu khác chỉ cần thoả mãn những điều kiện sau đây:

− Giá trị của thuộc tính quyết định chỉ có 2 loại.

− Tệp dữ liệu phải có câu trúc như đã trình bày ở trên. Tuy nhiên, số thuộc tính có thể nhiều hơn hoặc ít hơn 9 thuộc tính.

Giao diện của chương trình:

Chương trình cho phép bạn lựa chọn giữa việc sinh luật hoặc là kiểm tra độ chính xác trong phân lớp của thuật toán. Để sư dụng bạn thực hiện các bước sau:

− Nhập tên file huấn luyện vào.

− Nhập tên file dữ liệu kiểm thử.

− Ấn nút tạo cây để chương trình tạo cây quyết định.

− Ấn nút kiểm thửđể chương trình thực hiện việc kiểm thử.

Một phần của tài liệu Phát hiện luật bằng cách sử dụng siêu phằng tối ưu theo hướng tiếp cận thô (Trang 54 - 58)