Chào mừng đến với BIS Đăng nhập | Đăng ký | Trợ giúp
trong Tìm kiếm

Thuật toán K-Means với bài toán phân cụm dữ liệu

Bài cuối 08-21-2019 12:35 PM của anhkent_1409. 38 trả lời.
Trang 1 trong số 2 (39 nội dung) 1 2 Tiếp theo >
Sắp xếp bài viết: Trước Tiếp theo
  • 12-02-2010 11:49 AM

    • chucnv
    • 10 thành viên năng nổ nhất
    • Tham gia 12-05-2008
    • Điểm 28,320

    Thuật toán K-Means với bài toán phân cụm dữ liệu

    Thuật toán K-Means với bài toán phân cụm dữ liệu

    Nguyễn Văn Chức – chuc1803@gmail.com

     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

    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ả…;
    • Insurance, 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);…

     

    Các kỹ thuật phân cụm được phân loại như sau (xem hình)

    2. Thuật Toán K-Means

    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

     
     Thuật toán K-Means thực hiện qua các bước chính sau:

    1.    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.

    2.    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)

    3.    Nhóm các đối tượng vào nhóm gần nhất

    4.    Xác định lại tâm mới cho các nhóm

    5.    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

     Ví dụ minh họa thuật toán K-Mean:

    Giả sử ta có 4 loại thuốc A,B,C,D, mỗi loại thuộc được biểu diễn bởi 2 đặc trưng X và Y như sau. Mục đích của ta là nhóm các thuốc đã cho vào 2 nhóm (K=2) dựa vào các đặc trưng của chúng.

    Bước 1. Khởi tạo tâm (centroid) cho 2 nhóm. Giả sử ta chọn A là tâm của nhóm thứ nhất (tọa độ tâm nhóm thứ nhất c1(1,1)) và B là tâm của nhóm thứ 2 (tạo độ tâm nhóm thứ hai c2 (2,1)).

     

    Bước 2. Tính khoảng cách từ các đối tượng đến tâm của các nhóm (Khoảng cách Euclidean)

    Mỗi cột trong ma trận khoảng cách (D) là một đối tượng (cột thứ nhất tương ứng với đối tượng A, cột thứ 2 tương ứng với đối tượng B,…). Hàng thứ nhất trong ma trận khoảng cách biểu diễn khoảng cách giữa các đối tượng đến tâm của nhóm thứ nhất (c1) và hàng thứ 2 trong ma trận khoảng cách biểu diễn khoảng cách của các đối tượng đến tâm của nhóm thứ 2 (c2).

    Ví dụ, khoảng cách từ loại thuốc C=(4,3) đến tâm c1(1,1) là 3.61  và đến tâm c2(2,1) là 2.83 được tính như sau:

    Bước 3. Nhóm các đối tượng vào nhóm gần nhất

    Ta thấy rằng  nhóm 1 sau vòng lặp thứ nhất gồm có 1 đối tượng A và nhóm 2 gồm các đối tượng còn lại B,C,D.

    Bước 5. Tính lại tọa độ các tâm cho các nhóm mới dựa vào tọa độ của các đối tượng trong nhóm. Nhóm 1 chỉ có 1 đối tượng A nên tâm nhóm 1 vẫn không đổi, c1(1,1). Tâm nhóm 2 được tính như sau:

    Bước 6. Tính lại khoảng cách từ các đối tượng đến tâm mới

     

    Bước 7. Nhóm các đối tượng vào nhóm

    Bước 8. Tính lại tâm cho nhóm mới

     

    Bước 8. Tính lại khoảng cách từ các đối tượng đến tâm mới

    Bước 9. Nhóm các đối tượng vào nhóm

    Ta thấy G2 = G1 (Không có sự thay đổi nhóm nào của các đối tượng) nên thuật toán dừng và kết quả phân nhóm như sau:

     Thuật toán K-Means có ưu điểm là đơn giản, dễ hiểu và cài đặt. Tuy nhiên, một số hạn chế của K-Means là hiệu quả của thuật toán phụ thuộc vào việc chọn số nhóm K (phải xác định trước) và chi phí cho thực hiện vòng lặp tính toán khoảng cách lớn khi số cụm K và dữ liệu phân cụm lớn.

    3. Triển khai ứng dụng phân cụm với phần mềm WeKa

    Trong ví dụ này, tôi sẽ giới thiệu cách xây dựng một KnowledgeFlow để triển khai kỹ thuật phân cụm dựa trên thuật toán K-Means trên Data Mining Software WeKa.

    Dữ liệu dùng để phân cụm trong ví dụ này là dữ liệu dùng để phân loại khách hàng của ngân hàng (file dữ liệu bank.arff). bank.arff gồm có 11 thuộc tính và 600 khách hàng (instances). Dưới đây là cấu trúc và phân bố dữ liệu của bank.arff

    Các bạn có thể Down file bank.arff tại đây:

    Nhiệm vụ của chúng ta là dùng thuật toán K-Means để phân nhóm các khách hàng vào K nhóm (trong ví dụ này K=5) dựa vào sự tương tự (similar) trên11 thuộc tính của họ.

     Ta xây dựng một KnowledgeFlow trong WeKa như sau:

     

    Thiết lập các tham số cho thuật toán K-Means như số cụm (trong ví dụ này K=5), Cách tính khoảng cách (trong ví dụ này dùng khoảng cách Euclidean),…

     

     Kết quả phân cụm chi tiết như sau:


     PS. The next topic is SOM (Self Organizing Maps) in Clustering Techniques. All comments please send to chucnv@ud.edu.vn.

    Từ khóa đại diện: , , ,
    • Điểm chủ đề: 215
  • 12-02-2010 03:12 PM trả lời

    Re: Thuật toán K-Means với bài toán phân cụm dữ liệu

    Cảm ơn anh Chức rất nhiều.
    Bài viết ngắn gọn nhưng đầy đủ và dễ hiểu về K-Means. Em rất quan tâm đến việc xây dựng một knowledgeFlow trong weka mà chưa làm được. Anh co thể chỉ giúp em qui trình cụ thể để xây dựng KF trong weka được không? hay anh co tài liệu nào hướng dẫn về KF không cho em xin với.
    Cảm ơn anh nhiều,
    Hiền Giang
    • Điểm chủ đề: 50
  • 12-02-2010 05:05 PM trả lời

    • chucnv
    • 10 thành viên năng nổ nhất
    • Tham gia 12-05-2008
    • Điểm 28,320

    Re: Thuật toán K-Means với bài toán phân cụm dữ liệu

    Tài liệu về KnowledgeFlow in Weka em có thể download trên website của Weka: http://www.cs.waikato.ac.nz/ml/weka/index.html
     Qui trình xây dựng KnowledgeFlow để Mining về cơ bản gồm các bước sau:
    1. Nạp dữ liệu (Loading Data): DataSources > Arff Loader
    2. Sử dụng Cross Validation để tách dữ liệu thành 2 phần là Training data và Testing Data
    3. Sử dụng các thuật toán Data Mining để xây dựng Model (Classification or Clustering algorithms):
    4. Đánh giá mô hình (Testing Model):Performance Evaluator
    5. Xem kết quả (Visualization)
    • Điểm chủ đề: 35
  • 04-25-2011 01:51 AM trả lời

    Re: Thuật toán K-Means với bài toán phân cụm dữ liệu

    Cảm ơn về bài viết rất bổ ích của anh.
    Anh có thể cung cấp thêm một số thông tin về thông số seed trong WEKA và Vitualize Tool được không ạ?

     
    Từ khóa đại diện: , , ,
    • Điểm chủ đề: 35
  • 04-25-2011 10:05 AM trả lời

    • chucnv
    • 10 thành viên năng nổ nhất
    • Tham gia 12-05-2008
    • Điểm 28,320

    Re: Thuật toán K-Means với bài toán phân cụm dữ liệu

    K means sẽ khởi tạo tâm (centroid) của các clusters bằng cách chọn ngẫu nhiên các mẫu (instance) trong traning data và giá trị của tham số seed trong K Means đơn giản chỉ là giá trị dùng để khởi tạo bộ sinh số ngẫu nhiên.
    • Điểm chủ đề: 35
  • 06-02-2011 03:49 PM trả lời

    Re: Thuật toán K-Means với bài toán phân cụm dữ liệu

    vay xin hoi anh ky hon mot chut. so seed co the nhan gia trị âm hay bang 0 duoc khong? xin cam on anh
    • Điểm chủ đề: 35
  • 06-03-2011 08:50 PM trả lời

    • chucnv
    • 10 thành viên năng nổ nhất
    • Tham gia 12-05-2008
    • Điểm 28,320

    Re: Thuật toán K-Means với bài toán phân cụm dữ liệu

    Trong kỹ thuật sinh số ngẫu nhiên (random), thông thường cho phép lặp lại các giá trị do bộ ngẫu nhiên sinh ra. Chẳn hạn như hàm rand(value1, value2) sinh ra các số ngẫu nhiên trong khoảng value1 và Value2 và các số này có thể xuất hiện lại nhiều lần.

    Để bộ sinh số ngẫu nhiên không sinh ra các số trùng nhau ta sử dụng tham số seed, tham số seed chính là điểm bắt đầu để sinh số ngẫu nhiên và nó là số tự nhiên.

    • Điểm chủ đề: 35
  • 06-06-2011 06:08 PM trả lời

    Re: Thuật toán K-Means với bài toán phân cụm dữ liệu

    vậy xin hỏi sao em cho seed nhận giá trị âm vẫn chạy được. thuật toán k - mean vẫn gom cụm dữ liệu trong trường hợp này26
    • Điểm chủ đề: 20
  • 06-08-2011 08:11 AM trả lời

    • huechu
    • 75 thành viên năng nổ nhất
    • Tham gia 06-07-2011
    • Điểm 90

    Re: Thuật toán K-Means với bài toán phân cụm dữ liệu

    Em chào thầy!
    Cảm ơn thầy về bài "Thuật toán Kmeans", nó rất hay và bỗ ích. Sau khi đọc bài viết em có câu hỏi muốn nhờ thầy giúp đỡ là:
    Trong SQL 2008 nếu dùng Data warehouse làm cơ sỡ dữ liệu( chứa rấ lớn dữ liệu) thì làm sao mình có thể biểu diễn nó trong hệ trục tọa độ giống như ví dụ của thầy (chỉ có 2 thuộc tính trong hệ trục tọa độ 2 chiều: X,Y), Làm sao để xác định được khoảng cách từ đối tượng đến trọng tâm( centroid)
    Em xin chân thành cảm ơn thầy.
    • Điểm chủ đề: 35
  • 06-08-2011 10:32 AM trả lời

    • chucnv
    • 10 thành viên năng nổ nhất
    • Tham gia 12-05-2008
    • Điểm 28,320

    Re: Thuật toán K-Means với bài toán phân cụm dữ liệu

    Trong ví dụ trên, vì mỗi đối tượng được biểu diễn bởi 2 thuộc tính (2 chiều) nên biểu diễn bằng tọa độ 2 chiều X,Y chỉ để minh họa cho trực quan thôi còn trong thực tế dữ liệu  thường nhiều chiều (mỗi thuộc tính là một chiều) thì việc biểu diễn bằng không gian đa chiều (Multi Dimensional Space) rất phức tạp

    Nếu p và q là 2 điểm trong không gian n chiều (đối tượng được mô tả bởi n thuộc tính) p = (p1p2,..., pn) và q = (q1q2,..., qn). Công thức tính khoảng cách Euclidean giữa p và q như sau:


    • Điểm chủ đề: 35
  • 06-08-2011 04:37 PM trả lời

    • huechu
    • 75 thành viên năng nổ nhất
    • Tham gia 06-07-2011
    • Điểm 90

    Re: Thuật toán K-Means với bài toán phân cụm dữ liệu

    Em cảm ơn thầy về câu trả lời ở bài viết trước, 
     
    Nhưng em có một  thắc mắc là: Làm thế nào mình có thể biểu diễn nó trong trong gian nhiều chiều đó. Làm thế nào mình xác định được thuộc tính A là ở tọa độ này, thuộc tính B là ở tọa độ khác....Mình gán tọa độ đó dựa theo cơ sở nào?
    • Điểm chủ đề: 20
  • 06-08-2011 07:38 PM trả lời

    • chucnv
    • 10 thành viên năng nổ nhất
    • Tham gia 12-05-2008
    • Điểm 28,320

    Re: Thuật toán K-Means với bài toán phân cụm dữ liệu

    Khái niệm về chiều (Dimension) ở đây được hiểu là thuộc tính của đối tượng. Thông thường thi khi số chiều nhiều hơn 3 thì việc biểu diễn trong không gian đa chiều không có ý nghĩa trực quan và rất phức tạp. Một thực tế là số chiều của dữ liệu thường rất lớn (có thể lên đến vài chục thuộc tính). Trong Data Mining Technique, có một số kỹ thuật để hạn chế số chiều của đối tượng (gọi là Feature Selection) nhằm loại bỏ các thuộc tính không ảnh hưởng đến mô hình, cũng như để biểu diễn các đối tượng đa chiều trong không gian 2 hoặc 3 chiều. Tiêu biểu kỹ thuật này là Self Organizing Map - SOM.

    • Điểm chủ đề: 35
  • 09-20-2011 09:08 AM trả lời

    Re: Thuật toán K-Means với bài toán phân cụm dữ liệu

    Em đang làm bài tập về gom nhóm dữ liệu nhưng dùng thuật toán AGNES với Single Adjusted Complete Link, Average Link, Mean Link và Centroid Link. Em chưa hiểu rõ những khái niệm này lắm vì trên lớp cô chỉ cho tụi em làm với Single Link và Complete. Anh có thể giải thích cho em những khái niệm về Single Adjusted Complete Link, Average Link, Mean Link và Centroid Link được ko ạ? Em cám ơn anh rất nhiều.
    • Điểm chủ đề: 35
  • 09-20-2011 10:16 PM trả lời

    • chucnv
    • 10 thành viên năng nổ nhất
    • Tham gia 12-05-2008
    • Điểm 28,320

    Re: Thuật toán K-Means với bài toán phân cụm dữ liệu

    Có rất nhiều cách tính Linkage để chọn tiêu chí phân cụm, trong đó các cách sau đây thường được sử dụng

    Single Linkage: Khoảng cách giữa 2 clusters được tính là khoảng cách giữa 2 đối tượng gần nhau nhất trong 2 clusters đó (minimum distance). Xem hình dưới

    •  Complete Linkage: Khoảng cách giữa 2 clusters được tính là khoảng cách giữa 2 đối tượng xa nhau nhất trong 2 clusters đó (maximum distance).

    •  Average Group: Khoảng cách giữa 2 clusters được tính là khoảng cách trung bình giữa các đối tượng trong 2 clusters đó (average distance).

    • Centroid distance : Khoảng cách giữa 2 clusters được tính là khoảng cách của 2 tâm của 2 clusters đó (Centroid distance).

    • Điểm chủ đề: 50
  • 09-21-2011 12:27 AM trả lời

    Re: Thuật toán K-Means với bài toán phân cụm dữ liệu

    Em cảm ơn anh nhiều. Vậy còn cái Adjusted Complete Link và Mean Link thì sao anh? Với lại trong Weka em có thấy cái "Classes to Clusters Evaluation" nữa, thực tế em chưa hiểu rõ thuật toán này chạy như thế nào? Anh giúp em với
    • Điểm chủ đề: 20
  • 10-13-2011 12:17 AM trả lời

    Re: Thuật toán K-Means với bài toán phân cụm dữ liệu

    Cs phương pháp nào để xác định k là tốt nhất không a ?
    Ví dụ e có 1 bảng dữ liệu và dùng  K-Means để phân cụm.
    Số cụm được chia nằm trong 1 khoảng nào đó ví dụ 1-10..Làm sao để xác định số cụm k là tốt nhất ?
    • Điểm chủ đề: 35
  • 10-13-2011 09:43 AM trả lời

    • chucnv
    • 10 thành viên năng nổ nhất
    • Tham gia 12-05-2008
    • Điểm 28,320

    Re: Thuật toán K-Means với bài toán phân cụm dữ liệu

    Vấn đề chọn giá trị K (số cluster) cho giải thuật K-Means

    Trong giải thuật K-Means, tham số K (số Cluster) phải được xác định trước khi triển khai thuật toán. Việc này này hưởng rất lớn đến kết quả phân cụm của thuật toán.

    Việc chọn tham số K phù hợp với mô hình có thể sử dụng một số phương pháp sau:

    Xem bài viết này:
    http://bis.net.vn/forums/t/1831.aspx (Với R)
    https://www.youtube.com/watch?v=imtvI5CQLm4 (Với Python) 

    Từ khóa đại diện: , ,
    • Điểm chủ đề: 35
  • 10-17-2011 12:07 PM trả lời

    Re: Thuật toán K-Means với bài toán phân cụm dữ liệu

    em đang co một bài tập yêu cầu tìm k tốt nhât,intput la CSDL và k thuoc [1,10]
    uotput: so k *** ..
    em chiệu lun..xin anh và các bạn nào co bản demo hướng dẫn mình với..xin chân thành cảm ơn..
     
       Thà là bị nói ngu một lần,còn hơn ngu mãi mãi..!
    • Điểm chủ đề: 20
  • 10-24-2011 07:17 AM trả lời

    Re: Thuật toán K-Means với bài toán phân cụm dữ liệu

    em chào anh Chức,
     
    em mới tìm hiểu vê DM, search google thì thấy bài viết của anh, rất chi tiết & thú vị.Em  có 1 vài thắc mắc mong anh trả lời cho em được không ạ?
     
    1.  Bước "Nhóm các đối tượng vào nhóm gần nhất", cụ thể là bước 3, em ko rõ vì sao mình có được ma trận G° như vậy ạ?
     
    2. Về chọn k centroid lúc đầu thuật toán, cái này mình chọn số k như thế nào cho hợp lý ạ? vì chắc không phải mình chọn bừa 1 số k ngẫu nhiên ( < số lượng objects) được phải không ạ??
     
    Em cảm ơn anh!
    • Điểm chủ đề: 35
  • 10-24-2011 07:51 AM trả lời

    Re: Thuật toán K-Means với bài toán phân cụm dữ liệu

    Hì hì, đọc đến cuối thì anh đã có trả lời cho thắc mắc thứ 2 :D  Còn thắc mắc đầu tiên em đợi giải thích của anh :D
    • Điểm chủ đề: 20
  • 07-01-2012 05:53 PM trả lời

    Re: Thuật toán K-Means với bài toán phân cụm dữ liệu

    Thầy ơi, thầy có bộ giáo trình của môn khai phá dữ liệu cho em xin tham khảo với
    em cảm ơn thầy : truongvutgg@gmail.com
    • Điểm chủ đề: 20
  • 10-17-2012 10:48 PM trả lời

    • dieptk2
    • 500 thành viên năng nổ nhất
    • Tham gia 10-17-2012
    • Điểm 20

    Re: Thuật toán K-Means với bài toán phân cụm dữ liệu

    Có bảng Go. Theo mình họ làm như sau:
    So sánh tâm khoảng cách (Ở đây là c1,c2) từ các Medicine A,B,C,D (Hiểu đơn giản hơn là so sánh hàng trên với hàng dưới). Nếu khoảng cách là nhỏ hơn thì quy ước là 1, và lớn hơn thì là 0. Từ đó ta phân cụm dữ liệu ra
    • Điểm chủ đề: 20
  • 12-09-2012 12:34 AM trả lời

    Re: Thuật toán K-Means với bài toán phân cụm dữ liệu

    Chào thầy!
    Em đã đọc bài viết của thầy và em thấy nó rất hay và dễ hiểu.
    Khi em thực hiện gom nhóm trên dữ liệu khác với Kmeans thì em gặp một số khó khăn sau:
    Chẳng hạn các thuộc tính của em là:
     @attribute ID numeric
    @attribute Animal
    @attribute I numeric
    @attribute i numeric
    @attribute C numeric
    @attribute c numeric
    @attribute P numeric
    @attribute p numeric
    @attribute M numeric
    @attribute m numeric
    1. Em đang quan tâm không biết có nên bỏ 2 thuộc tính được bôi đậm ở trên để gom nhóm hay không.
    2. Khi đã gom nhóm được rồi làm thế nào để mình biết được cặp thuộc tính nào là cặp thuộc tính phân chia nhóm tốt nhất, khi Visualize cluster assignments?
    Em rất mong được sự giúp đỡ của thầy.
    Kính chúc thầy sức khỏe và thành công! 

     
     
    • Điểm chủ đề: 20
  • 03-22-2013 12:25 PM trả lời

    • HuongBT
    • Không xếp hạng
    • Tham gia 03-22-2013
    • Điểm 35

    Re: Thuật toán K-Means với bài toán phân cụm dữ liệu

    Cảm ơn anh!
    • Điểm chủ đề: 35
  • 04-01-2013 10:47 AM trả lời

    • tutruong
    • 25 thành viên năng nổ nhất
    • Tham gia 03-30-2013
    • Điểm 255

    Re: Thuật toán K-Means với bài toán phân cụm dữ liệu

    Cảm ơn bài viết rất rõ ràng và công phu của Anh Chức, em có chỗ này vẫn chưa rõ lắm, mong anh và các bạn giải thích thêm chút:
    Trong bảng kết quả phân cụm chi tiết: 
     1) Giá trị hiển thị trong mỗi cluster (mỗi cột) là giá trị trung bình (centroid) của cluster đó phải không vậy??
    2)  Còn dòng Clustered Instanse:
           0      5(8%)
          1      7 (12%)
          2      11(18%)
          3      17(28%)
          4      20(33%) 
    Em vẫn chưa hiểu các giá trị này nói lên ý nghĩa gì ạ, mong được mọi người giải thích chút ạ. Chân thành cảm ơn! 
    • Điểm chủ đề: 35
Trang 1 trong số 2 (39 nội dung) 1 2 Tiếp theo >
Powered by Community Server (Commercial Edition), by Telligent Systems