1. Trang chủ
  2. » Luận Văn - Báo Cáo

Ứng dụng kmean trong phân loại sản phẩm

22 515 5

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 22
Dung lượng 840 KB

Nội dung

Ứng dụng kmean trong phân loại sản phẩm

Trang 2

LỜI NÓI ĐẦU

Ngày nay không ai có thể phủ nhận vai trò cực kỳ quan trọng của máy tính trongnghiên cứu khoa học kỹ thuật cũng như trong đời sống Máy tính đã làm được những điều kỳdiệu và giải được những vấn đề tưởng chừng nan giải Càng ngày càng có nhiều người tự hỏi,liệu máy tính có khả năng suy nghĩ như con người hay chưa? Chúng ta sẽ không trả lời câuhỏi ấy Thay vào đó, chúng ta sẽ nêu ra những khác biệt chủ yếu giữa cách làm việc của máytính và bộ óc con người

Một máy tính, dù có mạnh đến đâu chăng nữa, đều phải làm việc theo một chươngtrình chính xác đã được hoạch định trước bởi các chuyên gia Bài toán càng phức tạp thì việclập trình càng công phu Trong khi đó con người làm việc bằng cách học tập và rèn luyện, khilàm việc con người có khả năng liên tưởng, kết nối sự việc này với sự việc khác, và quantrọng hơn hết, họ có thể sáng tạo

Ngày nay, các website giới thiệu, mua bán sản phẩm trực tuyến ngày càng nhiều trêninternet Có rất nhiều hình thức giới thiệu sản phẩm tới khách hàng, nhưng làm sao để khikhách hàng mua xong sản phẩm này mà lại có hứng thú để mua sản phẩm khác mới là vẫn đềđặt ra với các trang web bán hàng trực tuyến Những website thông minh như vậy sẽ có giáthành rất cao và ít cửa hàng có thể bỏ tiền ra đầu tư

Điều khó khăn của khả năng phân loại này là dữ liệu đầu vào phải được chuẩn hóa mộtcác chính xác đề chương trình có thể phân loại được sản phẩm vào đúng nhóm phù hợp.Với một số phương pháp truyền thống, phân loại các nhóm sản phẩm dựa theo mã củanhóm trong các sản phẩm Với cách làm này, hoàn toàn phụ thuộc vào việc sắp đặt của ngườinhập dữ liệu

Việc sử dụng Kmean để phân cụm tự động cho các sản phẩm sẽ giúp cho việc phânloại mềm dẻo hơn, dựa trên các tiêu chí của sản phẩm mà ta có thể phân loại sản phẩm nàythuộc các nhóm nào Từ đó đưa ra những gợi ý cần thiết làm vừa lòng những vị khách hàngkhó tính nhất

Trang 3

I Một số phương pháp phân cụm dữ liệu điển hình

1 Phương pháp phân cụm phân hoạch

Ý tưởng chính của phương pháp này là phân một tập dữ liệu có n phần tử cho trước thành k nhóm dữ liệu sao cho mỗi phần tử dữ liệu chỉ thuộc về một nhóm dữ liệu và mỗi

nhóm dữ liệu có tối thiểu một phần tử dữ liệu Các thuật toán phân hoạch có độ phức tạp rấtlớn khi xác định nghiệm tối ưu toàn cục cho vấn đề PCDL, vì nó phải tìm kiếm tất cả các cáchphân hoạch có thể được Chính vì vậy, trên thực tế người ta thường đi tìm giải pháp tối ưu cục

bộ cho vấn đề này bằng cách sử dụng một hàm tiêu chuẩn để đánh giá chất lượng của các cụmcũng như để hướng dẫn cho quá trình tìm kiếm phân hoạch dữ liệu Với chiến lược này, thôngthường người ta bắt đầu khải tạo một phân hoạch ban đầu cho tập dữ liệu theo phép ngẫunhiên hoặc theo heuristic và liên tục tinh chỉnh nó cho đến khi thu được một phân hoạchmong muốn, thoả mãn các điều kiện ràng buộc cho trước Các thuật toán phân cụm phânhoạch cố gắng cải tiến tiêu chuẩn phân cụm bằng cách tính các giá trị độ đo tương tự giữa cácđối tượng dữ liệu và sắp xếp các giá trị này, sau đó thuật toán lựa chọn một giá trị trong dãysắp xếp sao cho hàm tiêu chuẩn đạt giá trị tối thiểu Như vậy, ý tưởng chính của thuật toánphân cụm phân hoạch tối ưu cục bộ là sử dụng chiến lược tham ăn để tìm kiếm nghiệm

Lớp các thuật toán phân cụm phân hoạch bao gồm các thuật toán đề xuất đầu tiêntrong lĩnh vực KPDL cũng là các thuật toán được áp dụng nhiều trong thực tế Sau đây là một

số thuật toán kinh điển áp dụng phương pháp phân hoạch được kế thừa sử dụng rộng rãi:

2 Thuật toán k-means

Thuật toán phân cụm phân hoạch k- means do MacQueen đề xuất trong lĩnh vực thống

kê năm 1967, mục đích của tuật toán k- means là sinh ra k cụm dữ liệu {C 1 , C 2 , …, C k } từ một tập dữ liệu ban đầu gồm n đối tượng trong không gian d chiều X i =(x i1 , x i2 , …, x id ), (i 1 ,n),

sao cho hàm tiêu chuẩn:  

1

2( ) đạt cực tiểu Trong đó: m i là trọng tâm của

cụm C i , D là khoảng cách giữa hai đối tượng.

Trọng tâm của một cụm là một vector, trong đó giá trị của mỗi phần tử của nó là trungbình cộng các thành phần tương ứng của các đối tượng vector dữ liệu trong cụm đang xét

Tham số đầu vào của thuật toán là số cụm k, tập CSDL gồm n phần tử và tham số đầu ra của thuật toán là các trọng tâm của cụm dữ liệu Độ đo khoảng cách D giữa các đối tượng dữ liệu

Trang 4

thường được sử dụng là khoảng cách Euclide, bởi đây là mô hình khoảng cách dễ để lấy đạohàm và xác định các cực trị tối thiểu Hàm tiêu chuẩn và độ đo khoảng cách có thể được xác

định cụ thể hơn tuỳ vào ứng dụng hoặc các quan điểm của người dùng Thuật toán k- means

bao gồm các bước cơ bản sau:

INPUT: Một CSDL gồm n đối tượng và số cụm cần phân là k.

OUTPUT: Các cụm C i (i=1 k) sao cho hàm tiêu chuẩn E đạt giá trị tối thiểu.

Thuật toán tiến hành 4 bước sau:

Bước 1: Khởi tạo

Chọn k đối tượng m j (j=1…k) là trọng tâm ban đầu của k cụm từ tập dữ liệu đầu vào

(việc lựa chọn này có thể ngẫu nhiên hoặc chọn theo kinh nghiệm chuyên gia)

Bước 2: Tính khoảng cách

Đối với mỗi đối tượng X i (1 ≤ i ≤ n), tính khoảng cách của nó tới mỗi trọng tâm m j

với j=1,…,k, sau đó tìm trọng tâm gần nhất đối với mỗi đối tượng.

Bước 3: Cập nhật lại trong tâm

Đối với mỗi j=1,…,k, cập nhật trọng tâm cụm m j bằng cách xác định trung bìnhcộng của các vector đối tượng dữ liệu

Bước 4: Điều kiện dừng

Lặp lại bước 2 và bước b cho đến khi các trọng tâm của cụm không thay đổi

Hình 2 .Thuật toán k-means Thuật toán k-means được chứng minh là hội tụ và có độ phức tạp tính toán là: O((n.k.d).. flop ) Trong đó, n là số đối tượng dữ liệu, k là số cụm dữ liệu, d là số chiều của

vector đối tượng dữ liệu,  là số vòng lặp, flop là thời gian để thực hiện để thực hiện một phép

tính cơ sở như phép cộng, trừ, nhân, chia,… Như vậy, do thuật toán k-means phân tích phân

cụm đơn giản nên có thể áp dụng đối với tập dữ liệu lớn Tuy nhiên, nhược điểm của thuật

toán k-means là chỉ áp dụng với dữ liệu có thuộc tính số và khám phá ra các cụm có dạng hình cầu, không những vậy mà thuật toán k-means rất nhậy cảm với nhiễu và các phần tử ngoại lai

trong dữ liệu Hình sau diễn tả, mô phỏng về một số hình dạng cụm dữ liệu khám phá được

bởi thuật toán k-means:

Trang 5

Hình 2 .Hình dạng cụm dữ liệu được khám phá bởi thuật toán k-means

Hơn nữa, chất lượng PCDL của thuật toán k-means phụ thuộc nhiều vào các tham số đầu vào như: số cụm k và k trọng tâm khởi tạo ban đầu Trong trường hợp, các trọng tâm khởi

tạo ban đầu mà quá lệch so với các trọng tâm của cụm tự nhiên thì kết quả phân cụm của thuật

toán k-means là rất thấp, nghĩa là các cụm dữ liệu được khám phá rất lệch so với các cụm

trong thực tế Trên thực tế người ta chưa có một giải pháp tối ưu nào để chọn các tham số đầu

vào, giải pháp thường được sử dụng nhất là thử nghiệm với các giá trị đầu vào k cụm dữ liệu

khác nhau rồi sau đó chọn giải pháp tốt nhất

Đến nay, đã có rất nhiều thuật toán kế thừa tư tưởng của thuật toán k-means áp dụng

trong KPDL để giải quyết tập dữ liệu có kích thước rất lớn đang được áp dụng rất hiệu quả và

phổ biến như thuật toán PAM, CLARA, CLARANS, k-medoid, k-prototypes,…

II Ứng dụng kmean trong phân cụm website

1 Giới thiệu

Ngày nay, các website giới thiệu, mua bán sản phẩm trực tuyến ngày càng nhiều trêninternet Có rất nhiều hình thức giới thiệu sản phẩm tới khách hàng, nhưng làm sao để khikhách hàng mua xong sản phẩm này mà lại có hứng thú để mua sản phẩm khác mới là vẫn đềđặt ra với các trang web bán hàng trực tuyến Những website thông minh như vậy sẽ có giáthành rất cao và ít cửa hàng có thể bỏ tiền ra đầu tư

Điều khó khăn của khả năng phân loại này là dữ liệu đầu vào phải được chuẩn hóa mộtcác chính xác đề chương trình có thể phân loại được sản phẩm vào đúng nhóm phù hợp.Với một số phương pháp truyền thống, phân loại các nhóm sản phẩm dựa theo mã củanhóm trong các sản phẩm Với cách làm này, hoàn toàn phụ thuộc vào việc sắp đặt của ngườinhập dữ liệu

Việc sử dụng Kmean để phân cụm tự động cho các sản phẩm sẽ giúp cho việc phânloại mềm dẻo hơn, dựa trên các tiêu chí của sản phẩm mà ta có thể phân loại sản phẩm nàythuộc các nhóm nào Từ đó đưa ra những gợi ý cần thiết làm vừa lòng những vị khách hàngkhó tính nhất

1.1 Phát biểu bài toán

Cho một cơ sở dữ liệu có bảng chính là dữ liệu các sản phẩm Các sản phẩm gồm sốlượng, giá, màu sắc, chất liệu, nhà sản xuất Tất cả đều là khóa ngoại liên kết tới các bảngkhác

Trang 6

Từ giả thiết, xây dựng ứng dụng phân chia số sản phẩm có trong csdl thành các nhómkhác nhau sao cho các sản phẩm trong cùng một nhóm có tính chất giống nhau nhất.

Ý tưởng bài toán :

 Chọn ra n sản phẩm ngẫu nhiên làm trọng tâm để phân nhóm với n là số nhóm cầnphân

 Sử dụng Kmean để phân chia các sản phẩm vào các nhóm

 Tính lại trọng tâm của từng nhóm

 Phân chia lại nhóm

 Lặp lại cho đến khi trọng tâm bước trước bằng trọng tâm bước sau

Các bước này đều được chương trình xử lý tự động Mỗi khi thêm một sản phẩm mới,chúng ta đã có dữ liệu trọng tâm của các nhóm Ta sẽ so sánh sản phẩm mới này với cáctrọng tâm và từ đó phân được vào đúng nhóm mà không cần phân nhóm lại cho toàn bộsản phẩm

1.2 Các bước giải quyết giải quyết bài toán

1.2.1. Xây dựng tập dữ liệu là các sản phẩm

Người sử dụng sẽ vào quản trị của website và nhập dữ liệu từng sản phẩm Trước tiêncần nhập các bảng là bảng khóa ngoại của bảng sản phẩm như bảng màu sắc, kích cỡ, chấtliệu, nhà sản xuất…

Dữ liệu sẽ được nhập vào từng nhóm sao cho các nhóm, các tính chất của sản phẩmđược phân bổ rõ ràng giúp việc phân loại được thể hiện rõ nhất Việc gợi ý mua cũng được rõràng nhất

Trang 7

Danh sách các sản phẩm sau khi nhập

Dữ liệu được lưu trong bảng sản phẩm

Đầu vào sẽ là danh sách các sản phẩm và 6 thuộc tính: Price, Quantity, Color,Manufacturer, Size, Material Các thuộc tính này đã được mã hóa bằng các con số đồng nhất

để dễ dàng cho việc tính toán với các công thức toán học

Trang 8

Ta sẽ phân thành 4 nhóm, mỗi nhóm sẽ gồm các sản phẩm có tính chất tương tự nhaunhất

1.2.1.1. Sử dụng Kmean đề phân chia sản phẩm vào các nhóm

III Cài đặt chương trình thử nghiệm

/// Thuật toán phân cụm K-Mean

/// Trả về mảng 1 chiều, các phần tử trong mảng có giá trị bằng nhau sẽ cùng một cụm

///</summary>

///<param name="n">Số tập dữ liệu</param>

///<param name="m">Số thuộc tính của dữ liệu</param>

///<param name="input">Dữ liệu đầu vào</param>

///<param name="numGroup">Số cụm</param>

publicint[] Execute(int n, int m, float[,] input, int numGroup)

{

if (numGroup > n) returnnull;

var oldCenter = newfloat[numGroup, m];

Center = newfloat[numGroup, m];

var result = newint[n];

for (int i = 0; i < n; i++)

bool check = true;

var distance = newfloat[numGroup];

Trang 9

//tim toa do tam

float[,] newCenter = oldCenter;

for (int i = 0; i < n; i++)

var result = newfloat[dt.Rows.Count, endCol - startCol];

for (int i = 0; i < dt.Rows.Count; i++)

Trang 10

privatestaticreadonlystring strConStr =

ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

#region DB Access Functions

privatestaticSqlConnection con;

publicstaticSqlConnection GetConnect()

{

if (con == null)

con = newSqlConnection(strConStr);

if (con.State == ConnectionState.Closed)

Trang 11

using (SqlConnection conn = GetConnect())

{

using (var ds = newDataSet()) {

using (var da = newSqlDataAdapter()) {

da.SelectCommand = cmd; da.SelectCommand.Connection = conn; da.Fill(ds); return ds.Tables[0]; }

}

}

}

}

finally {

}

}

publicstaticSqlDataReader ExecuteReader(SqlCommand cmd) {

try {

if (cmd.Connection != null) {

return cmd.ExecuteReader(); }

else {

using (SqlConnection conn = GetConnect()) {

cmd.Connection = conn; return cmd.ExecuteReader(); }

}

}

finally {

}

}

publicstaticDataSet GetDsData(SqlCommand cmd) {

try {

if (cmd.Connection != null) {

using (var ds = newDataSet())

Trang 12

{

using (var da = newSqlDataAdapter()) {

da.SelectCommand = cmd; da.Fill(ds); return ds; }

}

}

else {

using (SqlConnection conn = GetConnect()) {

using (var ds = newDataSet()) {

using (var da = newSqlDataAdapter()) {

da.SelectCommand = cmd; da.SelectCommand.Connection = conn; da.Fill(ds); return ds; }

}

}

}

}

finally {

}

}

publicstaticDataTable GetTable(string sql) {

SqlConnection conn = GetConnect(); var dt=newDataTable(); var ad = newSqlDataAdapter(sql, conn); ad.Fill(dt); return dt; }

publicstaticvoid ExeCuteNonquery(SqlCommand cmd) {

try {

SqlConnection conn = GetConnect(); cmd.Connection = conn; cmd.ExecuteNonQuery(); }

finally {

Trang 13

SqlConnection conn = GetConnect();

var cmd = newSqlCommand(sql, conn);

SqlConnection conn = GetConnect();

var cmd = newSqlCommand(sql, conn);

Trang 14

cmd.CommandType = CommandType.Text;

return (int) ExecuteScalar(cmd);

var hashmd5 = newMD5CryptoServiceProvider();

keyArray = hashmd5.ComputeHash(Encoding.UTF8.GetBytes("THANHNV")); }

else keyArray = Encoding.UTF8.GetBytes("THANHNV");

var tdes = newTripleDESCryptoServiceProvider

ICryptoTransform cTransform = tdes.CreateEncryptor();

byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0,

Trang 15

keyArray = hashmd5.ComputeHash(Encoding.UTF8.GetBytes("THANHNV")); }

else keyArray = Encoding.UTF8.GetBytes("THANHNV");

var tdes = newTripleDESCryptoServiceProvider

ICryptoTransform cTransform = tdes.CreateDecryptor();

byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0,

float min = float.MaxValue;

string nhom="", center="";

for (int i = 0; i < dtGroup.Rows.Count; i++)

nhom = dtGroup.Rows[i]["Group_Kmean"].ToString();

center = dtGroup.Rows[i]["Center_Kmean"].ToString();

Trang 16

ddlUSize.SelectedValue, ddlUMaterial.SelectedValue, ddlUGroupProduct.SelectedValue,nhom,center);

ProductController.Product_Update(ViewState["Id"].ToString(),

Session["upload"] == null ? "" : Session["upload"].ToString(), txtName.Text,

txtDescription.Text,

txtPrice.Text, txtQuantity.Text, ddlUColor.SelectedValue, ddlUManufacturer.SelectedValue, ddlUSize.SelectedValue, ddlUMaterial.SelectedValue,

3.1.4 Mã nguồn phân loại toàn bộ sản phẩm

DataTable dt = ProductController.Product_GetAll();

constint m = 5;//số tiêu chí phân cụm (màu sắc, chất liệu, hãng sx, kích cỡ)

int numgroup = int.Parse(SqlDataProvider.ExecuteScalar("Select NumGroup from

var km = newKMean();

float[,] data = km.ConvertDataTable(ProductController.Product_GetAll(), 5, 10); int[] result = km.Execute(dt.Rows.Count, m,data, numgroup);

//lấy center

var center=newstring[numgroup];

for (int i = 0; i < numgroup; i++)

Ngày đăng: 31/05/2016, 11:24

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w