You are on page 1of 25

TRƯỜNG ĐẠI HỌC ĐIỆN LỰC

KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO CHUYÊN ĐỀ HỌC PHẦN


NHẬP MÔN HỌC MÁY
ĐỀ TÀI:
ỨNG DỤNG THUẬT TOÁN PHÂN CỤM KMEANS CLUSTERING ĐỂ
DỰ ĐOÁN CHẤT LƯỢNG CỦA RƯỢU VANG ĐỎ VÀ RATING CỦA MÌ
RAMEN

Sinh viên thực hiện : PHẠM NGỌC VŨ


: DƯƠNG PHƯƠNG TRINH

Giảng viên hướng dẫn : PHẠM THỊ KIM DUNG


Ngành : CÔNG NGHỆ THÔNG TIN
Chuyên ngành : THƯƠNG MẠI ĐIỆN TỬ
Lớp : D13HTTMDT1
Khóa : 2018-2023

Hà Nội, tháng 12 năm 2020


PHIẾU CHẤM ĐIỂM

Sinh viên thực hiện

Họ và tên Chữ ký Ghi Chú

Phạm Ngọc Vũ

Dương Phương Trinh

Giảng viên chấm

Họ và tên Chữ ký Ghi chú

Giảng viên chấm 1

Giảng viên chấm 2


MỤC LỤC

CHƯƠNG 1. TỔNG QUAN VỀ HỌC MÁY.........................................................2


1.1. Khái niệm về học máy:....................................................................................2
1.2. Phân nhóm các thuật toán học máy..................................................................2
1.2.1 Học có giám sát (Supervised Learning)......................................................2
1.2.2. Học phi giám sát (Unsupervised Learning)-UL........................................3
1.2.3 Học tăng cường (reinforcement learning)...................................................5
1.2.4 Học bán giám sát (Semi-Supervised Learning)..........................................5
1.3. Ứng dụng của học máy:...................................................................................6
CHƯƠNG 2 THUẬT TOÁN K-MEANS CLUSTERING TRONG BÀI TOÁN
PHÂN CỤM..............................................................................................................7
2.1 Tổng quan về thuật toán K-Means Clustering..................................................7
2.2. Thuật toán K-Means Clustering:......................................................................8
2.2.1. Mô hình toán học:......................................................................................8
2.2.2. Độ chính xác của thuật toán:......................................................................9
2.2.3. Nghiệm của thuật toán K-Means Clustering:............................................9
2.2.4. Tóm tắt thuật toán:...................................................................................10
CHƯƠNG 3 ỨNG DỤNG THUẬT TOÁN K-MEANS CLUSTERING..........11
3.1. Dữ liệu wine_red_quality:.............................................................................11
3.1.1. Phát biểu bài toán:....................................................................................11
3.1.2. Yêu cầu:...................................................................................................11
3.1.3. Bộ dữ liệu:...............................................................................................11
3.1.4. Tiến hành phân cụm.................................................................................12
3.2. Dữ liệu ramen_rating:....................................................................................15
3.2.1. Phát biểu bài toán:....................................................................................15
3.1.2. Yêu cầu:...................................................................................................15
3.1.3. Bộ dữ liệu:...............................................................................................16
3.1.4. Tiến hành phân cụm:................................................................................16
TÀI LIỆU THAM KHẢO.....................................................................................22
LỜI MỞ ĐẦU
Công nghệ ngày càng phổ biến và không ai có thể phủ nhận được tầm quan
trọng và những hiệu quả mà nó đem lại cho cuộc sống chúng ta. Bất kỳ trong lĩnh
vực nào, sự góp mặt của trí tuệ nhân tạo sẽ giúp con người làm việc và hoàn thành
tốt công việc hơn. Và gần đây, một thuật ngữ “machine learning” rất được nhiều
người quan tâm.Thay vì phải code phần mềm với cách thức thủ công theo một bộ
hướng dẫn cụ thể nhằm hoàn thành một nhiệm vụ đề ra thì máy sẽ tự “học hỏi”
bằng cách sử dụng một lượng lớn dữ liệu cùng những thuật toán cho phép nó thực
hiện các tác vụ.
Đây là một lĩnh vực khoa học tuy không mới, nhưng cho thấy lĩnh vực trí tuệ
nhân tạo đang ngày càng phát triển và có thể tiến xa hơn trong tương lai. Đồng
thời, thời điểm này nó được xem là một lĩnh vực “nóng” và dành rất nhiều mối
quan tâm để phát triển nó một cách mạnh mẽ, bùng nổ hơn.
Hiện nay, việc quan tâm machine learning càng ngày càng tăng lên là vì nhờ
có machine learning giúp gia tăng dung lượng lưu trữ các loại dữ liệu sẵn, việc xử
lý tính toán có chi phí thấp và hiệu quả hơn rất nhiều.
Những điều trên được hiểu là nó có thể thực hiện tự động, nhanh chóng để
tạo ra những mô hình cho phép phân tích các dữ liệu có quy mô lớn hơn và phức
tạp hơn đồng thời đưa ra những kết quả một cách nhanh và chính xác hơn.
Chính sự hiệu quả trong công việc và các lợi ích vượt bậc mà nó đem lại cho chúng
ta khiến machine learning ngày càng được chú trọng và quan tâm nhiều hơn. Vì
vậy chúng em đã chọn đề tài ”Ứng dụng thuật toán K-Means Clustering để dự đoán
chất lượng của rượu vang đỏ và điểm rating của mì ramen”để làm báo cáo.
Chúng em xin chân thành gửi lời cảm ơn tới các thầy cô giáo trong Trường
Đại học Điện Lực nói chung và các thầy cô giáo trong Khoa Công nghệ thông tin
nói riêng đã tận tình giảng dạy, truyền đạt cho chúng em những kiến thức cũng như
kinh nghiệm quý báu trong suốt quá trình học. Đặc biệt, em gửi lời cảm ơn đến Cô
Phạm Thị Kim Dung đã tận tình theo sát giúp đỡ, trực tiếp chỉ bảo, hướng dẫn
trong suốt quá trình nghiên cứu và học tập của chúng em.

1
CHƯƠNG 1. TỔNG QUAN VỀ HỌC MÁY

1.1. Khái niệm về học máy:


Học máy (Machine learning) là một lĩnh vực con của Trí tuệ nhân
tạo(Artificial Intelligence) sử dụng các thuật toán cho phép máy tính có thể học từ
dữ liệu để thực hiện các công việc thay vì được lập trình một cách rõ ràng, cung
cấp cho hệ thống khả năng tự động học hỏi và cải thiện hiệu suất, độ chính xác dựa
trên những kinh nghiệm từ dữ liệu đầu vào. Học máy tập trung vào việc phát triển
các phần mềm, chương trình máy tính có thể truy cập vào dữ liệu và tận dụng
nguồn dữ liệu đó để tự học.
Học máy vẫn đòi hỏi sự đánh giá của con người trong việc tìm hiểu dữ liệu
cơ sở và lựa chọn các kĩ thuật phù hợp để phân tích dữ liệu. Đồng thời, trước khi sử
dụng, dữ liệu phải sạch, không có sai lệch và không có dữ liệu giả.
Các mô hình học máy yêu cầu lượng dữ liệu đủ lớn để "huấn luyện" và đánh
giá mô hình. Trước đây, các thuật toán học máy thiếu quyền truy cập vào một
lượng lớn dữ liệu cần thiết để mô hình hóa các mối quan hệ giữa các dữ liệu. Sự
tăng trưởng trong dữ liệu lớn (big data) đã cung cấp các thuật toán học máy với đủ
dữ liệu để cải thiện độ chính xác của mô hình và dự đoán.

1.2. Phân nhóm các thuật toán học máy

1.2.1 Học có giám sát (Supervised Learning)


Là phương pháp sử dụng những dữ liệu đã được gán nhãn từ trước để suy
luận ra quan hệ giữa đầu vào và đầu ra. Các dữ liệu này được gọi là dữ liệu huấn
luyện và chúng là cặp các đầu vào-đầu ra. Học có giám sát sẽ xem xét các tập huấn
luyện này để từ đó có thể đưa ra dự đoán đầu ra cho 1 đầu vào mới chưa gặp bao
giờ. Ví dụ dự đoán giá nhà, phân loại email. Các mô hình như mạng Nơ-ron, SVM,

2
CNN,…

Hình 1. 1. Mô hình học có giám sát

Supervised Learning Là thuât toán dự đoán đầu ra (outcome) của một dữ liệu
mới (new input) dựa trên cặp (input, outcome) đã biết tư trước. Cặp dữ liệu này còn
đươc gọi là data, label tức dữ liệu, nhãn. Supervised Learning Là nhóm phổ biến
nhất trong các thuật toán Machine learning

1.2.2. Học phi giám sát (Unsupervised Learning)-UL


Khác với học có giám sát, học phi giám sát sử dụng những dữ liệu chưa được
gán nhãn từ trước để suy luận. Phương pháp này thường được sử dụng để tìm cấu
trúc của tập dữ liệu. Tuy nhiên lại không có phương pháp đánh giá được cấu trúc
tìm ra được là đúng hay sai. Ví dụ như phân cụm dữ liệu, triết xuất thành phần

3
chính của một chất nào đó. K-mean Ứng dụng phổ biến nhất của học không giám
sát là gom cụm (cluster)

Hình 1. 2. Mô hình học không giám sát

Trong thuật toán này, chúng ta không biết được dữ liệu đầu ra hay nhãn mà
chỉ có dữ liệu đầu vào. Thuật toán Học không giám sát dựa vào cấu trúc của dữ liệu
để thực hiện một công việc nào đó, ví dụ như phân nhóm hoặc giảm số chiều của
dữ liệu để thuận tiện trong việc lưu trữ và tính toán.
Một cách toán học, Học không giám sát là khi chúng ta chỉ có dữ liệu vào X
mà không biết nhãn Y tương ứng.
Sự khác nhau giữa học có giám sát và học không giám sát:

4
Hình 1.3: Sự khác biệt giữa 2 mô hình SL và UL

Học có giám sát: Là cách huấn luyện một mô hình trong đó dữ liệu học có
đầu vào và đầu ra tương ứng đầu vào đó. Mô hình được huấn luyện bằng cách giảm
thiểu sai số lỗi (loss) của các dự đoán tại các vòng lặp huấn luyện. Sau quá trình
huấn luyện. mô hình sẽ có khả năng đưa ra dự đoán về đầu ra với một đầu vào mới
gặp (không có trong dữ liệu học). Nếu không gian đầu ra được biểu diễn dứới dạng
rời rạc, ta gọi đó là bài toán phân loại (classification). Nếu không gian đầu ra được
biểu diễn dưới dạng liên tục, ta gọi đó là bài toán hồi quy (regression).

Học không giám sát: Là cách huấn luyện một mô hình trong đó dữ liệu học
chỉ bao gồm đầu vào mà không có đầu ra. Mô hình sẽ được huấn luyện cách để tìm
cấu trúc hoặc mối quan hệ giữa các đầu vào. Một trong những phương pháp học
không giám sát quan trọng nhất là phân cụm (clustering): Tạo các cụm khác nhau
với mỗi cụm biểu diễn một đặc trưng nào đó của dữ liệu và phân các đầu vào mới
vào các cụm theo các đặc trưng của đầu vào đó. Các phương pháp học không giám
sát khác có thể kể đến như: phát hiện điểm bất thường (anomaly detection),
Singular-value decomposition, …

1.2.3 Học tăng cường (reinforcement learning)


Phương pháp học tăng cường tập trung vào việc làm sao để cho 1 tác tử trong
môi trường có thế hành động sao cho lấy được phần thưởng nhiều nhất có thể.
Khác với học có giám sát nó không có cặp dữ liệu gán nhãn trước làm đầu vào và
cũng không có đánh giá các hành động là đúng hay sai.

1.2.4 Học bán giám sát (Semi-Supervised Learning)


Các bài toán khi chúng ta có một lượng lớn dữ liệu X nhưng chỉ một phần
trong chúng được gán nhãn được gọi là Semi-Supervised Learning. Những bài toán

5
thuộc nhóm này nằm giữa hai nhóm được nêu bên trên. Một ví dụ điển hình của
nhóm này là chỉ có một phần ảnh hoặc văn bản được gán nhãn (ví dụ bức ảnh về
người, động vật hoặc các văn bản khoa học, chính trị) và phần lớn các bức ảnh/văn
bản khác chưa được gán nhãn được thu thập từ internet.
Thực tế cho thấy rất nhiều các bài toán Machine Learning thuộc vào nhóm
này vì việc thu thập dữ liệu có nhãn tốn rất nhiều thời gian và có chi phí cao. Rất
nhiều loại dữ liệu thậm chí cần phải có chuyên gia mới gán nhãn được (ảnh y học
chẳng hạn). Ngược lại, dữ liệu chưa có nhãn có thể được thu thập với chi phí thấp
từ internet.

1.3. Ứng dụng của học máy:


Nhiều hoạt động hàng ngày của chúng ta được trợ giúp bởi các thuật toán
machine learning, bao gồm:
 Trong y tế: xác định bệnh lý của người bệnh mới dựa trên dữ liệu lịch sử của
các bệnh nhân có cùng bệnh lý có cùng các đặc điểm đã được chữa khỏi
trước đây, hay xác định loại thuốc phù hợp
 Trong lĩnh vực ngân hàng: xác định khả năng khách hàng chậm trả các
khoản vay hoặc rủi ro tín dụng do nợ xấu dựa trên phân tích Credit score; xác
định xem liệu các giao dịch có hành vi phạm tội, lừa đảo hay không.
 Trong giáo dục: phân loại các học sinh theo hoàn cảnh, học lực để xem xem
cần hỗ trợ gì cho những học sinh ví dụ như hoàn cảnh sống khó khăn nhưng
học lực lại tốt.
 Trong thương mại điện tử: phân loại khách hàng theo sở thích cụ thể để hỗ
trợ personalized marketing hay xây dựng hệ thống khuyến nghị, dựa trên dữ
liệu từ website, social media.

6
 Trong kinh tế nói chung: giúp dự báo các sự kiện kinh tế trong tương lai, dự
báo tình hình thời tiết trong nông nghiệp, xác định xu hướng thị trường
chứng khoán để lên kế hoạch đầu tư thích hợp.

7
CHƯƠNG 2 THUẬT TOÁN K-MEANS CLUSTERING TRONG BÀI TOÁN
PHÂN CỤM

2.1 Tổng quan về thuật toán K-Means Clustering


Với thuật toán K-Means Clustering, chúng ta không biết nhãn (label) của
từng điểm dữ liệu. Mục đích là làm thể nào để phân dữ liệu thành các cụm (cluster)
khác nhau sao cho dữ liệu trong cùng một cụm có tính chất giống nhau. Ý tưởng
đơn giản nhất về cluster (cụm) là tập hợp các điểm ở gần nhau trong một không
gian nào đó (không gian này có thể có rất nhiều chiều trong trường hợp thông tin về
một điểm dữ liệu là rất lớn). Hình bên dưới là một ví dụ về 3 cụm dữ liệu (từ giờ tôi
sẽ viết gọn là cluster).

Hình 2.1: Bài toán với 3 clusters

8
Giả sử mỗi cluster có một điểm đại diện (center) màu vàng. Và những điểm
xung quanh mỗi center thuộc vào cùng nhóm với center đó. Một cách đơn giản
nhất, xét một điểm bất kỳ, ta xét xem điểm đó gần với center nào nhất thì nó thuộc
về cùng nhóm với center đó.

2.2. Thuật toán K-Means Clustering:

2.2.1. Mô hình toán học:

Ta gọi điểm tại vị trí trung bình của tất cả các điểm dữ liệu trong một cụm
là trung tâm cụm. Như vậy, nếu có K cụm thì sẽ có K trung tâm cụm và mỗi trung
tâm cụm sẽ nằm gần các điểm dữ liệu trong cụm tương ứng hơn các trung tâm cụm
khác. Trong hình dưới đây, K = 3 và ta có 3 trung tâm cụm là các điểm màu vàng.

Hình 2.2: Mô hình dữ liệu được phân cụm

9
Để phân cụm dữ liệu bằng K-Means Clustering, trước hết ta chọn K là số
cụm để phân chia và chọn ngẫu nhiên K trong số m dữ liệu ban đầu làm trung tâm
cụm μ1, μ2, …, μK. Sau đó, với điểm dữ liệu x(i) ta sẽ gán nó cho cụm c(i) là cụm
có trung tâm cụm gần nó nhất.

Khi tất cả các điểm dữ liệu đã được gán về các cụm, bước tiếp theo là tính toán lại
vị trí các trung tâm cụm bằng trung bình tọa độ các điểm dữ liệu trong cụm đó.

với k1, k2, …, kn là chỉ số các dữ liệu thuộc cụm thứ k. Các bước trên được lặp lại
cho tới khi vị trí các trung tâm cụm không đổi sau một bước lặp nào đó.

2.2.2. Độ chính xác của thuật toán:

Hàm mất mát của thuật toán K-Means Clustering đặc trưng cho độ chính xác
của nó sẽ càng lớn khi khoảng cách từ mỗi điểm dữ liệu tới trung tâm cụm càng
lớn.

2.2.3. Nghiệm của thuật toán K-Means Clustering:

Trong các bước của thuật toán, thực chất bước gán các điểm dữ liệu về trung
tâm cụm gần nhất và bước thay đổi trung tâm cụm về vị trí trung bình của các điểm
dữ liệu trong cụm đều nhằm mục đích giảm hàm mất mát. Thuật toán kết thúc khi
vị trí các trung tâm cụm không đổi sau một bước lặp nào đó. Khi đó hàm mất mát
đạt giá trị nhỏ nhất.

10
Khi K càng nhỏ so với m, thuật toán càng dễ đi đến kết quả chưa phải tối ưu.
Điều này phụ thuộc vào cách chọn K trung tâm cụm ban đầu.

Để khắc phục điều này, ta cần lặp lại thuật toán nhiều lần và chọn phương án
có giá trị hàm mất mát nhỏ nhất.

2.2.4. Tóm tắt thuật toán:


Đầu vào: Dữ liệu XX và số lượng cluster cần tìm KK.
Đầu ra: Các center MM và label vector cho từng điểm dữ liệu YY.

1. Chọn KK điểm bất kỳ làm các center ban đầu.


2. Phân mỗi điểm dữ liệu vào cluster có center gần nó nhất.
3. Nếu việc gán dữ liệu vào từng cluster ở bước 2 không thay đổi so với
vòng lặp trước nó thì ta dừng thuật toán.
4. Cập nhật center cho từng cluster bằng cách lấy trung bình cộng của tất
các các điểm dữ liệu đã được gán vào cluster đó sau bước 2.
5. Quay lại bước 2.

11
CHƯƠNG 3 ỨNG DỤNG THUẬT TOÁN K-MEANS CLUSTERING

3.1. Dữ liệu wine_red_quality:

3.1.1. Phát biểu bài toán:


Bài toán phân loại chất lượng của rượu vang đỏ đưa ra các tập dự liệu là các
thông số của từng mẫu rượu vang đỏ để phân loại chất lượng của chúng
- Giá trị input: Thông tin, đặc tính của một mẫu rượu
- Giá trị output: tên của cụm chúng được phân vào

3.1.2. Yêu cầu:


- Lấy dữ liệu mô tả đặc tính rượu
- Trích chọn đặc trưng từ tập dữ liệu lấy được
- Xử lý, làm sạch dữ liệu
- Tiến hành phân cụm
- Dữ liệu hóa đồ thị

3.1.3. Bộ dữ liệu:
Nguồn: https://www.kaggle.com/uciml/red-wine-quality-cortez-et-al-2009
Bộ dữ liệu bao gồm các đặc trưng là các nồng độ các thành phần ảnh hưởng
đển chất lượng của rượu, bao gồm:
- fixed acidity: độ acid cố định
- volatile acidity: độ acid dễ bay hơi
- citric acid: nồng độ citric acid – được dùng để thêm độ tươi và hương vị
cho rượu vang
- residual sugar: lượng đường còn dư lại sau khi dừng lên men, thường lớn
hơn 1 gr/liter
- chlorides: độ mặn của rượu
- free sulfur dioxide: lượng chất SO2 còn tồn tại ở trạng thái cân bằng giữa
phân tử SO2 và bisulfite ion, nó ngăn cản vi sinh vật và sự oxi hóa ở rượu
- total sulfur dioxide: số lượng các dạng S02 tự do và ràng buộc; ở nồng độ
thấp, SO2 hầu như không thể phát hiện được trong rượu vang, nhưng ở nồng độ
SO2 tự do trên 50 ppm, SO2 trở nên rõ ràng trong mũi và mùi vị của rượu.
- density: tỉ trọng của nước
- pH: là thước đo của tính axit và bazo trên thang điểm 0 -14
12
- sulphates: một chất phụ gia rượu vang có thể góp phần vào mức khí sulfur
dioxide (S02), hoạt động như một chất chống vi khuẩn và chất chống oxy hóa
- alcohol: nồng độ cồn
- quality: chất lượng (là kết quả của một số mẫu rượu được đánh giá dựa trên
vị giác của người thử rượu, tuy nhiên bài toán phân cụm không cần đến đặc trưng
này)

Hình 3.1: Dữ liệu cụ thể

3.1.4. Tiến hành phân cụm


IMPORT THƯ VIỆN:
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA

ĐỌC FILE DỮ LIỆU CSV:


df = pd.read_csv('winequality-red.csv')

BỎ NHỮNG DỮ LIỆU BỊ LẶP


13
df = df.drop_duplicates()

CHUẨN HÓA DỮ LIỆU (MAX-MIN NORMALIZE):


def max_min_normalize(column):
    maxx = max(column)
    minn = min(column)
    normalized_column = []
    for value in column:
        normalized_value = (value - minn)/(maxx - minn)
        normalized_column.append(normalized_value)  
    return normalized_column

for column in df.columns:
    try:
        df[column] = max_min_normalize(df[column])
    except ZeroDivisionError:
        df[column] = 0

TẠO MODEL PHÂN CỤM DỮ LIỆU VÀ BIỂU DIỄN DỮ LIỆU:


df = PCA(2).fit_transform(df)

clr = KMeans(n_clusters = 10,init = 'k-means++',random_state = 6)
clr.fit(df)
labels = clr.predict(df)
centroid_labels = clr.predict(clr.cluster_centers_)

predicted_df = pd.DataFrame(data = df,columns = ['PCA1','PCA2'])
predicted_df['Cluster'] = labels

centroid_df = pd.DataFrame(data = clr.cluster_centers_,columns = ['PCA1','PCA2'])
centroid_df['Cluster'] = centroid_labels

plt.scatter(predicted_df['PCA1'],predicted_df['PCA2'],c = labels,alpha = 0.5)
plt.scatter(centroid_df['PCA1'],centroid_df['PCA2'],marker = 'D',s = 100,c = cent
roid_labels)
plt.show()

14
Hình 3.2: Hình ảnh dữ liệu sau khi được phân cụm trên đồ thị

3.2. Dữ liệu ramen_rating:

3.2.1. Phát biểu bài toán:


Bài toán phân loại chất lượng mì ramen dựa trên bộ dữ liệu có những thông
tin được cho là ảnh hưởng đển điểm rating của món đó
- Giá trị input: Thông tin cụ thể của một sản phẩm mì ramen
- Giá trị output: tên của cụm chúng được phân vào

3.1.2. Yêu cầu:


- Lấy dữ liệu của mì ramen
- Trích chọn đặc trưng từ tập dữ liệu lấy được
- Xử lý, làm sạch dữ liệu
- Tiến hành phân cụm
- Dữ liệu hóa đồ thị

15
3.1.3. Bộ dữ liệu:
Nguồn: https://www.kaggle.com/residentmario/ramen-ratings
Bộ dữ liệu bao gồm các đặc trưng là các thông tin về mì ramen:
- Review: số thứ tự review
- Brand: Hãng sản xuất mì ramen
- Variety: Mô tả chung về mì ramen
- Style: Kiểu phục vụ (được đựng trong bát, khay, …)
- Country: quốc gia mà món đó được bán
- Star: Số sao mà món đó đạt được
- Top Ten: Điểm rating trên thang điểm 10 của món mì đó (tuy nhiên bài
toán phân cụm nên đặc trưng này bị lược bỏ)

Hình 3.4: Dữ liệu cụ thể

3.1.4. Tiến hành phân cụm:


IMPORT THƯ VIỆN
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
ĐỌC FILE DỮ LIỆU CSV

16
rating = pd.read_csv('ramen-ratings.csv')

LÀM SẠCH DỮ LIỆU


- Bỏ những đặc trưng không ảnh hưởng đến kết quả
- Bỏ những mẫu dữ liệu bị lặp lại hai lần
- Bỏ những dữ liệu có giá trị NaN ở cột NaN
rating = rating.drop(['Review #','Top Ten'],axis = 1)
rating = rating.drop_duplicates()
rating = rating.drop(rating[rating['Style'].isna()].index)

- Đặc trưng Stars có những giá trị ‘Unrated’ và vì giá trị Stars có ảnh hưởng lớn
đến kết quả phân cụm nên thay vì bỏ, gán cho những dữ liệu đó giá trị trung bình
Stars của toàn bộ dữ liệu
def tinh_trung_binh_star(column):
    total = 0
    for value in column:
        total += float(value)
    average = total/len(column)
    return average
star_average = tinh_trung_binh_star(rating['Stars'].drop(rating[rating['Stars'] =
= 'Unrated'].index))
rating['Stars'] = rating['Stars'].apply(lambda x: star_average if x == 'Unrated' 
else x)
rating['Stars'] = rating['Stars'].astype(float)

BIẾN NHỮNG ĐẶC TRƯNG PHÂN LOẠI VỀ DẠNG SỐ


rating = pd.get_dummies(rating,columns = ['Brand','Variety','Style','Country'])

CHUẨN HÓA DỮ LIỆU (CHUẨN HÓA MAX-MIN):


def max_min_normalize(column):
    maxx = max(column)
    minn = min(column)
    normalized_column = []
    for value in column:
        normalized_value = (value - minn)/(maxx - minn)
        normalized_column.append(normalized_value)  
    return normalized_column
for column in rating.columns:
    try:
        rating[column] = max_min_normalize(rating[column])

17
    except ZeroDivisionError:
        rating[column] = 0

TIẾN HÀNH PHÂN CỤM VÀ BIỂU DIỄN DỮ LIỆU ĐƯỢC PHÂN CỤM (2D):
rating = PCA(2).fit_transform(rating)
df = pd.DataFrame(data = rating,columns = ['PCA1','PCA2'])
print('-----Du lieu sau khi normalize-----\n',df.head(),'\n')
#Tao model
clr = KMeans(n_clusters = 10,init = 'k-means++',random_state = 6)
clr.fit(rating)
cluster_predicted = clr.predict(rating)
df['Cluster'] = cluster_predicted
print('-----Ket qua phan cum-----\n',df.head(),'\n')
print('-----Centroid-------\n',clr.cluster_centers_,'\n')

centroid_labels = clr.predict(clr.cluster_centers_)
centroid_df = pd.DataFrame(data = clr.cluster_centers_,columns = ['PCA1','PCA2'])
centroid_df['Cluster'] = centroid_labels
print('-----Ket qua phan cum cho centroid-----\n',centroid_df,'\n')

plt.scatter(df['PCA1'],df['PCA2'],c = cluster_predicted,s = 10)
plt.scatter(centroid_df['PCA1'],centroid_df['PCA2'],marker = 'D',s = 100,c = cent
roid_labels)
plt.title('K-means Clustering 2D')
plt.show()

18
Hình 3.5: Hình ảnh dữ liệu sau khi được phân cụm trên đồ thị 2D

TIẾN HÀNH PHÂN CỤM VÀ BIỂU DIỄN DỮ LIỆU ĐƯỢC PHÂN CỤM (3D):
rating = PCA(3).fit_transform(rating)
df = pd.DataFrame(data = rating,columns = ['PCA1','PCA2','PCA3'])
print('-----Du lieu sau khi normalize-----\n',df.head(),'\n')
#Tao model
clr = KMeans(n_clusters = 10,init = 'k-means++',random_state = 6)
clr.fit(rating)
cluster_predicted = clr.predict(rating)
df['Cluster'] = cluster_predicted
print('-----Ket qua phan cum-----\n',df.head(),'\n')
print('-----Centroid-------\n',clr.cluster_centers_,'\n')

centroid_labels = clr.predict(clr.cluster_centers_)
centroid_df = pd.DataFrame(data = clr.cluster_centers_,columns = ['PCA1','PCA2','
PCA3'])
centroid_df['Cluster'] = centroid_labels
print('-----Ket qua phan cum cho centroid-----\n',centroid_df,'\n')

19
#Data Visualize
ax = plt.axes(projection = '3d')
ax.scatter3D(df['PCA1'],df['PCA2'],df['PCA3'],c = cluster_predicted)
ax.scatter3D(centroid_df['PCA1'],centroid_df['PCA2'],centroid_df['PCA3'],marker = 
'D',s = 50,c = centroid_labels)
plt.title('Kmean Clustering 3D')
plt.show()

Hình 3.6: Hình ảnh dữ liệu sau khi được phân cụm trên đồ thị 3D

20
TÀI LIỆU THAM KHẢO

[1] Trang web: machinelearningcoban.com

21

You might also like