Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 47

Feature Extraction

and Preprocessing
Extracting features from categorical
variables
Các biến phân loại thường được mã hóa bằng cách sử dụng mã hóa One – hot, hay
One – of - k, trong đó biến giải thích được mã hóa bằng một tính năng nhị phân cho
mỗi giá trị có thể của biến.

from sklearn.feature_extraction import DictVectorizer


onehot_encoder = DictVectorizer()
instances = [
{'city': 'New York'},
{'city': 'San Francisco'},
{'city': 'Chapel Hill'} ]
print onehot_encoder.fit_transform(instances).toarray()
[[ 0. 1. 0.] [ 0. 0. 1.] [ 1. 0. 0.]]
Bag-of-Word
• Biểu diễn dùng một multiset hoặc bag, mã hóa các từ
xuất hiện trong một text; bag-of-words không mã hóa
bất kỳ cú pháp của text, bỏ qua thứ tự các từ và không
để ý đến tất cả ngữ pháp.

• Kiểu bag-of-words có thể được sử dụng hiệu quả cho


phân loại tài liệu và truy xuất bất chấp giới hạn thông
tin mà nó mã hóa.
Ví dụ
Với hai câu sau :
Sentence 1: “The cat sat on the hat”
Sentence 2: “The dog ate the cat and the hat”
Từ hai câu trên , từ vựng sẽ là :
{ the, cat, sat, on, hat, dog, ate, and }

Để có thể xây dựng được bag of words của 2 câu này ,


chúng ta đếm số lần xuất hiện của mỗi từ trong mỗi câu
Trong câu 1, “the” xuất hiện hai lần , và “cat”, “sat”,
“on”, và “hat” mỗi từ xuất hiện một lần , như
thế feature vector cho câu1 sẽ là :
{ the, cat, sat, on, hat, dog, ate, and }
Câu 1: { 2, 1, 1, 1, 1, 0, 0, 0 }

Câu 2: “The dog ate the cat and the hat”


Tương tự , features cho câu 2 sẽ là : { 3, 1, 0, 0, 1, 1, 1, 1}
Hạn chế của mô hình Bag-of-words:
• Vector đặc trưng thu được sẽ rất lớn.
• Sparse vector : Các vector nhiều chiều nhưng có nhiều phần tử giá trị
0.
• Khi gặp các từ không có trong kho dữ liệu thì sẽ mặc định là unknown.
• Không mang thông tin thứ tự của các từ dẫn đến nhầm lẫn về nghĩa
của câu.
Extracting features from text
Stemming and lemmatization
STEMMING
• Stemming: Là kỹ thuật dùng để biến đổi 1 từ về dạng
gốc bằng cách cực kỳ đơn giản là loại bỏ 1 số ký tự
nằm ở cuối từ mà nó nghĩ rằng là biến thể của từ

• PLAYING PLAY
• PLAYED PLAY
• PLAYS PLAY
from nltk.stem import PorterStemmer
from nltk.stem import LancasterStemmer
#create an object of class PorterStemmer
porter = PorterStemmer()
lancaster=LancasterStemmer()
word_list = ["friend", "friendship", "friends",
"friendships","stabil","destabilize","misunders
tanding",“goes","moonlight","football"]
print("{0:20}{1:20}{2:20}".format("Word","Porte
r Stemmer","lancaster Stemmer"))
for word in word_list:

print("{0:20}{1:20}{2:20}".format(word,porter.s
tem(word),lancaster.stem(word)))
LEMMATIZATION
Lemmatization: Sẽ xử lý thông minh hơn bằng
một bộ từ điển hoặc một bộ ontology nào đó
from nltk.stem.wordnet import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
print (lemmatizer.lemmatize('gathering', 'v'))
print (lemmatizer.lemmatize('gathering', 'n'))
from nltk.stem import WordNetLemmatizer
wordnet_lemmatizer = WordNetLemmatizer()

sentence = "He goes to school"


punctuations="?:!.,;"
sentence_words = nltk.word_tokenize(sentence)
for word in sentence_words:
if word in punctuations:
sentence_words.remove(word)

sentence_words
print("{0:20}{1:20}".format("Word","Lemma"))
for word in sentence_words:
print
Extending bag-of-words with TF- IDF weight

Trong hầu hết các ngôn ngữ, có một số từ có xu hướng


xuất hiện thường xuyên như trong tiếng anh có "is",
"the"... tương tự tiếng việt có các từ như "là", "của",
"cứ"... TF-IDF
(Term Frequency - Inverse
Document Frequency)
Term Frequency
LTF (Term Frequency) trong một tài liệu là tần số
xuất hiện của một từ khóa (term) đã cho trong một
tài liệu
TF(d, ti) = n(d, ti)/N
.
TF(d, ti) = n(d, ti)/max(n(d, ti))
Trong bất kì trường hợp nào thuật ngữ xuất hiện nhiều
hơn sẽ có điểm TF cao hơn (cao nhất là 1) và thuật ngữ ít
xuất hiện sẽ có điểm TF gần bằng 0.
IDF (Inverse Document Frequency)
• Tính toán độ quan trọng của một từ
𝑁
• IDF(t) = log
|𝑡𝟄 𝐷:𝑡𝟄𝑑|

N là tổng số đoạn văn bản


𝑡𝟄 𝐷: 𝑡𝟄𝑑: là số văn bản chứa từ t

TF-IDF = TF(t) x IDF(t)


Giải thuật TF-IDF.
Cho tập từ khóa t{t0,…tn} trong tập tài liệu D{D0,…DN}.
B1: Duyệt từng tài liệu Dj trong tập tài liệu D.
B2: Duyệt từng từ khóa ti trong tập từ khóa t trong từng tài liệu
Dj.
Nếu ti xuất hiện count_ti =count_ti + 1.
B3: Tính TF(Dj,ti)=count_ti/N //N tổng số từ trong tài liệu
B4: Duyệt hết một tài liệu Dj, nếu count_ti>0 thì Dj.
count_di=count_di+1.
B5: Duyệt từng từ khóa ti.
B6: Duyệt từng tài liệu liệu Dj trong tập tài liệu D.
Duyệt từng từ khóa ti trong tập từ khóa t trong từng tài liệu
Dj.
Ứng dụng giải thuật TF-IDF

Được ứng dụng cho việc xử lý truy


vấn của người dùng trong tìm kiếm
cục bộ trên web site.

Được sử dụng để gom các kết quả tìm kiếm


vào nhóm các mẫu truy cập nhiều nhất và
được người dùng quan tâm nhất
Space – efficient feature vectorizing
with the hashing trick
Một từ điển chứa tất cả các mã thông báo duy nhất của kho văn bản được sử dụng để
ánh xạ các mã thông báo của một document tới các phần tử của một vector đặc trưng
Trích chọn đặc trưng từ hình ảnh
(Extracting features from image)
1. Extracting features from pixel intensities
(trích chọn đặc trưng dựa trên cường độ
pixel)
2. Extracting points of interest as features (trích
chọn đặc trưng dựa trên các điểm hữu ích)
Trích chọn đặc trưng từ cường độ
pixel
• Một hình ảnh kỹ thuật số thường được xem như
một ma trận trong đó có 3 yếu tố, sau đó hình ảnh
được biến đổi thành ma trận hay vector gồm các
thành phần được cho là đại diện cho cường độ
pixel.
• Trước tiên các mẫu sẽ được thu thập trước dưới
dạng cường độ pixel. Sau đó, các mẫu sẽ được thực
hiện các phép toán so sánh như chập 2 chiều hay so
sánh tương quan,... với đối tựng cần được nhận
Ưu điểm
Có hiệu quả khi thực hiện các tác vụ
nhận diện cơ bản trong môi trường
không có quá nhiều tác động như ánh
sáng và dịch chuyển của hình ảnh.
Khuyết điểm
1. Việc ghi lại cường độ của từng pixel trong ảnh sẽ
tạo ra các vectơ hay ma trận đặc trưng lớn. Ví dụ :
Một hình ảnh thang độ xám 100 x 100 sẽ cần một
vectơ 10.000 chiều và một ảnh thang độ xám 1920
x 1080 sẽ yêu cầu một vectơ 2.073.600 chiều.
2. Xử lý theo cường độ của pixel tại các vị trí cụ thể
khác nhau dẫn đến các mô hình nhạy với những
thay đổi về độ sáng, tỷ lệ, xoay và dịch chuyển
hình ảnh.
• Nhận dạng ký tự quang học (OCR) là
một vấn đề máy học tiêu biểu cho việc
sử dụng các đặc trưng được trích chọn từ
cường độ pixel.
Mẫu
• Chuẩn bị một bộ hình ảnh mẫu bao
gồm từ 0 đến 9
Hình ảnh gốc
• Hình ảnh gốc gồm nhiều chữ số ở các
vị trị khác nhau
Phép tính
• Hình ảnh mẫu trượt qua hình ảnh đầu
vào
• Thực hiện chập theo
TM_CCOEFF_NORMED:
Ví dụ nhận diện chữ viết tay bằng đặc
trưng từ cường độ pixel
• Sử dụng mô hình phân lớp tuyến tính SVM.
• Bộ dữ liệu chữ số đi kèm với scikit-learn chứa
hình ảnh thang độ xám của hơn 1.700 chữ số
viết tay trong khoảng từ 0 đến 9. Mỗi hình ảnh
kích thước 8x8 mỗi phần tử trong khoảng 0 đến
16.
Hình ảnh gốc
Extracting points of interest
• Trực giác của con người có thể nhanh chóng nhận ra
nhiều vật thể dựa vào các đặc điểm đặc biệt mà không
cần quan sát mọi thuộc tính của vật thể. Đây là ý tưởng
cho việc chỉ trích chọn những điểm quan trọng trên hình
ảnh.
• Cạnh và góc là hai loại điểm quan tâm phổ biến. Một
cạnh là một ranh giới mà tại đó cường độ điểm ảnh thay
đổi nhanh chóng và một góc là giao điểm của hai cạnh.
Ưu điểm
• Các đặc trưng được trích ra ít hơn đáng kể so
với kích thước ảnh mẫu.
• Các đặc trưng này ít bị ảnh hưởng bởi tỉ lệ,
dịch chuyển.
• Có khả năng tái tạo nhờ vào các biến thể gần
với các điểm đặc trưng cho dù có ảnh hưởng
của ánh sáng.
Khuyết điểm
• Tuy số lượng đặc trưng ít hơn so với
kích thước hình ảnh, nhưng tốc độ
trích xuất chậm, chi phí tính toán và
đối sánh cao
SIFT và SURF
• Scale-Invariant Feature Transform (SIFT) là phương
pháp trích xuất các đặc trưng từ một hình ảnh mà ít ảnh
hưởng bởi tỷ lệ, xoay và chiếu sáng của hình ảnh.

• Speeded-Up Robust Features (SURF) là một phương


pháp khác để trích xuất các điểm hữu ích của hình ảnh
và tạo ra các mô tả mà ít khả năng biến thiên về tỷ lệ,
xoay và chiếu sáng của hình ảnh hơn SIFT.
SIFT
• Đầu vào và đầu ra của phép biến đổi:
• Ảnh + SIFT -> Ảnh + keypoints
Keypoint
• Đặc trưng của SIFT gọi là keypoint.
• Keypoint là vùng hình ảnh tròn có hướng.
Nó được mô tả bởi một khung hình học
gồm bốn tham số: tọa độ tâm điểm x và y, tỉ
lệ (bán kính của vùng) và hướng (một góc
được biểu thị bằng radian).
Keypoint
• SIFT coi các keypoint như các đốm
màu (thường là các góc trong hình
ảnh), được phát hiện với cùng trên
một hình ảnh trong nhiều tỉ lệ khác
nhau, vì vậy các keypoint là ít ảnh
hưởng bởi dịch chuyển, xoay và tỉ lệ.
Keypoint
import cv2
import numpy as np

img = cv2.imread("book.jpg")
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
sift = cv2.xfeatures2d.SIFT_create()
keypoints = sift.detect(img_gray, None)
cv2.drawKeypoints(img_gray, keypoints, img,
flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEY
POINTS)
cv2.imwrite("img.jpg", img)
Cách tìm keypoint
• Bước đầu tiên là xác định vị trí cực đại và cực
tiểu gần đúng trên hình ảnh xám. Phép toán
sẽ lặp lại qua từng pixel và kiểm tra tất cả các
điểm lân cận của nó, kết quả là vị trí và tỉ lệ
mà tại đó điểm được tìm thấy. Việc kiểm tra
được thực hiện trên các hình ảnh tỉ lệ khác
nhau:
Cách tìm keypoint
• Bước thứ hai là tìm các điểm pixel phụ, điều này được
thực hiện bằng phép toán mở rộng hình ảnh xung
quanh điểm chính gần đúng. Keypoint vừa được tìm ở
bước 1 sẽ được xác minh lại với các điểm pixel phụ
này.

• Một định hướng được gán cho từng keypoint để đạt


được bất biến đối với xoay hình ảnh. Một vùng lân cận
được lấy xung quanh vị trí keypoint tùy thuộc vào tỷ lệ,
và cường độ và hướng của độ dốc được tính trong
vùng đó.
Descriptor
• Để phân biệt giữa các keypoint khác
nhau, mỗi sẽ được mô tả bởi một
descriptor là một vector 128 chiều.
• Descriptor là biểu đồ trong không gian
ba chiều của độ dốc hình ảnh (HOG) mô
tả cho sự xuất hiện của một keypoint.
Cách tạo một descriptor
• Đối với một keypoint, bọc vùng
xung quanh nó theo hướng và tỉ lệ
và thay đổi kích thước vùng thành
16X16 pixel.
Cách tạo một descriptor
• Chia các pixel thành các ô vuông
trong một ma trận 4X4, tính độ dốc
cho từng pixel theo kỹ thuật HOG.
Cách tạo một descriptor
• Mỗi ô trong ma trận 4x4 sẽ liệt kê
độ dốc theo 8 hướng.
Descriptor
import cv2
import numpy as np

img = cv2.imread("book.jpg")
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
sift = cv2.xfeatures2d.SIFT_create()
keypoints = sift.detect(img_gray, None)
cv2.drawKeypoints(img_gray, keypoints, img,
flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imwrite("img.jpg", img)

keypoints, descriptors = sift.compute(img_gray, keypoints)


SURF
• Cơ bản giống SIFT nhưng bổ sung
một số tính năng nhằm tăng tốc
độ, nhưng lại khá nhạy với đặc
điểm tỉ lệ.

You might also like