Tải bản đầy đủ (.doc) (21 trang)

XÂY DỰNG CHƯƠNG TRÌNH MINH họa THUẬT TOÁN QUINLAN

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (545.15 KB, 21 trang )

BỘ GIAO THÔNG VẬN TẢI BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC HÀNG HẢI VIỆT NAM

BÙI CÔNG THÌN

BÁO CÁO THỰC TẬP TỐT NGHIỆP

XÂY DỰNG CHƯƠNG TRÌNH MINH HỌA THUẬT
TOÁN QUINLAN

HẢI PHÒNG – 2016


BỘ GIAO THÔNG VẬN TẢI BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC HÀNG HẢI VIỆT NAM

BÙI CÔNG THÌN

BÁO CÁO THỰC TẬP TỐT NGHIỆP

XÂY DỰNG CHƯƠNG TRÌNH MINH HỌA THUẬT
TOÁN QUINLAN

NGÀNH: CÔNG NGHỆ THÔNG TIN; MÃ SỐ: 114
CHUYÊN NGÀNH: CÔNG NGHỆ THÔNG TIN

Người hướng dẫn khoa học: ThS. Nguyễn Hạnh Phúc

HẢI PHÒNG – 2016

2




MỤC LỤC
CHƯƠNG 1. TỔNG QUAN...............................................................................................................................4
CHƯƠNG 2. THUẬT TOÁN QUINLAN..........................................................................................................7
CHƯƠNG 3. TỔNG QUAN VỀ CHƯƠNG TRÌNH MINH HỌA..................................................................11
KẾT LUẬN VÀ KIẾN NGHỊ...........................................................................................................................20
TÀI LIỆU THAM KHẢO.................................................................................................................................21

3


CHƯƠNG 1. TỔNG QUAN
1.1 Khái niệm về Hệ cơ sở tri thức
- Hệ Cơ sở tri thức (Hệ CSTT) là chương trình máy tính được thiết kế để mô
hình hóa khả năng giải quyết vấn đề của chuyên gia.
- Hệ CSTT là hệ thống dựa trên tri thức, cho phép mô hình hóa các tri thức
của chuyên gia, dùng tri thức này để giải quyết vấn đề phức tạp thuộc cùng lĩnh
vực.
- Hai yếu tố quan trọng trong Hệ CSTT là: Tri thức chuyên gia và lập luận,
tương ứng với hệ thống có 2 khối chính là Cơ sở tri thức và động cơ suy diễn.
- Hệ chuyên gia là một loại CSTT được thiết kế cho một lĩnh vực ứng dụng
cụ thể. Hệ chuyên gia là một chương trình máy tính thông minh sử dụng tri thức
và các thủ tục suy luận để giải những bài toán tương đối khó khăn đòi hỏi những
chuyên gia mới giải được.
- Hệ chuyên gia làm việc như một chuyên gia thực thụ và cung cấp các ý kiến
dựa trên kinh nghiệm của chuyên gia đã được đưa vào hệ chuyên gia.
- Cơ sở tri thức: Chứa các tri thức chuyên sâu về lĩnh vực nào đó như một
chuyên gia. Cơ sở tri thức bao gồm: Các sự kiện, các luật, các khái niệm và các
quan hệ.

- Động cơ suy diễn: Bộ xử lý tri thức theo mô hình hóa theo cách lập luận
của chuyên gia. Động cơ hoạt động trên thông tin về vấn đề đang xét, so sánh
với tri thức lưu trong Cơ sở tri thức rồi rút ra kết luận.
- Kỹ sư tri thức: Người thiết kế, xây dựng và thử nghiệm Hệ chuyên gia.

4


1.2 Cấu trúc của Hệ chuyên gia
Máy suy diễn

Cơ sở tri thức
Các luật

Bộ nhớ làm
việc

Lịch công việc

Khả năng thu
nhận tri thức

Khả năng giải
thích
Giao diện người
sử dụng

Hình 1.1 Cấu trúc của Hệ chuyên gia
 Cơ sở tri thức (knowledge base): Gồm các phần tử (hay đơn vị) tri thức, thông
thường được gọi là luật (rule), được tổ chức như một cơ sở dữ liệu.

 Máy suy diễn (interface engine): Công cụ (chương trình hay bộ xử lý) tạo ra sự
suy luận bằng cách quyết định xem những luật nào sẽ làm thỏa mãn các sự
kiện, các đối tượng; chọn ưu tiên các luật thỏa mãn, thực hiện các luật có tính
ưu tiên cao nhất.
 Lịch công việc (agenda): Danh sách các luật ưu tiên do máy suy diễn tạo ra thỏa
mãn các sự kiện, các đối tượng có mặt trong bộ nhớ làm việc.
 Bộ nhớ làm việc (working memory): Cơ sở dữ liệu toàn cục chứa các sự kiện
phục vụ cho các luật.
 Khả năng giải thích (explanation facility): Giải nghĩa cách lập luận của hệ thống
cho người sử dụng.
 Khả năng thu nhận tri thức: Cho phép người sử dụng bổ sung các tri thức vào hệ
thống một các tự động thay vì tiếp nhận tri thức bằng cách mã hóa tri thức một
cách tường minh. Khả năng thu nhận tri thức là yếu tố mặc nhiên của nhiều hệ
chuyên gia.
 Giao diện người sử dụng (user interface): Là nơi người sử dụng và hệ chuyên
gia trao đổi với nhau.

5




Cơ sở tri thức còn được gọi là bộ nhớ sản xuất (production memory) trong hệ
chuyên gia. Trong một cơ sở tri thức, người ta thường phân biệt hai loại tri thức
là tri thức phán đoán (assertion knowledge) và tri thức thực hành (operating
knowledge).
- Tri thức phán đoán mô tả các tình huống đã được thiết lập hoặc sẽ được thiết
lập.
- Tri thức thực hành thể hiện những hậu quả rút ra hay những thao tác cần phải
hoàn thiện khi một tình huống đã được thiết lập hoặc sẽ được thiết lập trong lĩnh

vực đang xét. Các tri thức thực hành thường được thể hiện bởi các biểu thức dễ
hiểu và dễ triển khai thao tác đối với người sử dụng.

Tri thức phán đoán
Máy suy diễn

Tri thức thực hành
Cơ sở tri thức

Hình 1.2 Quan hệ giữa máy suy diễn và cơ sở tri thức

6


CHƯƠNG 2. THUẬT TOÁN QUINLAN
2.1 Thuật toán Quinlan
Quinlan quyết định thuộc tính phân hoạch bằng cách xây dựng các vector
đặc trưng cho mỗi giá trị của từng thuộc tính dẫn xuất và thuộc tính mục tiêu.
Với mỗi thuộc tính dẫn xuất A còn có thể sử dụng để phân hoạch, tính:
V(Aj) = (T(j, r1), T(j, r2), …, T(j, rn))
T (j, ri) = (tổng số phần tử trong phân hoạch có giá trị thuộc tính dẫn xuất A
là j và có giá trị thuộc tính mục tiêu là r i) / (tổng số phần tử trong phân hoạch có
giá trị thuộc tính dẫn xuất A là j)
Trong đó r1, r2,…, rn là các giá trị của thuộc tính mục tiêu
 Nếu một thuộc tính A có thể nhận một trong 5 giá trị khác nhau thì nó sẽ
có 5 vector đặc trưng.
Một vector V(Aj) được gọi là vector đơn vị nếu nó chỉ có duy nhất một thành
phần có giá trị 1 và những thành phần khác có giá trị 0.
Thuộc tính được chọn để phân hoạch là thuộc tính có nhiều vector đơn vị
nhất.

Lưu ý: Nếu có nhiều hơn 1 thuộc tính có cùng số vector đơn vị thì ta sẽ chọn
thuộc tính có số phân hoạch ít hơn để làm thuộc tính phân hoạch.
2.2 Ví dụ về thuật toán Quinlan

7


Đề bài: Sử dụng thuật toán Quinlan để rút ra quy luật cho những người có
đặc điểm nào có khả đỗ đại học hoặc không theo cơ sở dữ liệu ở bảng sau:

Giải:
Đặt:
A là thuộc tính “Bố hoặc mẹ đỗ đại học”
B là thuộc tính “Điều kiện kinh tế”
C là thuộc tính “Học lực”
D là thuộc tính “Có học thêm”
E là thuộc tính “Kết quả”
- Xét theo thuộc tính A (Bố hoặc mẹ đỗ đại học), thuộc tính này có 2 giá trị
là “Có” và “Không”
VA(Có) = (T(Có,Đỗ) ; T(Có,Không Đỗ)) = ( 4/6 ; 2/6 ) = (2;1)
VA(Không) = (T(Không,Đỗ) ; T(Không,Không Đỗ)) = ( 0/2 ; 2/2 ) = (0;1)
- Xét thuộc tính B (Điều kiện kinh tế), thuộc tính này có 3 giá trị “Thấp”,
“Trung Bình” và “Cao”
VB(Thấp) = (T(Thấp,Đỗ) ; T(Thấp,Không Đỗ)) = ( 1/4 ; 3/4 ) = (1;3)
VB(Trung Bình) = (T(Trung Bình,Đỗ) ; T(Trung Bình,Không Đỗ)) = ( 3/3 ; 0/3 ) = (1;0)
VB(Cao) = (T(Cao,Đỗ) ; T(Cao,Không Đỗ)) = ( 0/1 ; 1/1 ) = (0;1)

8



- Xét thuộc tính C (Học lực), thuộc tính này có 3 giá trị “Trung Bình”, “Khá”
và “Giỏi”
VC(Trung Bình) = (T(Trung Bình,Đỗ) ; T(Trung Bình,Không Đỗ)) = ( 0/3 ; 3/3 ) = (0;1)
VC(Khá) = (T(Khá,Đỗ) ; T(Khá,Không Đỗ)) = ( 2/3 ; 1/3) = (2;1)
VC(Giỏi) = (T(Giỏi,Đỗ) ; T(Giỏi,Không Đỗ)) = ( 2/2 ; 0/2 ) = (1;0)
- Xét thuộc tính D (Có học thêm) có 2 giá trị là “Có” và “Không”
VD(Có) = (T(Có,Đỗ) ; T(Có,Không Đỗ)) = ( 3/5 ; 2/5 ) = (3;2)
VD(Không) = (T(Không,Đỗ) ; T(Không,Không Đỗ)) = ( 1/3 ; 2/3 ) = (1;2)
Có 2 thuộc tính B và C đều có 3 véc tơ thuộc tính, chọn thuộc tính C để phân
rã tiếp thì sẽ có bảng dữ liệu theo thuộc tính Học lực với giá trị là “Khá” như
sau:
Thứ tự

5
6
7

Tên

Bố hoặc

người

mẹ đỗ đại

Mậu
Kỷ
Canh

Điều

kiện kinh tế

Có học

Kết quả

thêm

học


Trung



Đỗ

Không


bình
Thấp
Trung

Không


Không
Đỗ


bình
- Xét theo thuộc tính A (Bố hoặc mẹ đỗ đại học), thuộc tính này có 2 giá trị
là “Có” và “Không”
VA(Có) = (T(Có,Đỗ) ; T(Có,Không Đỗ)) = ( 2/2 ; 0/2 ) = (1;0)
VA(Không) = (T(Không,Đỗ) ; T(Không,Không Đỗ)) = ( 0/1 ; 1/1 ) = (0;1)
- Xét thuộc tính B (Điều kiện kinh tế), thuộc tính này có 2 giá trị “Thấp” và
“Trung Bình”
VB(Thấp) = (T(Thấp,Đỗ) ; T(Thấp,Không Đỗ)) = ( 0/1 ; 1/1 ) = (0;1)
VB(Trung Bình) = (T(Trung Bình,Đỗ) ; T(Trung Bình,Không Đỗ)) = ( 2/2 ; 0/2 ) = (1;0)
- Xét thuộc tính D (Có học thêm) có 2 giá trị là “Có” và “Không”
VD(Có) = (T(Có,Đỗ) ; T(Có,Không Đỗ)) = ( 2/2 ; 0/2 ) =(1;0)
VD(Không) = (T(Không,Đỗ) ; T(Không,Không Đỗ)) = ( 0/1 ; 1/1 ) = (0;1)
9


Cả 3 thuộc tính trên đều có 2 véc tơ đơn vị, chọn thuộc tính A (Bố hoặc mẹ
đỗ đại học) làm thuộc tính phân rã
 Kết luận:
- Nếu học lực trung bình thì trượt.
- Nếu học lực giỏi thì đỗ.
- Nếu học lực khá mà có bố hoặc mẹ đỗ đại học thì đỗ.
- Nếu học lực khá mà bố và mẹ không đỗ đại học thì trượt.

10


CHƯƠNG 3. TỔNG QUAN VỀ CHƯƠNG TRÌNH MINH HỌA
3.1 Tổng quan về chương trình
 Chương trình minh họa được xây dựng và cài đặt bằng ngôn ngữ C++.
 Giới thiệu về ngôn ngữ C++.

C++ là một ngôn ngữ lập trình tương đối nhỏ gọn vận hành gần với phần
cứng và nó giống với ngôn ngữ Assembler hơn hầu hết các ngôn ngữ bậc
cao. Hơn thế, C++ đôi khi được đánh giá như là "có khả năng di động", cho
thấy sự khác nhau quan trọng giữa nó với ngôn ngữ bậc thấp như là
Assembler, đó là việc mã C++ có thể được dịch và thi hành trong hầu hết các
máy tính, hơn hẳn các ngôn ngữ hiện tại trong khi đó thì Assembler chỉ có
thể chạy trong một số máy tính đặc biệt. Vì lý do này C++ được xem là ngôn
ngữ bậc trung.
C++ đã được tạo ra với một mục tiêu là làm cho nó thuận tiện để viết các
chương trình lớn với số lỗi ít hơn trong mẫu hình lập trình thủ tục mà lại không
đặt gánh nặng lên vai người viết ra trình dịch C++, là những người bề bộn với
các đặc tả phức tạp của ngôn ngữ. Cuối cùng C++ có thêm những chức năng
sau:
- Một ngôn ngữ cốt lõi đơn giản, với các chức năng quan trọng chẳng hạn như
là những hàm hay việc xử lý tập tin sẽ được cung cấp bởi các bộ thư viện các
thủ tục.
- Tập trung trên mẫu hình lập trình thủ tục, với các phương tiện lập trình theo
kiểu cấu trúc.
- Một hệ thống kiểu đơn giản nhằm loại bỏ nhiều phép toán không có ý nghĩa
thực dụng.

11


- Dùng ngôn ngữ tiền xử lý, tức là các câu lệnh tiền xử lý C++, cho các nhiệm
vụ như là định nghĩa các macro và hàm chứa nhiều tập tin mã nguồn (bằng
cách dùng câu lệnh tiền xử lý dạng #include chẳng hạn).
- Mức thấp của ngôn ngữ cho phép dùng tới bộ nhớ máy tính qua việc sử dụng
kiểu dữ liệu point.
- Số lượng từ khóa rất nhỏ gọn.

-

Các tham số được đưa vào các hàm bằng giá trị, không bằng địa chỉ.

- Hàm các con trỏ cho phép hình thành một nền tảng ban đầu cho tính
đóng và tính đa hình.
- Hỗ trợ các bản ghi hay các kiểu dữ liệu kết hợp do người dùng từ khóa định
nghĩa struct cho phép các dữ liệu liên hệ nhau có thể được tập hợp lại và
được điều chỉnh như là toàn bộ.

3.2 Code của chương trình minh họa
#include <iostream>
#include <fstream>
#include <conio.h>
#include <string>
#include <iomanip>
#include <math.h>
using namespace std;
bool docFile(string tbl[][20],int &hang,int &cot)
{
ifstream MaTran("dulieu.txt");
if(! MaTran.is_open())
{
cout<<"Khong the mo file\n";
return false;
}
else {
MaTran>>hang;
hang++;
MaTran>>cot;

12


cot+=2;
cout<<"Ta co bang du lieu :\n\n";
for(int i = 0; i < hang; i++)
{
for(int j = 0; j {
MaTran>>tbl[i][j];
}
}
}
MaTran.close();
return true;
}
void xuatMatran(string a[20][20],int hang,int cot)
{
for(int i = 0; i < hang; i++)
{
for(int j = 0; j < cot; j++)
{
cout<}
cout<<"\n";
}
}
void xuatMang(string a[],int n)
{
for (int i=0;i

cout <cout<<"\n";
}
void getCol(string cot[20],string thuocTinh[20],string
&soThuoctinh,int somau,int vitri)
{
soThuoctinh = 0;
int i,j,k;
string tmp=tbl[0][vitri];
for(i=0;icot[i]=tbl[i][vitri];
for(i=1;i{
k=0;
for (j=0;jif (tbl[j][vitri] ==tbl[i][vitri])
13

tbl[20][20],int


{
k=1;
break;
}
if(k!=1)
{
thuocTinh[soThuoctinh]=tbl[i][vitri];
soThuoctinh++;
}

}
}
int tanXuat(string str,string cot[20],int n)
{
int dem=0;
for(int i=0;iif(cot[i]==str)
dem++;
return dem;
}
float giatriMang(int a[],int n)
{
float t=0;
for (int i=0;it=t+(a[i]*a[i]);
return sqrt(t);
}
int tinhVecto(string tbl[20][20],int somau,int vitri,int socot,string luat[20],int
&soluat,string biLoai[20],int &sttBiloai)
{
string dx[20],ttdx[20],d[20],ttd[20];
int sttdx,sttd,i,j,k,t,svt=0;
float tmp[20];
cout<getCol(d,ttd,tbl,sttd,somau,socot-1);
getCol(dx,ttdx,tbl,sttdx,somau,vitri);
cout<<" ------\n";
for (i=0;i{
cout<<"\tV "<

for (j=0;j{
t=0;
for (k=1;k14


if ((dx[k]==ttdx[i])&&(d[k]==ttd[j]))
t++;
int m=tanXuat(ttdx[i],dx,somau);
cout<tmp[j]=t/m;
if(tmp[j]==1)
{
luat[soluat]= "\tNeu [ " + tbl[0][vitri]+ " : " + ttdx[i] + " ] ---> [ " + tbl[0]
[socot-1] +" : "+ ttd[j]+" ]";
soluat++;
svt++;
biLoai[sttBiloai]=ttdx[i];
sttBiloai++;
}
}
cout<<"\n";
}
cout<<"\tSo vecto don vi la : "<return svt;
}
int vitriPhanhoach(string tbl[20][20],int somau,int socot,int soVecto[],int n)
{
int max=soVecto[0],vitri=0;

for (int i=0;i{
if(soVecto[i]>max)
{
max=soVecto[i];
vitri=i;
}
if(soVecto[i]==max)
{
string a[20],tta[20],b[20],ttb[20];
int stta,sttb;
getCol(a,tta,tbl,stta,somau,vitri+2);
getCol(b,ttb,tbl,sttb,somau,i+2);
if(stta>sttb)
{
max=soVecto[i];
vitri=i;
}
}
15


}
return vitri+2;
}
bool kiemtra(string mangCankiemtra[20],int soluong,string chuoiKiemtra)
{
for(int i=0;iif(mangCankiemtra[i]==chuoiKiemtra)
return true;

return false;
}
void xoahang(string tbl[20][20],int &hang,int cot,int vitri)
{
for (int i=vitri;ifor(int j=0;jtbl[i][j]=tbl[i+1][j];
hang--;
}
void newtbl(string tbl[20][20],int &somau,int &socot,string ttBiloai[20],int
sttBiloai,int cotPhanhoach)
{
int i,j,k;
int tmp=0;
string t;
for(i=0;i{
if(kiemtra(ttBiloai,sttBiloai,tbl[i][cotPhanhoach]))
{
tmp++;
xoahang(tbl,somau,socot,i);
i--;
}
}
for(i=0;ifor(j=cotPhanhoach;jtbl[i][j]=tbl[i][j+1];
socot--;
}
void setData(string a[20],int n,int batdau,string b)

{
for (int i=batdau;ia[i]=b;
}
int main()
16


{
int r,s,i,sttd,svt[20],sl=0,ttbl,vtph,k=1;
string b[20][20],d[20],ttd[20],luat[20],bl[20];
if(docFile(b,r,s))
xuatMatran(b,r,s);
cout<<"\nThuoc tinh muc tieu (KET_QUA) theo thu tu : ";
getCol(d,ttd,b,sttd,r,s-1);
for(i=0;icout<cout <<" \n\n";
while(1)
{
cout<<"Tinh vecto dac trung : \n";
ttbl=0;
for(i=2;isvt[i-2]=tinhVecto(b,r,i,s,luat,sl,bl,ttbl);
vtph=vitriPhanhoach(b,r,s,svt,s-3);
cout<<"\----------------------------------------------------\n";
cout<<"\--> Chon thuoc tinh "<cout<<"\----------------------------------------------------\n";
newtbl(b,r,s,bl,ttbl,vtph);
if(giatriMang(svt,s-3)==0 || r<2)

break;
cout<< "\nTa co bang du lieu moi - sau khi phan hoach \n\n";
xuatMatran(b,r,s);
};
cout<<"Ta co "<xuatMang(luat,sl);
}
3.3 Một số hình ảnh về giao diện chương trình

17


Hình 3.1 Thông tin file “dulieu.txt”

Hình 3.2 Đọc dữ liệu từ file “dulieu.txt” vào chương trình minh họa

Hình 3.3 Quá trình xử lý của chương trình minh họa

18


Hình 3.4 Kết quả của chương trình minh họa

19


KẾT LUẬN VÀ KIẾN NGHỊ
1. Kết luận
Qua đề tài “Xây dựng chương trình minh họa thuật toán Quinlan”, em đã hiểu
hơn về học phần CÁC HỆ CƠ SỞ TRI THỨC nói chung và thuật toán Quinlan

nói riêng. Em xin chân thành cảm ơn thầy Nguyễn Hạnh Phúc đã giúp đỡ em
hoàn thành đề tài này!
2. Kiến nghị
Do kiến thức còn hạn chế và thời gian thực hiện ngắn nên đề tài vẫn còn
nhiều thiếu sót. Em rất mong nhận được sự góp ý của các thầy cô và các bạn để
em có thể hoàn thiện đề tài hơn. Em xin chân thành cảm ơn.

20


TÀI LIỆU THAM KHẢO
1. Hoàng Kiếm, Các hệ cơ sở tri thức, Nhà xuất bản ĐHQG TPHCM, 2002
2. Ngô Trung Việt, Trí tuệ nhân tạo, Nhà xuất bản Giáo dục, 1995
3. Nguyễn Thanh Thủy, Trí tuệ nhân tạo, Nhà xuất bản Giáo dục, 1997
4. Đặng Hoàng Anh, Trí tuệ nhân tạo và hệ chuyên gia, Nhà xuất bản Hàng hải,
2015

21



×