Phân công công việc1 Tìm hiểu thuật toán Tất cả thành viên 3 Sưu tập nguồn dữ liệu Trần Văn Huân 4 Thiết kế giao diện phía người sử dụng Lê Văn Nam 5 Thiết kế giao diện phía quản trị Lê
Trang 1KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO BÀI TẬP LỚN
MÔN HỌC: HỆ CHUYÊN GIA
ĐỀ TÀI: XÂY DỰNG WEBSITE GIỚI THIỆU SẢN PHẨM SỬ DỤNG QUẢNG
CÁO THÔNG MINH SỬ DỤNG K-MEANS
Giáo viên hướng dẫn: Th.s Trần Thanh Hùng
Lớp : KHMT1-K5-Nhóm 13
Nhóm sinh viên thực hiện:
1- Trịnh Xuân Đồng 2- Trần Văn Huân 3- Lê Văn Nam
Hà Nội, ngày 01 tháng 08 năm 2013
Trang 2MỤC LỤC
Phân công công việc 3
Lời Nói Đầu 4
CHƯƠNG I: TỔNG QUAN VỀ BÀI TOÁN PHÂN CỤM DỮ LIỆU 5
1 Giới thiệu về kỹ thuật phân cụm trong Khai phá dữ liệu (Clustering Techniques in Data Mining) 5
2 Lĩnh vực áp dụng phân cụm dữ liệu 5
CHƯƠNG II : THUẬT TOÁN KMEANS 7
1 Mô tả thuật toán 7
2 Các bước thực hiện 7
3 Nhận xét thuật toán 8
CHƯƠNG III : XÂY DỰNG WEBSITE BÁN HÀNG THÔNG MINH SỬ DỤNG THUẬT TOÁN KMEANS 9
1 Mục đích bài toán 9
2 Cấu trúc dữ liệu của bài toán 9
a Dữ liệu vào 9
b Dữ liệu ra 9
c Thiết kế CSDL 9
d Các thuật toán sử dụng 11
3 Các bước thực hiện bài toán 14
CHƯƠNG IV: MỘT SỐ GIAO DIỆN VÀ KẾT QUẢ 16
1 Giao diện chương trình 16
2 Kết quả đạt được 19
3 Hướng phát triển 19
4 Tài liệu tham khảo 20
Trang 3Phân công công việc
1 Tìm hiểu thuật toán Tất cả thành viên
3 Sưu tập nguồn dữ liệu Trần Văn Huân
4 Thiết kế giao diện phía người sử dụng Lê Văn Nam
5 Thiết kế giao diện phía quản trị Lê Văn Nam
7 Xây dựng module ChuanHoaDuLieuSQL Trần Văn Huân
8 Xây dựng module TinhKhoangCach Trần Văn Huân
9 Xây dựng module Thêm mới dữ liệu Lê Văn Nam
10 Xây dựng module đọc dữ liệu SQL Lê Văn Nam
11 Xây dựng module phân cụm Trịnh Xuân Đồng
Trang 4Lời Nói Đầu
Hê chuyên gia (HCG) là một lĩnh vực của khoa học máy tính, nghiên cứu sự thiết kế của các tác nhân thông minh Các áp dụng của HCG rất đa dạng và phong phú, hiện nay đã có rất nhiều hệ thông minh ra đời như: các hệ thống tư vấn, các hệ điều khiển tự động, các hệ nhận dạng Kỹ thuật của HCG đã được sử dụng trong việc xây dựng các hệ mềm nhằm tạo ra các hệ mềm mang yếu tố thông minh, linh hoạt và tiện dụng
Một trong những nghiên cứu đó là áp dụng thuật toán K-mean đưa ra các giải thuật phân cụm để gom cụm các sản phẩm có những thuộc tính tương tự nhau giúp cho việc tìm kiếm và tư vấn được nhanh chóng và chính xác Giải thuật phân cụm là một thuật toán đầu vào là một tập gồm N phân tử và K cụm và trả
về kết quả là K cụm tương ứng với các phần tử có thuộc tính tương tự nhau và không trùng lặp nhau
Trong quá trình thực hiện đề tài, tuy có nhiều cố gắng nhưng sẽ không tránh khỏi những sai sót, rất mong được thầy hướng dẫn và góp ý Chúng em xin chân thành cảm ơn thầy Trần Thanh Hùng đã tận tình hướng dẫn và tạo điều kiện tốt trong quá trình học tập cũng như trong quá trình chúng em hoàn thành đề tài này
Nhóm sinh viên thực hiện
Trang 5CHƯƠNG I: TỔNG QUAN VỀ BÀI TOÁN PHÂN CỤM DỮ
LIỆU
1. Giới thiệu về kỹ thuật phân cụm trong Khai phá dữ liệu (Clustering Techniques
in Data Mining)
Phân cụm là kỹ thuật rất quan trọng trong khai phá dữ liệu, nó thuộc lớp các
phương pháp Unsupervised Learning trong Machine Learning Có rất nhiều
định nghĩa khác nhau về kỹ thuật này, nhưng về bản chất ta có thể hiểu “Phân cụm là các qui trình tìm cách nhóm các đối tượng đã cho vào các cụm (clusters), sao cho các đối tượng trong cùng 1 cụm tương tự (similar) nhau và các đối tượng khác cụm thì không tương tự (Dissimilar) nhau”.
Mục đích của phân cụm là tìm ra bản chất bên trong các nhóm của dữ liệu Các thuật toán phân cụm (Clustering Algorithms) đều sinh ra các cụm (clusters) Tuy nhiên, không có tiêu chí nào là được xem là tốt nhất để đánh hiệu của của phân tích phân cụm, điều này phụ thuộc vào mục đích của phân cụm như: data reduction, “natural clusters”, “useful” clusters, outlier detection
2 Lĩnh vực áp dụng phân cụm dữ liệu
Kỹ thuật phân cụm có thể áp dụng trong rất nhiều lĩnh vực như:
Marketing: Xác định các nhóm khách hàng (khách hàng tiềm năng,
khách hàng giá trị, phân loại và dự đoán hành vi khách hàng,…) sử dụng sản phẩm hay dịch vụ của công ty để giúp công ty có chiến lược kinh doanh hiệu quả hơn;
Biology: Phận nhóm động vật và thực vật dựa vào các thuộc tính của
chúng;
Libraries: Theo dõi độc giả, sách, dự đoán nhu cầu của độc giả…;
Trang 6Insurance, Finance: Phân nhóm các đối tượng sử dụng bảo hiểm và các
dịch vụ tài chính, dự đoán xu hướng (trend) của khách hàng, phát hiện gian lận tài chính (identifying frauds);
WWW: Phân loại tài liệu (document classification); phân loại người
dùng web (clustering weblog);…
Trang 7CHƯƠNG II : THUẬT TOÁN KMEANS
1 Mô tả thuật toán
K-Means là thuật toán rất quan trọng và được sử dụng phổ biến trong kỹ thuật phân cụm Tư tưởng chính của thuật toán K-Means là tìm cách phân nhóm các đối tượng (objects) đã cho vào K cụm (K là số các cụm được xác đinh trước, K nguyên dương) sao cho tổng bình phương khoảng cách giữa các đối tượng đến tâm nhóm (centroid ) là nhỏ nhất
Thuật toán K-Means được mô tả như sau
2 Các bước thực hiện
Thuật toán K-Means thực hiện qua các bước chính sau:
Chọn ngẫu nhiên K tâm (centroid) cho K cụm (cluster) Mỗi cụm được đại diện bằng các tâm của cụm
Tính khoảng cách giữa các đối tượng (objects) đến K tâm (thường dùng khoảng cách Euclidean)
Nhóm các đối tượng vào nhóm gần nhất
Trang 8 Xác định lại tâm mới cho các nhóm
Thực hiện lại bước 2 cho đến khi không có sự thay đổi nhóm nào của các đối tượng
3 Nhận xét thuật toán
Thuật toán K-mean có rất nhiều ứng dụng từ mạng Neural network, nhận dạng mẫu, trí tuệ nhân tạo, các lĩnh vực sử lý ảnh cũng như tư vấn trong các trang Web
Nó có thể áp dụng cho các bài toán phân loại mà dữ liệu có nhiều trường, nhiều thuộc tính với K là số loại mà bài toán muốn phân
Nhược điểm :
- Nếu số lượng điểm đầu vào không nhiều việc gom nhóm lúc đầu sẽ là kết quả của bài toán
- Số lượng nhóm K phải được xác định trước bằng tay
- Các thuộc tính của mỗi điểm đều có mức đánh giá là như nhau không phân biệt thuộc tính nào quan trọng hơn thuộc tính nào
- Đối với các điểm dữ liệu mà khoảng cách quá xa trọng tâm nếu gom nhóm sẽ dẫn đến việc tính lại trọng tâm không còn chính xác
Trang 9CHƯƠNG III : XÂY DỰNG WEBSITE BÁN HÀNG THÔNG
MINH SỬ DỤNG THUẬT TOÁN KMEANS
1 Mục đích bài toán
Đặt vấn đề : trong quá trình tìm kiếm mua các sản phẩm trên mạng cũng như các trang Web Người mua chưa biết lên mua mặt hàng nào
và mua những sản phẩm nào đi kèm Các nhà thiết kế trang Web đã áp dụng thuật toán K-mean để tư vấn giúp người mua có được những tư vấn giúp đỡ một cách nhanh chóng và chính xác nhất
Thuật toán được áp dụng trực tiếp lên CSDL, phân dữ liệu thành các cụm có các đặc tính tương tự nhau Nhờ đó
2 Cấu trúc dữ liệu của bài toán
a Dữ liệu vào
Danh sách các đặc tính của một sản phẩm (VD : Chất liệu, màu sắc, đơn giá, kích thước…)
Số cụm K mà ta muốn phân cụm đỗi với danh sách trên
b Dữ liệu ra
Danh sách các sản phẩm đã được phân vào K cụm
Mỗi cụm sẽ chứa các đặc tính tương đối gần nhau
c Thiết kế CSDL
Đỗi với đề tài xây dựng website bán hàng, bên cạnh những bảng dữ liệu cần có của một hệ thống bán hàng, chúng ta chỉ cần bổ sung thêm một số bảng để lưu kết quả của quá trình phân cụm dữ liệu, phục vụ cho quá trình tư vấn về sau
Các bảng và cấu trúc dữ liệu cho từng bảng :
Bảng Color – Màu sắc
Color ColorID int Mã màu
colorName Nvacrchar(Max) Tên màu
Bảng Size – Kích cỡ
Size SizeID int Mã kích cỡ
SizeName Nvacrchar(Max) Tên kích cỡ
Bảng Material – Chất liệu
Trang 10Material MaterialID int Mã chất liệu
MaterialName Nvacrchar(Max) Tên chất liệu
Bảng Type – Kiểu dáng
Type TypeID int Mã kiểu
TypeName Nvacrchar(Max) Tên kiểu
Bảng Product – Sản Phẩm
Product ProductID int Mã SP
ProductName Nvacrchar(Max) Tên SP
UrlSmallImage Nvacrchar(Max) Ảnh nhỏ
UrlLargeImage Nvacrchar(Max) Ảnh lớn
Visted int
Số lượng người xem
ColorID int Mã màu
SizeID int Mã kích cỡ
TypeID int Mã kiểu
Price int Đơn giá
MaterialID int Mã chất liệu
CreateDate Datetime Ngày tạo
Bảng Table_ChuanHoaDuLieu – Chuẩn hóa dữ liệu trước khi phân cụm
Table_ChuanHoaDuLieu ProductID int Mã SP
Visted int Số lượng người xem
ColorID int Mã màu
SizeID int Mã kích cỡ
TypeID int Mã kiểu
Price int Đơn giá
MaterialID int Mã chất liệu
Bảng Cluster – Cụm sau khi phân cụm
Cluster ProductID int Mã SP
Trang 11Cluster Nvacrchar(Max) MÃ cụm
Hình 1 : Thiết kế CSDL các bảng trên SQL Server
d Các thuật toán sử dụng
Thuật toán chuẩn hóa dữ liệu rời rạc
Khi xây dựng chương trình và thực nghiệm nhóm nhận thấy đỗi với các dữ liệu rời rạc (không liên tục) thì kết quả của thuật toán ảnh hưởng rất nhiều Cụ thể là theo hướng xấu đi (Dữ liệu phân cụm chưa chính xác) Chính vì vậy cần một thuật toán để chuẩn hóa dữ liệu trước khi phân cụm
-Ta sử dụng công thức sau :
X[i]= (X[i]-Xmin)/(Xmax - Xmin)
X[i] : Giá trị hiện tại tương ứng với đặc tính X của sản phẩm thứ i
Xmax : Giá trị lớn nhất đặc tính X
Xmin : Giá trị lớn nhất đặc tính X
Sau khi áp dụng CT trên, dữ liệu của chúng ta sẽ được chuẩn hóa và có giá trị nằm trong miền [0,1]
Xây dựng công thức trên bằng ngôn ngữ C#
Trang 12private float tinhMinMaxTB(int Xmin, int Xmax, int xi) {
return (xi-Xmin)/(float)(Xmax-Xmin);
}
Định nghĩa một sản phẩm (hay 1 vector)
public class item {
public float GheTham { get; set; } public float MauSac { get; set; } public float KichThuoc { get; set; } public float KieuDang { get; set; } public float ChatLieu { get; set; } public float DonGia { get; set; } public float KhuyenMai { get; set; } public string ProductID { get; set; } }
Tính khoảng cách giữa hai sản phẩm
private float tinhKhoangCachHaiDiem(item x, item y) {
float GheTham = y.GheTham - x.GheTham;
float MauSac = y.MauSac - x.MauSac;
float KichThuoc = y.KichThuoc - x.KichThuoc;
float KieuDang = y.KieuDang - x.KieuDang;
float ChatLieu = y.ChatLieu - x.ChatLieu;
float DonGia = y.DonGia - x.DonGia;
float KhuyenMai = y.KhuyenMai - x.KhuyenMai;
GheTham = GheTham * GheTham;
MauSac = MauSac * MauSac;
KichThuoc = KichThuoc * KichThuoc;
KieuDang = KieuDang * KieuDang;
ChatLieu = ChatLieu * ChatLieu;
DonGia = DonGia * DonGia;
KhuyenMai = KhuyenMai * KhuyenMai;
float kq = (float)(Math.Sqrt(GheTham + MauSac + KichThuoc + KieuDang + ChatLieu + DonGia + KhuyenMai));
return kq;
}
Tính giá trị trung bình của một cụm
private item tinhToanDoTB(int k)
{
float GheTham = 0;
float MauSac = 0;
float KichThuoc = 0;
Trang 13float KieuDang = 0;
float ChatLieu = 0;
float DonGia = 0;
float KhuyenMai = 0;
int counter = 0;
for (int i = 0; i < tongSoVecTor; i++)
{
if (ProductID[1, i] == k)
{
GheTham += vector[i].GheTham;
MauSac += vector[i].MauSac;
KichThuoc += vector[i].KichThuoc;
KieuDang += vector[i].KieuDang;
ChatLieu += vector[i].ChatLieu;
DonGia += vector[i].DonGia;
KhuyenMai += vector[i].KhuyenMai;
counter++;
}
}
item kq = new item();
if (counter== 0)
{
kq.GheTham = 0;
kq.KhuyenMai = 0;
kq.KichThuoc = 0;
kq.KieuDang = 0;
kq.MauSac = 0;
kq.ChatLieu = 0;
kq.DonGia = 0;
}
else
{
kq.GheTham = GheTham / (float)counter;
kq.KhuyenMai = KhuyenMai / (float)counter;
kq.KichThuoc = KichThuoc / (float)counter;
kq.KieuDang = KieuDang / (float)counter;
kq.MauSac = MauSac / (float)counter;
kq.ChatLieu = ChatLieu / (float)counter;
kq.DonGia = DonGia / (float)counter;
}
return kq;
}
Tính khoảng cách từ một sản phẩm đến một cụm
private float tinhKhoangCachDenCum(item x, int k)
Trang 14{ //tim ra toa do TB cua cuam item TB = tinhToanDoTB(k);
//tinh khoang cach float KQ = tinhKhoangCachHaiDiem(x, TB);
return KQ;
}
3 Các bước thực hiện bài toán
B1 : Chuẩn hóa dữ liệu SQL
B2 : Đọc dữ liệu và lưu vào các biến
B3 : Nhập số cụm K
B4 : Chọn ngẫu nhiên K phần tử làm trọng tâm
B5 : Tính khoảng cách từ một phần tử đến K cụm
B6 : Tìm khoảng cách nhỏ nhất và gán phần tử đó vào cụm
B7 : Kiểm tra xem các phần tử ở mỗi cụm có thay đổi gì không, nếu không có sự thay đổi thì thoát khỏi chương trình, ngược lại thì quay lại B5
4 Mã chương trình thực hiện
public void xuly() {
chuanHoaDuLieu();
docDulieu();
//phan cum ngau nhien cho cac phan tu
//ProductID[1, courter] =- 1;
for (int i = 0; i < socum; i++)
ProductID[1, i] = i;
//tien hanh phan cum du lieu
while (true)
{
int[,] TG=new int[2,tongSoVecTor];
for (int k = 0; k < tongSoVecTor; k++)
{
TG[0, k] = ProductID[0, k];
TG[1, k] = ProductID[1, k];
}
float[] khoangcach = new float[socum];
for (int j = 0; j < tongSoVecTor; j++)
{
for (int i = 0; i < socum; i++)
{
Trang 15khoangcach[i] = tinhKhoangCachDenCum(vector[j], i);
}
//tim gia tri nho nhat la khoang cach tu diem j den cum i
float min = khoangcach[0];
int chiso = 0;
for (int k = 1; k < socum; k++)
{
if (khoangcach[k] < min)
{
min = khoangcach[k];
chiso = k;
}
}
ProductID[1, j] = chiso;
}
//so sanh xem co su khac biet hay khong
int check = 0;
for (int k = 0; k < tongSoVecTor; k++)
{
if (TG[1, k] != ProductID[1, k])
{
check = 1;
break;
}
}
if (check == 0) break;
}
//sau khi phan cum xong thi insert vao CSDL
xoaTatCaCacCum();
for (int i = 0; i < tongSoVecTor; i++)
{
string sql = "insert into Cluster values('" + ProductID[0,i] +
"','" +ProductID[1,i]+ "')";
new KetNoiCSDL().excuteNonquery(sql);
}
}
Trang 16CHƯƠNG IV: MỘT SỐ GIAO DIỆN VÀ KẾT QUẢ
1 Giao diện chương trình
Sau khi truy cập vào trang Web bạn có thể thực hiện các thao tác như đăng nhập nếu bạn đã có tài khoản tìm kiếm các sản phẩm mà cụ thể ở đây là các mặt hàng quần áo của hãng Việt Tiến Xem chi tiết cụ thể đầy đủ các thông tin của từng sản phẩm
Trang 17Trong mục Danh Mục Sản Phẩm bạn có thể lựa chọn các thể loại mà trang web bán như: áo sơ mi ngắn tay, áo sơ mi dài tay, quần Jean, quần kaki…
Trang 18 Ở trang quản trị Admin có thể kiểm tra mọi hoạt động của trang Web xem
có sự cố gì với trang Web hay không Đồng thời có thể cập nhật hàng hóa khi
có hàng mới nhập về sửa chửa những thông tin sản phẩm bị sai, xóa những sản phẩm không còn lưu thông nữa
Trang 19Khi bạn chọn một sản phẩm bất kỳ thì giao diện sẽ chuyển tới trang chi tiết sản phẩm ở trang này bạn có thể xem đầy đủ thông tin về sản phẩm sô lượng còn cũng như giá tiền mà bạn phải trả và thông tin khuyến mại cho sản phẩm bạn có thêm sản phẩm vào giỏ hàng và mua sản phẩm nếu đồng ý Ngoài ra
hệ thống sẽ sử dụng thuật toán K-mean để phân cụm liệt kê và tư vấn những sản phẩm tương ứng kèm theo sản phẩm mà khách hàng lựa chọn
2 Kết quả đạt được
Nghiên cứu và tìm hiểu, nắm rõ thuật toán Kmeans
Xây dựng thành công chương trình
Đã tư vấn được cho khách hàng khi mua hàng
Xây dựng giao diện thân thiện
Hỗ trợ quản trị CSDL
3 Hướng phát triển
Hệ thống nên áp dụng thêm các giải thuật khác để tăng hiệu quả tư vấn
Sử dụng Apriori
Sử dụng Mạng Noron
Sử dụng Knn…