Professional Documents
Culture Documents
Đ TI:
XÂY DỰNG MÔ HÌNH NHẬN DẠNG KHUÔN MẶT BẰNG
THUẬT TOÁN PCA & SVM.
Machine learning là một chủ đề được nhắc đến rất nhiều trong thời gian trở
lại đây bên cạnh trí tuệ nhân tạo, nó được ứng dụng cực kỳ nhiều ở thời điểm hiện
tại trong hầu hết tất cả các lĩnh vực. Trong báo cáo này,chúng ta sẽ cùng tìm hiểu
xem machine learning là gì, các khái niệm cơ bản và cuối cùng là 1 ví dụ đơn giản
cho thấy vì sao nó lại được ứng dụng rộng rãi như vậy ?
CHƯƠNG I: MACHINE LEARNING LÀ GÌ?
Machine learning được xem là một phần quan trọng thuộc lĩnh vực khoa học
dữ liệu. Chúng sử dụng các phương pháp thống kê, thuật toán để phân loại, dự
đoán và khám phá những thông tin quan trọng của dữ liệu. Nhờ những chuỗi thông
tin này, người dùng nhanh chóng đưa ra các quyết định trong các hoạt động kinh
doanh của mình. Vì vậy, Machine learning chính là giải pháp lý tưởng giúp doanh
nghiệp tác động đến chỉ số tăng trưởng doanh thu.
Hiện nay, các nền tảng lớn như: Google, Facebook, Uber,…, đã ứng dụng
học máy làm trọng tâm trong hoạt động chính của họ. Đối với các doanh nghiệp,
Machine learning chính là nhân tố thúc đẩy tính cạnh tranh hiệu quả.
Giải pháp Machine learning có giám sát giúp doanh nghiệp xử lý các vấn đề
thực trên quy mô lớn, như việc phân loại thư rác trong thư mục riêng. Những thuật
toán được sử dụng trong học máy được giám sát là: mạng nơ-ron, hồi quy tuyến
tính, hồi quy logistic, máy vectơ hỗ trợ,…
Những mẫu giọng nói và từ vựng được đưa vào hệ thống để đào tạo mô hình
hoạt động. Hiện tại, hệ thống nhận diện giọng nói được ứng dụng trong các lĩnh
vực sau:
Thông qua sự hỗ trợ của thuật toán, học máy giúp đưa ra quyết định giao dịch
tốt hơn bằng cách phân tích hàng nghìn dữ liệu cùng lúc. Ngoài ra, giải pháp này
rất hiệu quả trong việc tính điểm tín dụng và bảo lãnh phát hành.
Machine learning xuất hiện trong lĩnh vực y học, bào chế thuốc. Những dự
đoán dựa trên học máy giúp các thử nghiệm lâm sàng hiệu quả hơn. Ngoài ra,
Machine learning có khả năng đưa ra các dự đoán bùng phát. Nhiều nhà khoa học
trên thế giới đang sử dụng công nghệ này để dự đoán sự bùng phát dịch bệnh.
Qua bài viết trên, bạn có thể thấy không phải ngẫu nhiên mà Machine
learning lại nhận được sự quan tâm trong những năm gần đây như vậy. Giải pháp
công nghệ này mang lại những tính năng tuyệt vời, hỗ trợ con người bước đến một
tương lai hiện đại và tiến bộ hơn.
PCA của một phân phối Gaussian đa biến (Hình ảnh từ Wikipedia)
Bây giờ, hãy để chúng ta hiểu thuật toán theo cách dễ hiểu hơn:
Giả sử chúng ta đang gặp vấn đề mà chúng ta đang thu thập dữ liệu. Tập dữ
liệu của chúng ta dẫn đến một số biến, nhiều tính năng, tất cả đều ảnh hưởng đến
kết quả theo các khía cạnh khác nhau. Chúng ta có thể chọn loại bỏ một số tính
năng nhất định, nhưng điều đó có nghĩa là mất thông tin và chúng ta không muốn
điều đó, phải không?
Vì vậy, một phương pháp khác để giảm số lượng tính năng (giảm kích
thước dữ liệu) là tạo ra các tính năng mới bằng cách trích xuất thông tin quan trọng
và loại bỏ những thông tin ít quan trọng nhất. Bằng cách này, thông tin của chúng
ta sẽ không bị mất và chúng ta sẽ giảm các tính năng và sẽ có ít cơ hội trang bị quá
mức cho mô hình của chúng ta.
Máy hỗ trợ vector
Hỗ trợ Vector Machine ( SVM ) là một mô hình học máy có giám sát được
sử dụng cho các bài toán phân loại hai nhóm. Sau khi cung cấp mô hình SVM tập
hợp dữ liệu đào tạo được gắn nhãn cho từng danh mục, họ có thể phân loại dữ liệu
thử nghiệm mới.
Phân loại SVM (Hình ảnh từ Wikipedia)
SVM phân loại dữ liệu dựa trên mặt phẳng tối đa hóa lề. Ranh giới quyết
định SVM là thẳng. SVM là một thuật toán thực sự tốt để phân loại hình ảnh. Kết
quả thử nghiệm cho thấy SVM đạt được độ chính xác tìm kiếm cao hơn đáng kể so
với các lược đồ sàng lọc truy vấn truyền thống chỉ sau ba đến bốn vòng phản hồi
về mức độ liên quan. Điều này cũng đúng đối với các hệ thống phân đoạn hình
ảnh, bao gồm cả những hệ thống sử dụng SVM phiên bản sửa đổi sử dụng cách
tiếp cận đặc quyền.
Nhận dạng khuôn mặt
Khuôn mặt là dữ liệu có kích thước cao bao gồm một số pixel. Dữ liệu ở độ
lớn nhiều chiều khó xử lý và không thể trực quan hóa bằng các kỹ thuật đơn giản
như phân tán cho dữ liệu 2 chiều.
Những gì chúng ta sẽ làm là sử dụng PCA để giảm kích thước cao của dữ
liệu và sau đó đưa nó vào bộ phân loại SVM để phân loại ảnh.
Hãy để chúng ta chuyển sang phân đoạn mã hóa!
Ví dụ mã sau đây được lấy từ tài liệu sklearn về eigenfaces. Chúng ta sẽ đi
qua từng bước mã để hiểu được sự phức tạp và kết quả của nó.
Nhập các thư viện và mô-đun có liên quan
Trước hết, chúng ta sẽ nhập các thư viện và mô-đun cần thiết. Một cuộc thảo
luận sâu về lý do tại sao chúng ta nhập khẩu chúng sẽ theo sau khi nhu cầu của
chúng phát sinh.
import pylab as pl
import numpy as np
from matplotlib import pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.datasets import fetch_lfw_people
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.decomposition import PCA as RandomizedPCA
from sklearn.svm import SVC
Tiếp theo, chúng ta sẽ tải dữ liệu vào đĩa và tải nó dưới dạng mảng NumPy
bằng cách sử dụng fetch_lfw_people từ sklearn.datasets :
n_samples, h, w = lfw_people.images.shape
np.random.seed(42)
Chúng ta sẽ sử dụng các mảng dữ liệu trong lfw_people utils.Bunch trực
tiếp và lưu trữ nó trong X. Chúng ta sẽ sử dụng dữ liệu này trong quá trình xử lý
tiếp theo.
X = lfw_people.data
n_features = X.shape[1]
y = lfw_people.target
target_names = lfw_people.target_names
n_classes = target_names.shape[0]
đích là một mảng NumPy 1288x1 chứa các giá trị 0–6 của tên mà 1288 hình
ảnh tương ứng. Vì vậy, nếu id 0 có giá trị đích là 5, nó sẽ tham chiếu đến "Hugo
Chavez", như được mô tả trong target_names :
Do đó, y là đích ở dạng số, target_names là bất kỳ mục tiêu / nhãn nào theo tên
và n_classes là biến lưu trữ số lớp mà chúng ta có, trong trường hợp của chúng ta,
chúng ta có 7 :
1. Ariel Sharon
2. Colin Powell
3. Donald Rumsfeld
4. Ông George W. Bush
5. Gerhard Schröder
6. Hugo Chavez
7. Tony Blair
Tên đích từ Tập dữ liệu (Hình ảnh từ Wikipedia - Soure [1], [2], [3], [4], [5], [6],
[7])
print("Total dataset size:")
print("n_samples: %d", n_samples)
print("n_features: %d", n_features)
print("n_classes: %d", n_classes)
n_components = 50
pca = RandomizedPCA(n_components=n_components, whiten=True).fit(X_train)
Bây giờ chúng ta sẽ định hình lại các thành phần PCA của chúng ta và xác
định eigenfaces, đó là tên được đặt cho một tập hợp các vector riêng khi được sử
dụng trong bài toán computer vision của nhận dạng khuôn mặt của con người:
X_train_pca = pca.transform(X_train)
X_test_pca = pca.transform(X_test)
Sau khi dự đoán được thực hiện, chúng ta hãy in Báo cáo phân loại sẽ hiển
thị độ chính xác , thu hồi , điểm F1 và điểm hỗ trợ cho mô hình. Điều này cung
cấp trực giác sâu hơn về hành vi của trình phân loại.
Âm mưu
Cuối cùng, chúng ta sẽ vẽ cả chân dung của con người cũng như các nét đặc
trưng! Chúng ta sẽ xác định 2 chức năng: tiêu đề để vẽ kết quả của dự đoán trên
một phần của tập thử nghiệm và plot_gallery để đánh giá dự đoán bằng cách vẽ
biểu đồ của chúng:
def title(y_pred, y_test, target_names, i):
pred_name = target_names[y_pred[i]].rsplit(' ', 1)[-1]
true_name = target_names[y_test[i]].rsplit(' ', 1)[-1]
return 'predicted: %s\ntrue: %s' % (pred_name, true_name)
def plot_gallery(images, titles, h, w, n_row=3, n_col=4):
"""Helper function to plot a gallery of portraits"""
plt.figure(figsize=(1.8 * n_col, 2.4 * n_row))
plt.subplots_adjust(bottom=0, left=.01, right=.99, top=.90, hspace=.35)
for i in range(n_row * n_col):
plt.subplot(n_row, n_col, i + 1)
plt.imshow(images[i].reshape((h, w)), cmap=plt.cm.gray)
plt.title(titles[i], size=12)
plt.xticks(())
plt.yticks(())
prediction_titles = [title(y_pred, y_test, target_names, i)
for i in range(y_pred.shape[0])]
plot_gallery(X_test, prediction_titles, h, w)
eigenface_titles = ["eigenface %d" % i for i in range(eigenfaces.shape[0])]
plot_gallery(eigenfaces, eigenface_titles, h, w)
plt.show()
from sklearn.metrics import accuracy_score
score = accuracy_score(y_test, y_pred)
print(score)