Some tips work with Java restful.

Nowadays most people are acquired with microservices restful. Here are some websites very useful.

  • https://codebeautify.org/jsonviewer : json formatter
  • https://www.base64decode.org/ : Decode from Base64 format
  • https://www.freeformatter.com/json-escape.html : Convert string to String in Java and otherwise.
  • What http client in java do you prefer to use ?
    • Java core: of course HttpClient (Apache) but the project on which I’m working is Spring MVC, thus I prefer to use RestTemplate.
  • What a library do you use to parse son ?
    • I’m using GSON because my project is a micro services that deals with lots of small JSON requests, then GSON is the library of interest. If you have an environment that deals often with big JSON files, then Jackson is suitable library. GSON struggles the most with big files.
  • What tools do you use to test RESTful APIs ?
    • Postman, SOUP UI.

source: https://quachson.com/tips-work-java-restful/

 

Advertisements

Phím tắt Mac OS X toàn tập

Bạn có thể sử dụng phím tắt để làm việc trên máy Mac bằng cách sử dụng các tổ hợp phím trên bàn phím.

Sử dụng phím tắt

Để sử dụng phím tắt, chúng ta cần ấn Phím Chức Năng cùng lúc với phím ký tự. Ví dụ: Ấn Command key (⌘) và sau đó ấn “c” để copy bất kể gì vào Clipboard. Vậy ta có Command-C là phím tắt. Bạn cũng có thể thấy các phím tắt bằng cách nhìn vào Menu của chương trình.

Phím chức năng là một phần của các tổ hợp phím tắt. Phím chức năng làm thay đổi tổ hợp khi sử dụng chuột, trackpad bằng nhiều cách khác nhau trên OS X. Phím chức năng bao gồm các phím: Command, Shift, Option, Control, Caps Lock và phím fn. Các phím trên được hiển thị bằng các kí hiệu khi bạn nhìn thấy trên Menu hoặc những phần khác của OS X:

TỔ HỢP PHÍM CHỨC NĂNG
fn Phím Funtion (fn)
Phím Command
Phím Control
Phím Caps lock
Phím Option
Phím Shift

Khi phím fn được sử dụng cùng với dãy phím của hàng trên cùng trên bàn phím, nó sẽ ra các chức năng khác. Ví dụ: nếu phím tắt Control-F2, bạn có thể ấn fn-Control-Brightness trên bàn phím. Nếu bạn nhìn sát vào phím Brightness ở trên bàn phím sẽ thấy biểu tượng F2 và phím đó hoạt động như chức năng hiển thị (F2 hoặc funtion2) khi bạn sẽ fn trên bàn phím.

Nếu bạn sử dụng bàn phím không phải của Apple và có phím Windows, phím Alt sẽ hoạt động tương tự như Option, và phím Windows hoạt động như phím Command. Bạn có thể thay đổi những phím trên trong Keyboard pane of System Prefrences. (Bấm vào biểu tượng Apple > System Prefrences > Keyboard > Modifier Keys, sau đó chọn các phím muốn thay đổi và lựa chọn, nếu muốn quay lại mặc địch các bạn bấm Restore Defaults.)

Cut, Copy và Paste

Bạn có thể sử dụng trong phần lớn các ứng dụng với lệnh cut, copy, paste. Có thể là ảnh, chữ, nhạc và nhiều thứ khác. Bạn có thể copy, paste files trong Finder để Copy sang chỗ khác.

TỔ HỢP PHÍM CHỨC NĂNG
Command-C Copy dữ liệu lựa chọn vào Clipboard
Command-X Xóa bỏ dữ liệu được copy và Clipboard
Command-V Tạo bản sao với nội dung trong Clipboard vào trong tài liệu hoặc ứng dụng đang lựa chọn

Chụp ảnh màn hình

Sử dụng phím tắt này để chụp những gì bạn thấy trên màn hình. Hoặc bạn có thể sử dụng Grab để chụp màn hình, Grab nằm trong thư mục Applications > Utilities

TỔ HỢP PHÍM CHỨC NĂNG
Command-Shift-3 Chụp lại toàn màn hình và lưu ra file
Command-Shift-Control-3 Chụp toàn màn hình và lưu vào Clipboard
Command-Shift-4 Chụp lại một phần màn hình bạn lựa chọn và lưu ra file hoặc bấm Spacebar để chụp mỗi cửa sổ bạn chọn lựa.
Command-Shift-Control-4 Chụp một phần màn hình bạn lựa chọn và lưu vào Clipboard, hoặc bấm Spacebar để chụp cửa sổ bạn chọn lựa.

Phím tắt khi khởi động

Sử dụng các tổ hợp phím này để thay đổi tính năng khi bạn khởi động máy, Bấm và giữ phím hoặc tổ hợp phím ngay lập tức sau khi bật máy Mac của bạn cho đến khi chức năng xuất hiện, ví dụ: bấm và giữ phím Option trong khi khởi động cho đến khi Startup Manager xuất hiện.

Lưu ý: Nếu bạn đang sử dụng một bàn phím được sản xuất bởi một công ty khác không phải của Apple, phím Alt thường có chức năng như phím Option. Nếu ban làm tác vụ tương tự nhưng không hoạt động hãy thử sử dụng một bàn phím Apple thay thế.

TỔ HỢP PHÍM CHỨC NĂNG
Option hoặc Alt Hiển thị tất cả phân vùng khởi động (Startup Manager)
Shift Khởi động với Safe Mode
C Khởi động từ DVD, CD, USB
T Khởi động trong Target disk mode (chế độ này cho phép Mac khởi động qua cổng FireWire hay Thunderbolt. hoặc kết nối với 1 máy Mac khác như ổ đĩa ngoài.)
N Khởi động từ NetBoot server – bạn có thể cài hoặc khởi động OS X thông qua mạng sử dụng dịch vụ OS X Server.
X Khởi động trực tiếp vào Mac OS X (khi không có phân vùng cài OS X có sẵn)
D Khởi chạy chế độ kiểm tra phần cứng (Apple Hardware Test)
Command-R Sử dụng OS X Recovery (từ OS X Lion về sau)
Command-Option-R Sử dụng Internet Recovery trên những máy có hỗ trợ
Command-V Khởi động vào Verbose Mode
Command-S Khởi động vào Single User Mode
Command-Option-P-R RESET NVRAM (nhấn và giữ tổ hợp phím cho đến khi Mac phát ra tiếng khởi động 2 lần. Có tác dụng giải phóng PRAM đưa về cấu hình mặc định của display setting, time and date, time zone, speaker volume, DVD setting, Region.)
Giữ phím Media Eject (⏏) , F12, hoặc Chuột hoặc bấm trackpad Eject ổ di động

Phím tắt khi Sleep, Shut down và Log out

Sử dụng các tổ hợp phím sau khi Mac của bạn bắt đầu Sleep, Shut down, Log out, hoặc khởi động lại máy tính của bạn.

TỔ HỢP PHÍM CHỨC NĂNG
Nút Power Bấm để bật máy, Khi Mac đã bật, bấm để sleep hoặc bật máy lại.
Giữ nút Power trong 1,5s Hiển thị bảng Restart / Sleep / Shut Down
Giữ nút Power trong 5s Ép máy Mac tắt
Control-nút Power Hiển thị bảng Restart / Sleep / Shut down
Command-Control-nút Power Ép Mac khởi động lại
Command-Option-nút Power Đưa máy vào chế độ Sleep
Command-Control-nút Power Thoát tất cả ứng dụng (máy sẽ hỏi bạn có lưu lại các tài liệu đang sử dụng hay không) sau đó khởi động lại máy
Shift-Control-nút Power Đưa màn hình vào chế độ Sleep
Command-Shift-Q Log Out
Command-Shift-Option-Q Log Out ngay lập tức

Phím tắt trong các Ứng dụng

Các phím tắt sau hoạt động trong phần lớn các ứng dụng.

TỔ HỢP PHÍM CHỨC NĂNG
Command-A Chọn tất cả hoặc toàn bộ chữ trong cửa sổ đầu tiên
Command-Z Hoàn tác lệnh trước đó (một số ứng dụng cho phép bạn thực hiện nhiều lần)
Command-Shift-Z Làm lại, đặt lại các thay đổi cuối thực hiện với Undo (một số ứng dụng cho phép bạn làm lại nhiều lần)
Command-Space bar Hiển thị hoặc ẩn đi ô tìm kiếm Spotlight
Command-Option-Space bar Hiển thị cửa sổ kết quả tìm kiếm Spotlight
Command-Tab Di chuyển tiếp đến các ứng dụng gần đây nhất được sử dụng tiếp theo trong danh sách các ứng dụng đang mở
Option-Media Eject (⏏) Eject ổ đĩa quang
Command-Brightness down (F1) Chuyển chế độ “Mirror Displays” cho màn hình đa cấu hình
Command-Brightness up (F2) Chuyển chế độ Target Display Mode
Command-Mission Control  (F3) Hiển thị Desktop
Command-F5 Bật tắt VoiceOver
Option-Brightness (F2) Bật “Displays” tron System Preference
Option-Mission Control (F3) Mở thiết lập Mission Control
Option-Volume key (F12) Mở thiết lập âm thanh
Command-Minus (–) Giảm kích cỡ của mục được chọn
Command-Colon (:) Hiển thị cửa sổ Spelling and Grammar
Command-Semicolon (;) Tìm từ sai chính tả trong các tài liệu
Command-Comma (,) Mở Preferences (Thiếp lập) của ứng dụng đang hiển thị
Command-Question Mark (?) Mở Help
Command-plus (+) or Command-Shift-Equals (=) Tăng kích cỡ của mục được chọn
Command-Option-D Hiển thị hoặc ẩn Dock
Command-Control-D Hiển thị hoặc ẩn định nghĩa của từ đang được chọn
Command-D Chọn thư mục Desktop Desktop trong cửa sổ hiển thị Open và Save
Command-Delete Lựa chọn không lưu (don’t save) trong hộp thoại có chưa nút Xóa (delete) hoặc (don’t save)
Command-E Sử dụng lựa chọn để tìm kiếm
Command-F Mở cửa sổ Tìm kiếm hoặc tìm từ trong văn bản
Command-Option-F Chuyển đến mục tìm kiếm nâng cao
Command-G Tìm tới sự tìm kiếm tiếp theo của lựa chọn
Command-Shift-G Tìm tới sự tìm kiếm trước đó của lựa chọn
Command-H Ẩn cửa sổ của các ứng dụng đang chạy
Command-Option-H Ẩn cửa sổ của tất cả các ứng dụng đang chạy
Command-Option-I Hiển thị thông tin
Command-M Thu nhỏ cửa sổ đang làm việc vào Dock
Command-Option-M Thu nhỏ toàn bộ các cửa sổ vào Dock
Command-N Tạo một tài liệu mới trong ứng dụng
Command-O Hiển thị hộp thoại cho việc lựa chọn tài liệu mở trong ứng dụng
Command-P In tài liệu hiện tại
Command-Shift-P Hiển thị cửa sổ để xác định các thông số tài liệu (Page Setup)
Command-Q Thoát khỏi ứng dụng đang thực thi
Command-S Lưu tài liệu đang sử dụng
Command-Shift-S Hiển thị hộp thoại Save As hoặc tạo bản sao các tài liệu hiện hành
Command-Option-T Ẩn hoặc hiển thị toolbar
Command-W Đóng cửa sổ đang thực thi
Command-Option-W Đóng tất cả cửa sổ trong ứng dụng hiện tại
Command-Option-esc Lựa chọn Ứng dụng để Force Quit
Command-Shift-Option-Esc (giữ trong 3s) Force Quit ứng dụng hiển thị

Làm việc với văn bản

Sử dụng các tổ hợp phím khi chỉnh sửa văn bản trong một trường hoặc tài liệu.

TỔ HỢP PHÍM CHỨC NĂNG
Command-B Bold văn bản đã chọn hoặc chuyển đổi đậm hoặc không
Command-I Italicize văn bản đã chọn hoặc chuyển đổi in nghiêng hoặc không
Command-U Underline văn bản đã chọn hoặc chuyển đổi gạch chân hoặc không
Command-T Hiển thị hay ẩn cửa sổ Fonts
fn-Delete Xóa phía trước (bên phải)
fn-Up Arrow Cuộn trang lên (Chức năng như phím Page Up)
fn-Down Arrow Cuộn trang xuống (Chức năng như phím Page Down)
fn-Left Arrow Cuộn tới đầu của văn bản (Chức năng như phím Home)
fn-Right Arrow Cuộn xuống cuối văn bản (chức năng như phím End)
Command-Right Arrow Di chuyển điểm chèn văn bản đến cuối dòng hiện tại
Command-Left Arrow Di chuyển điểm chèn văn bản vào đầu dòng hiện tại
Command-Down Arrow Di chuyển điểm chèn văn bản vào cuối tài liệu
Command-Up Arrow Di chuyển điểm chèn văn bản vào đầu tài liệu
Option-Right Arrow Di chuyển điểm chèn văn bản vào cuối của từ tiếp theo
Option-Left Arrow Di chuyển điểm chèn văn bản đến phía trước của từ trước đó
Option-Delete Xóa từ bên trái con trỏ, cũng như bất kỳ dấu cách hoặc dấu chấm câu sau từ
Command-Shift-Right Arrow Chọn văn bản giữa các điểm chèn và cuối dòng hiện tại (*)
Command-Shift-Left Arrow Chọn văn bản giữa các điểm chèn và sự khởi đầu của dòng hiện hành (*)
Command-Shift-Up Arrow Chọn văn bản giữa các điểm chèn và các đầu của tài liệu (*)
Command-Shift-Down Arrow Chọn văn bản giữa các điểm chèn và cuối của tài liệu (*)
Shift-Left Arrow Mở rộng văn bản lựa chọn một ký tự bên trái (*)
Shift-Right Arrow Mở rộng văn bản lựa chọn một ký tự bên phải (*)
Shift-Up Arrow Mở rộng văn bản lựa chọn lên 1 dòng
Shift-Down Arrow Mở rộng văn bản lựa chọn xuống 1 dòng
Shift-Option-Right Arrow Mở rộng văn bản lựa chọn theo từ sang phải
Shift-Option-Left Arrow Mở rộng văn bản lựa chọn theo từ sang trái
Shift-Option-Down Arrow Mở rộng văn bản lựa chọn theo từ xuống 1 dòng.
Shift-Option-Up Arrow Mở rộng văn bản lựa chọn theo từ lên 1 dòng.
Control-A Di chuyển đến đầu dòng hoặc đoạn
Control-B Di chuyển sang trái một kí tự
Control-D Xóa kí tự trước con trỏ (bên phải) (tương đương phím del bên Win)
Control-E Di chuyển đến đầu dòng hoặc đoạn
Control-F Di chuyển sang phải một kí tự
Control-H Xóa một kí tự bên trái con trỏ (tương đương phím delete)
Control-K Xóa đoạn văn bản từ bên phải con trỏ đến hết
Control-L Tìm con trỏ nhanh
Control-N Di chuyển xuống một dòng
Control-O Chén một dòng mới sau con trỏ
Control-P Di chuyển lên một dòng
Control-T Đổi ký tự chữ cái hiện tại con trỏ và chữ phía trước
Control-V Di chuyển xuống
Command-{ Lựa chọn căn lề trái (left-align)
Command-} Lựa chọn căn lề phải (right-align)
Command-| Lựa chọn căn giữa (center-align)
Command-Option-C Sao chép các thiết lập định dạng của văn bản và lưu vào Clipboard
Command-Option-V Áp dụng phong cách của một đoạn với các đoạn (Paste Style)
Command-Shift-Option-V Áp dụng phong cách của văn bản xung quanh để chèn vào (Paste and Match Style)
Command-Control-V Áp dụng các thiết lập định dạng với các đối tượng được chọn (Paste Ruler)

Phím tắt trong Finder

TỔ HỢP PHÍM CHỨC NĂNG
Command-A Lựa chọn toàn bộ tập tin trong cửa sổ
Command-Option-A Bỏ chọn toàn bộ
Command-C Sao chép (Copy) tập tin được chọn, sau đó sử dụng Paste (Dán) hoặc Move (Di chuyển) để di chuyển files
Command-D Tạo bản sao với files được chọn lựa
Command-E Eject
Command-F Tìm bất kỳ thuộc tính phù hợp với Spotlight
Command-I Hiển thị cửa sổ Get Info với file được chọn lựa
Command-Shift-C Mở cửa sổ Computer
Command-Shift-D Mở thư mực desktop
Command-Shift-F Hiển thị cửa sổ All My Files
Command-Shift-G Go to Folder
Command-Shift-H Mở thư mục Home của tài khoản đang được sử dụng
Command-Shift-I Mở iCloud Drive
Command-Shift-K Mở cửa sổ Network
Command-Shift-L Mở thư mục Downloads
Command-Shift-O Mở thư mục Documents
Command-Shift-R Mở cửa sổ AirDrop
Command-Shift-U Mở thư mục Utilities
Command-Control-T Thêm vào Sidebar (OS X Mavericks)
Command-Option-I Ẩn hoặc hiển thị cửa sổ thông tin (inspector)
Command-Control-I Lấy thông tin tổng hợp giống như properties
Command-Option-P Ẩn hoặc hiện thanh đường dẫn
Command-Option-S Ẩn hoặc hiện thanh Sidebar
Command-forward slash (/) Ẩn hoặc hiện thanh Status
Command-J Hiển thị thiết lập tùy chọn xem
Command-K Kết nối tới Server
Command-L Tạo alias của mục được chọn
Command-N Mở cửa sổ Finder mới
Command-Shift-N Tạo thư mục mới
Command-Option-N Tạo Smart Folder mới
Command-O Mở mục được chọn
Command-R Hiển thị bản gốc (của alias)
Command-T Hiển thị hay ẩn thanh tab khi một tab đang được mở trong Finder
Command-Shift-T Hiển thị hoặc ẩn thanh Tab
Command-Option-T Ẩn hoặc hiển thị thanh công cụ (Toolbar) khi một tab đang được mở trong Finder
Command-V Dán (Paste) bản sao mà bạn đã sao chép tới mục hiện tại
Command-Option-V Di chuyển các tập tin mà bạn đã đặt vào clipboard từ vị trí ban đầu tới vị trí hiện tại.
Command-Option-Y Xem slideshow QuickLook slideshow của các tập tin đã được chọn lựa
Command-1 Xem theo dạng biểu tượng (Icon)
Command-2 Xem theo dạng danh sách (List)
Command-3 Xem theo dạng cột (Columns)
Command-4 Xem heo dạng Cover Flow (Mac OS X v10.5 và cao hơn)
Command-Comma (,) Mở thiết lập Finder
Command-Left Bracket ([) Quay lại thư mục trước folder
Command-Right Bracket (]) Vào thư mục tiếp theo
Command-Up Arrow Mở thư mục chưa thư mục hiện tại
Command-Control-Up Arrow Mở thư mục chứa thư mục hiện tại trong cửa sổ mới
Command-Down Arrow Mở mục đã chọn
Right Arrow (in List view) Mở thư mục đã chọn
Left Arrow (in List view) Đóng thư mục được lựa chọn
Option-click the disclosure triangle (in List view) Mở tất cả các thư mục trong thư mục đã chọn
Option–double-click Mở một thư mục trong một cửa sổ riêng biệt, đóng cửa sổ hiện tại
Command–double-click Mở một thư mục trong một tab riêng biệt hoặc cửa sổ
Command-click the window title Xem các thư mục có chứa các cửa sổ hiện tại
Command-Delete Chuyển vào Thùng rác
Command-Shift-Delete Dọn Thùng rác
Command-Shift-Option-Delete Dọn Thùng rác mà không cần hiển thị xác nhận
Space bar (or Command-Y) Quick Look tập tin được chọn
Command key while dragging Di chuyển các tập được lựa chọn vào phân vùng khác hoặc vị trí khác
Option key while dragging Sao chép các mục kéo
Command-Option key combination while dragging Tạo alias của các mục kéo

nguồn: https://quachson.com/phim-tat-mac-os-x-toan-tap/

 

NodeJS for beginners

Some keywords that you must find out if you want to learn nodejs: promise, asynchronous, callback, callback hell, eslint, ES6, functional programming, parameter as function.
IDE: Visual Studio Code (free), IntelliJ (license), Eclipse, Atom, sublime text, ….
These libraries that I used to use: npm, yarn, eslint, async, fs, lodash, expressJS, node-fetch, nconf, mongoosejs, graphql, react, redux , jsdoc, rimraf, husky
xml parser : sax, saxpath, xml2js.

If you’re similar ES6, you will learn Stream in Java 8 quickly.
Example: Find max multiples of 3 in array
nodejs

import { filter, max } from 'lodash';

const array = [99, 5, 4, 10, 8, 6, 33, 12, 45, 63];
console.log(max(filter(array, item => item % 3 == 0)));

java

int[] array = {99, 5, 4, 10, 8, 6, 33, 12, 45, 63};
Arrays.stream(array).filter(item -> item % 3 == 0).reduce(Integer::max).ifPresent(System.out::println);

Machine Learning là gì ?

I. 3 dạng Machine Learning chính
1/ Supervised Learning: Nôm na nghĩa là máy sẽ đưa ra suy đoán dựa trên một tập dữ liệu cho trước đã được training.

Những vấn đề của supervised learning được chia làm 2 loại: hồi quy (regression) và phân loại (classification)
Ví dụ 1: Chúng ta có sẵn 1000 status facebook (gọi là dataset A) được phân loại theo các trạng thái như vui, buồn, giận dữ v.v.. (ứng với mỗi trạng thái là một tập hợp các đặc tính có liên quan, ví dụ các trạng thái status vui thì thường xuất hiện các cụm từ như “đáng yêu quá”, “thích quá”, “hay quá”…), supervised learning là phương pháp sử dụng dataset A này để xác định 100 status facebook khác chưa được gắn trạng thái.

Ví dụ 2:
(a) Hồi quy – Đưa ra tấm hình của 1 người, chúng ta dự đoán tuổi của người đó dựa trên tấm hình

(b) Phân loại – Với một bệnh nhân có khối u, chúng tôi-có để dự đoán xem khối u ác tính hoặc lành tính.

2/ Unsupervised Learning: Nôm na nghĩa là tay không bắt giặc 😀 máy sẽ tự tìm ra các mối quan hệ hoặc các pattern từ một dataset.
Ví dụ 1: Chúng ta có thể sử dụng phương pháp unsupervised learning để tìm ra các chủ đề được đề cập tới từ 1000 status facebook, ví dụ các status có chủ đề về bóng đá (vì trong những status này xuất hiện nhiều từ, cụm từ, hashtag có liên quan đến bóng đá chẳng hạn).

Ví dụ 2:
Clustering: Lấy một bộ sưu tập của một triệu gen khác nhau, và tìm cách tự động nhóm những gen có liên quan hoặc tương tự vào 1 nhóm lớn bởi những giá trị khác nhau như là tuổi thọ, vị trí, vai trò, …

Non-clustering: Các “Thuật toán tiệc Cocktail”, cho phép bạn tìm thấy một cấu trúc trong môi trường hỗn loạn. (Nghĩa là: Xác định tiếng nói riêng và âm nhạc từ một mạng lưới các âm thanh tại một bữa tiệc cocktail).

3/ Reinforcement Learning: Nôm na nghĩa là máy có thể tự cập nhật cách giải quyết vấn đề theo kiểu thử và sửa liên tục.
Ví dụ: DeepMind AlphaGo với việc chiến thắng Lee Sedol trong bộ môn cờ vây là ví dụ nổi tiếng nhất về RL (thực tế DeepMind gọi là Deep Reinforcement Learning).

II. 10 thuật toán Machine Learning quan trọng nhất
Để kết luận 10 thuật toán ML nào quan trọng nhất thực sự là việc rất phức tạp vì chúng ta không biết xếp theo tiêu chí nào? Ví dụ độ phổ biến, tính hữu dụng, tính đơn giản, tính chính xác v.v.. Vì thế mình chỉ giả định nếu mình phỏng vấn một người cho vị trí Data Scientist / Data Engineer thì mình cần họ phải nắm được 10 thuật toán sau (theo thứ tự ưu tiên):

  • Linear Regression
  • Logistic Regression
  • Decision Trees
  • Naïve Bayes Classification
  • Ordinary Least Squares Regression
  • Support Vector Machines
  • Ensemble Methods
  • Clustering Algorithms
  • Principal Component Analysis
  • Singular Value Decomposition
  • Independent Component Analysis

1/ Linear Regression và Logistic Regression (Hồi quy tuyến tính và Hồi quy Logistic):

Dùng làm gì nhỉ? Thuật toán Linear Regression mô tả dữ liệu và thể hiện mối quan hệ giữa một biến phụ thuộc (x) với một (y) hoặc nhiều (yi) biến độc lập. Tức là nếu biến độc lập thay đổi thì ảnh hưởng đến biến phụ thuộc như thế nào. Nếu 1 biến độc lập gọi là Hồi quy tuyến tính đơn (Simple Linear Regression), nếu nhiều biến độc lập gọi là Hồi quy tuyến tính đa biến (Multiple Linear Regression).

Đơn: y = \beta 1 + \beta 2 x + \alpha

Đa: y = \beta 0 + \beta 1 x1 + \beta 2 x2 + ... + \beta n xn + \alpha

Nhìn vào phương trình ta thấy gì, y thay đổi khi x thay đổi.
Ok, tạm hiểu, thế sao người ta lại dùng Linear Regression mà không dùng thuật toán khác? Một số ưu điểm của Linear Regression là tính dễ hiểu của thuật toán (ví dụ trên chẳng hạn, những thuật toán sau ví dụ không dễ hiểu như vậy đâu :)); dễ chỉnh sửa (tuning); độ phổ biến cao và tốc độ giải thuật nhanh. Nghe có vẻ dễ đúng không? Cái khó nhất của các Generalized Linear Model (GLM – Mô hình tuyến tính tổng quát) là việc chọn independent variables chứ không phải là thuật toán.
Thế Linear Regression và Logistic Regression thì khác nhau cái gì? Cái khác nhau nhất chính là ở dependent variable, đối với Linear Regression thì DV có dạng liên tục (continuous) còn đối với Logistic Regression thì DV có thể chỉ là Có/Không, Sống/Chết, 0/1 (mô hình nhị phân) hoặc DV có thể ở dạng rời rạc (discrete). Continuos và discrete là hai khái niệm rất lớn trong toán học, các bạn có thể tìm hiểu thêm ở trên mạng, trong khuôn khổ bài này thì hơi khó để giải thích ngắn gọn được.
Ứng dụng trong đời thường như thế nào? Một trong những ứng dụng lớn nhất của GLM model (Mô hình tuyến tính tổng quát) là hệ thống quản lý rủi ro hoặc chấm điểm tín dụng của các ngân hàng. Chẳng hạn như để quyết định hạn mức thẻ Credit card của bạn, hệ thống sẽ sử dụng GLM để tính toán dựa trên các thông tin bạn cung cấp như mức lương hiện tại, độ tuổi, giới tính, công việc đang làm v.v..

2/ Decision Trees (Cây quyết định)
Dùng làm gì nhỉ?Cây quyết định là một công cụ dùng để hỗ trợ trong việc ra quyết định dựa trên một hoặc nhiều biểu đồ dạng cây. Biểu đồ này thể hiện số lượng câu hỏi yes/no tối thiểu mà một người cần hỏi, để đánh giá về khả năng ra được một quyết định đúng.
Ví dụ nhé,chúng ta có một dataset về dữ liệu về các cầu thủ trẻ trong khoảnng 10-16 tuổi. Chúng ta có thể collect được những dữ liệu như vị trí thi đấu, chiều cao, cân nặng, tỷ lệ sút bóng thành công, tỷ lệ xoạc bóng thành công, tỷ lệ chuyền bóng thành công, tốc độ, tỷ lệ đánh đầu thành công v.v…
Giả sử bạn là một HLV và đang có một lứa cầu thủ trẻ mới vào. Làm thế nào để quyết định được một cầu thủ trẻ nên chơi ở vị trí thi đấu nào là phù hợp nhất?
Sử dụng Cây quyết định sẽ giúp bạn làm được điều này, bằng cách thu thập những dữ liệu của lứa cầu thủ trẻ mới vào và so sánh dữ liệu mới này với dữ liệu có sẵn trong dataset, Cây quyết định sẽ giúp bạn xác định được vị trí thi đấu nào thích hợp nhất với một cầu thủ trẻ mới tuyển.
Nghe cool vãi, nhưng theo tôi biết thì đếch có thuật toán nào gọi là Cây quyết định cả :)) Oh đúng, xin lỗi :)) Cây quyết định thực ra là một họ tập hợp các thuật toán mà outcome của nó có thể biểu diễn dưới dạng cây. Một số thuật toán họ này rất phổ biến như C4.5 hoặc Random Forest v.v… Trong khuôn khổ bài mở đầu này, mình chỉ có thể giới thiệu khái quát như vậy, sẽ có những bài khác đi sâu hơn vào từng thuật toán trên.

decision-tree

Oh thế Cây quyết định thì có gì hay? Cái hay nhất của Cây quyết định là tính đơn giản và dễ interpret của kết quả. Hầu như bất kỳ ai nhìn vào một decision tree cũng có thể hiểu được mà không cần có kiến thức gì về Machine Learning cả.
Ứng dụng lớn nhất của Decision Trees là gì? Ứng dụng của Decision Trees cực nhiều, cực phổ biến, vì tính thực tiễn của nó trong việc hỗ trợ ra quyết định (mà trong thực tế thì công việc gì cũng cần quyết định). Ví dụ: quyết định cho vay, quyết định về chiến lược giá bán v.v..

Mình muốn kết thúc phần này bằng một câu nói của Andrew Ng – Chief Scientist của Baidu và Founder của Coursera: “Nếu bạn thành thạo thuật toán hồi quy tuyến tính, hồi quy logistic và nguyên tắc kiểm soát (regularization) thì bạn đã biết nhiều về Machine Learning hơn phần lớn các kỹ sư Machine Learning ở Silicon Valley rồi”. Để biết về các thuật toán này thì không khó nhưng để master nó thì không hề dễ chút nào (nhất là về regularization). Điều mà mình muốn nói ở đây chính là Machine Learning không hề khó, không phải là một black-box, ai cũng có thể học và master được nếu họ thực sự yêu thích và muốn nắm được một trong những vũ khí mạnh nhất của nhân loại hiện nay.
Tham khảo: Nguyễn Đức Anh

Những hạn chế của Classification

Classification là toán xác xuất nên để kỳ vọng tính chính xác 100% là rất khó vì nó phụ thuộc vào tập dataset. Classification chỉ có 2 giá trị: [0,1], [đúng, sai], về email thì [spam, not spam], [khẳng định, phủ định], thông thường thì có ngưỡng giữa tùy vào ta chọn như [0,1] ta chọn 0.5 cho đơn giản làm ví dụ, nếu < 0.5 ==> 0,  > 0.5 là 1. Kết quả trả về rơi nhiều vào giữa ngưỡng [0.4, 0.5, 0.6] có thể dẫn đến kết quả sai. Gọi là na ná giống nhau, nhưng về bản chất nhiều khi khác nhau xa lắm. Cho nên khi có kết quả gần đúng người ta sẽ dùng thuật toán khác filter thêm lần nữa để cho ra kết quả tốt hơn. Ta làm thử 1 ví dụ để xem tính chính xác của Classification như thế nào nhé.

Example: ta dùng tập [0,1] và chọn ngưỡng giữa là 0.5 và có tập kết quả là {1, 0, 0.6, 0.4, 1, 0}

– TP: đúng tuyệt đối, có giá trị là 1.

– FN: Sai tuyệt đối, có giá trị là 0.

– FP: Đúng ở ngưỡng giữa, 0.5, 0.6, 0.7… < 1

– TN: Sai ở ngưỡng giữa: 0.4, 0.3,0.2… > 0

Trong trường hợp này ta có.

TP = 2 (có 2 giá trị 1), đúng 100%

FN = 2 (có 2 giá trị 0), sai 100%

FP = 1 (0.6)

TN = 1 (0.4)

Ta có thể định nghĩa tính chính xác như sau:

Tính chính xác = (TP + TN)/(TP + TN + FP + FN) = (2 + 2)/(2 + 2 + 1 + 1) = 23

Ta có 4 mẫu đúng trên 6 mẫu. Bây giờ ta xem thêm ví dụ khác về lọc email spam.

Classified positive Classified negative
Positive class 10 15
Negative class 5 100

Trong trường hợp này, tính chính xác = (10 + 100)/(10 + 5 + 15 + 100) = 84.6%. Ta tạm thời cho rằng thuật toán phân loại làm việc rất hiệu quả, dò tìm dc gần 85% những email spam. Tuy nhiên điều gì sẽ xảy ra khi ta chuyển đổi thuật toán của Classficication rằng không có email spam nào cả.

Classified positive Classified negative
Positive class 0 0
Negative class 15 115

Tính chính xác = (0 + 115)/(0 + 15 + 0 + 115) = 88.5%. Thật không thể tin nổi. Ta thay đổi thuật toán để cho ra kết quả hoàn toàn vô nghĩa, với số 0 ta đã làm tăng tính chính xác.

Cái này dc gọi là nghịch lý chính xác (the accuracy paradox). Khi TP < FP, tính chính xác sẽ luôn tăng khi ta thay đổi thuật toán phân loại để luôn luôn ra kết quả sai. Ngược lại khi TN < FN tương tự như vậy khi ta thay đổi luật để luôn cho ra kết quả đúng.

Vậy thì ta có thể làm dc gì, Ta nên biết rằng không có thuật toán phân loại nào là tốt nhất, chính xác nhất cả, ta phải biết kết hợp nhiều thuật toán phân loại với nhau để cho ra kết quả chính xác nhất có thể.

Kết luận là lại chọn ngưỡng giữa cho Classification là rất quan trọng. Trong y học những triệu chứng bệnh na ná giống nhau là rất nhiều, khi phân loại dc bệnh rồi còn phải yêu cầu đi làm xét nghiệm nữa, nghĩa là phân loại thêm lần nữa để chính xác hơn.

Machine Learning – Classification – phần 3

Trong hai bài viết trước (phần 1) và (phần 2), chúng ta đã cùng tìm hiểu về Classification. Chúng ta cũng đã làm quen với một thuật toán rất nổi tiếng gọi là k-nearest neighbors. Nếu có thời gian, bạn nên đọc các bài viết đó để có thể hiểu cặn kẽ những nội dung trong bài viết này, bài viết cuối cùng trong chuỗi bài giới thiệu về Classification.

Thuật toán k-nearest neighbors mà chúng ta tìm hiểu ở bài viết trước là một thuật toán được sử dụng rất rộng rãi. Tuy nhiên, nó cũng là một thuật toán rất cũ. Cho đến thời điểm này, các nhà nghiên cứu đã và đang phát triển những thuật toán phức tạp và mạnh mẽ hơn nhiều. Thuật toán tiếp theo mà tác giả muốn giới thiệu với các bạn được gọi là Random Forest. Đây là một thuật toán mới xuất hiện tầm 10 năm trước, và được coi là một cuộc cách mạng trong Machine Learning. Random Forest chỉ phức tạp hơn một chút so với k-nearest neighbors, nhưng nó hiệu quả hơn nhiều nếu xét trên hiệu năng tính toán của máy tính. Bên cạnh đó, Random Forest còn cho kết quả chính xác hơn nhiều so với k-nearest neighbors. Nghĩa là, khi các nhà nghiên cứu kiểm thử kết quả của hai thuật toán này trên các bộ dữ liệu khác nhau (bao gồm cả the Iris dataset), Random Forest thường cho kết quả đúng hơn so với k-nearest neighbors

Một trong những lí do khiến Random Forest hiệu quả hơn so với k-nearest neigbors là bởi vì, với k-nearest neighbors, tất cả các thuộc tính đều có mức độ quan trọng như nhau. Mặt khác, Random Forest có khả năng tìm ra thuộc tính nào quan trọng hơn so với những thuộc tính khác. Trên thực tế, nó còn có thể chỉ ra rằng một số thuộc tính là hoàn toàn vô dụng.

Random Forest là một thành viên trong họ thuật toán decision tree (cây quyết định). Vậy cây quyết định là gì? Một cây quyết định là một cách đơn giản để biểu diễn một giao thức (protocol). Nói cách khác, cây quyết định biểu diễn một kế hoạch, trả lời câu hỏi phải làm gì trong một hoàn cảnh nhất định. Ví dụ, cây quyết định được sử dụng trong tổng đài điện thoại để quyết định xem tổng đài viên sẽ trả lời như thế nào dựa trên phản hồi của khách hàng. Nó cũng được sử dụng trong hệ điều hành của bất kì cỗ máy nào mà bạn có thể tưởng tượng (tàu ngầm, bom nguyên tử,…) hay đơn giản, cây quyết định được các bác sĩ sử dụng để chẩn đoán bệnh.

Hãy trở lại câu chuyện của chúng ta với một ví dụ đơn giản. Hình ảnh phía dưới minh hoạ một cây quyết định để xác định chủng loại của một con vật. Để đơn giản, chúng ta sẽ chỉ xét một vài chủng loại động vật mà thôi. Giả sử ta có một con vật, hãy thử dùng cây quyết định này để tìm ra chủng loại của nó.

Đường đi bắt đầu từ câu hỏi đầu tiên ở phía trên của cây (bên dưới vòng tròn đỏ). Trả lời câu hỏi đó, và đi tiếp xuống các nút phía dưới của cây tuỳ thuộc vào câu trả lời (có/không với câu hỏi đầu tiên). Lặp lại hành động đó cho đến khi đi tới nút lá (các út màu xanh lá cây). Khi đó, bạn sẽ có câu trả lời.

exampledt

(chú thích trên hình bị sai: 50cm thay vì 50kg)

Ví dụ, bạn bắt gặp một con vật mà bạn không biết nó thuộc chủng loại gì. Câu hỏi đầu tiên là: “Nó có lông không?”. Giả sử nó có lông, chúng ta đi tiếp sang nhánh bên phải. Câu hỏi tiếp theo là: “Nó cao bao nhiêu?”. Giả sử con vật của chúng ta chỉ cao 30cm. Điều này có nghĩa là chúng ta sẽ đi theo nhánh bên trái. Khi đó, vì chúng ta đã đi đến nút lá, chúng ta biết rằng con vật mà mình đang xét chính là con gà.

Bây giờ chắc bạn đã hiểu phần nào về cây quyết định, hãy trở lại với thuật toán Random Forest: Ý tưởng phía sau Random Forest khá đơn giản. Thuật toán này sinh một số cây quyết định (thường là vài trăm) và sử dụng chúng. Các câu hỏi của cây quyết định sẽ là câu hỏi về các thuộc tính. Ví dụ: “Cánh hoa có dài hơn 1.7cm hay không?”. Câu giá trị ở nút lá sẽ là các lớp (class). Sử dụng hàng trăm cây quyết định là bất khả thi với con người, nhưng máy tính có thể làm việc này tương đối dễ dàng.

Đến lúc này chúng ta đã tìm hiểu cách sử dụng một cây quyết định, nhưng vấn đề là làm thế nào để tạo ra nó.

Có hai giải pháp. Cách thứ nhất là hỏi chuyên gia (ví dụ như một nhà nhân chủng học với bài toán phân biệt chủng loại của con vật). Nghe có vẻ hấp dẫn, nhưng không phải khi nào bạn cũng có thể tiếp cận được với chuyên gia trong bài toán của mình. Hơn nữa, bạn có thể sẽ ngạc nhiên rằng ngay cả những chuyên gia giỏi nhất cũng gặp khó khăn trong việc viết ra những kiến thức của mình. Ngay cả khi bạn tìm được một chuyên gia có khả năng đó thì chắc chắn sẽ có những thứ mà họ không biết tới. Ví dụ, nhà nhân chủng học của chúng ta có thể quên mất rằng con đà điểu có thể nhỏ hơn 50kg.

Thay vì sử dụng chuyên gia, các nhà nghiên cứu sử dụng phương án thứ hai: tạo ra một thuật toán tự sinh cây quyết định. Điều kiện duy nhất là phải có vài ví dụ để máy tính có thể tham chiếu. Trong Iris dataset, những ví dụ này chính là những bông hoa mà chúng ta đã biết chủng loại.

Để tạo ra một cây quyết định, thuật toán Random Forest luôn bắt đầu bằng một cây rỗng. Một cây quyết định rỗng chỉ có một ô Start chỉ thẳng đến câu trả lời (ô xanh lá). Tiếp theo, thuật toán sẽ tìm câu hỏi đầu tiên và bắt đầu xây dựng cây quyết định (trong ví dụ trước, câu hỏi đó là “Nó có lông không?”). Mỗi lần thuật toán tìm được thêm một câu hỏi, nó tạo hai nhánh trên cây quyết định. Khi không còn câu hỏi nào nữa, thuật toán dừng lại và chúng ta có một cây quyết định hoàn chỉnh.

Làm thế nào để tìm ra những câu hỏi tốt nhất cho cây quyết định? Đây là một bước khá phức tạp nhưng ý tưởng đằng sau nó tương đối đơn giản: Ở thời điểm bắt đầu, thuật toán của chúng ta chưa biết phân biệt các chủng loại của các con vật. Nói cách khác, tất cả các con vật được cho chung vào một “cái túi”. Để tìm ra câu hỏi tốt nhất, thuật toán thử đưa ra tất cả các câu hỏi có thể (có khi là hàng triệu câu hỏi). Ví dụ: “Nó có bao nhiêu chân?”, “Nó có đuôi không?”,… Sau đó, với mỗi câu hỏi, thuật toán sẽ đánh giá mức độ hiệu quả mà câu hỏi này giúp phân biệt các chủng loại, hay các class. Câu hỏi được chọn không cần thiết phải hoàn hảo, nhưng nó phải tốt hơn những câu hỏi khác. Để tính toán mức độ hiệu quả của câu hỏi, chúng ta sử dụng một độ đo có tên là information gain. Chúng ta sẽ không bàn chi tiết về độ đo này, có thể hiểu nôm na nó như một cách để “cho điểm” các câu hỏi. Câu hỏi với information gain lớn nhất sẽ được chọn như là câu hỏi tốt nhất để xây dựng cây quyết định.

Hình ảnh phía dưới minh hoạ 4 bước để tạo một cây quyết định đơn giản. Quá trình này sẽ được lặp lại cho tất cả các cây.

building-dt

Sau khi thuật toán xây dựng xong các cây quyết định, những cây này sẽ được sử dụng để trả lời câu hỏi (hay phân loại). Trong bài toán về hoa diên vĩ, thuật toán sẽ trả lời câu hỏi: “Chủng loại của bông hoa bí ẩn là gì?”.

Nếu bạn theo dõi sát sao bài viết này, có thể bạn sẽ thấy một chút mâu thuẫn: chúng tôi nói với bạn rằng thuật toán Random Forest xây dựng nhiều cây quyết định. Tuy nhiên, chúng tôi mới chỉ giải thích cách dựng một cây quyết định mà thôi.

Random Forest coi mỗi cây quyết định như một cử tri bỏ phiếu độc lập (như một cuộc bầu cử thực sự). Ở cuối cuộc bầu cử, câu trả lời nhận được nhiều bầu chọn nhất từ các cây quyết định sẽ được lựa chọn.

Tuy nhiên, vẫn còn một vấn đề: Nếu như tất cả các cây được dựng theo cùng một cách, chúng sẽ cho những câu trả lời giống nhau. Như vậy chẳng khác gì chúng ta chỉ sử dụng một cây quyết định duy nhất cả. Ở đây, Random Forest có một cách làm rất hay: Để chắc chắn rằng không phải tất cả các cây quyết định cho cùng câu trả lời, thuật toán Random Forest chọn ngẫu nhiên các quan sát (observations). Chính xác hơn, Random Forest sẽ xoá một số quan sát và lặp lại một số khác một cách ngẫu nhiên. Xét toàn cục, những quan sát này vẫn rất gần với tập các quan sát ban đầu, nhưng những thay đổi nhỏ sẽ đảm bảo rằng mỗi cây quyết định sẽ có một chút khác biệt. Quá trình này gọi là bootstrapping

Thêm vào đó, để thực sự chắc chắn các cây quyết định là khác nhau, thuật toán Random Forest sẽ ngẫu nhiên bỏ qua một số câu hỏi khi xây dựng cây quyết định. Trong trường hợp này, nếu câu hỏi tốt nhất không được chọn, một câu hỏi kế tiếp sẽ được lựa chọn để dựng cây. Quá trình này được gọi là attribute sampling

Chắc rằng các bạn rất thắc mắc tại sao người ta lại tạo ra một thuật toán phức tạp như vậy: ngẫu nhiên thay đổi các quan sát và bỏ qua một số câu hỏi. Câu trả lời rất đơn giản: Có thể các mẫu thử mà chúng ta đang sử dụng chưa hoàn hảo. Ví dụ, có thể mẫu thử của chúng ta chỉ có những con mèo có lông đuôi. Trong trường hợp này những con mèo thuộc loài sphynx (mèo không lông) có thể được phân loại là con chuột. Tuy nhiên, nếu câu hỏi về đuôi không được hỏi (bởi vì sự thay đổi ngẫu nhiên), thuật toán có thể sử dụng câu hỏi các câu hỏi khác (ví dụ: Con vật đó có kích thước như thế nào?). Việc có nhiều câu hỏi đa dạng (có thể không hoàn hảo) là một ý tưởng không tồi: nó có thể là cứu tinh khi thuật toán tham chiếu đến một quan sát mà nó chưa từng thấy trước đây.

Và đó là tất cả những gì bạn cần biết về Random Forest.

Đây là bài viết cuối cùng trong chuỗi ba bài viết về Classification trong Machine Learning. Hi vọng bạn đã có được những hiểu biết ban đầu về bài toán phân loại, và quen thuộc với các khái niệm quan sát (observations) hay thuộc tính (attributes). Chúng tôi cũng đã trình bày hai thuật toán phân loại nổi tiếng, k-nearest neighborsRandom Forest, hi vọng bạn đã hiểu được phần nào về cách thức mà các thuật toán này hoạt động.

Bài viết tới mình sẽ viết về những hạn chế của Classification, bài tới nữa sẽ giới thiệu vệ Hồi Quy.

Nguồn: Achoum’s blog, vnoi.info

Machine Learning – Classification – phần 2

Trong bài viết trước (link), chúng ta đã cùng tìm hiểu về Classification. Chúng ta cũng đã đưa ra vài ví dụ về ứng dụng của nó và cũng đã làm quen với the Iris dataset. Nếu có thời gian, bạn nên đọc bài viết đó để có thể hiểu cặn kẽ những nội dung trong bài viết này.

Trở lại câu chuyện về hoa diên vĩ (Iris flower): Chúng ta có một danh sách các bông hoa diên vĩ được mô tả bằng độ dài và độ dày của đài hoa và cánh hoa (attributes). Chúng ta cũng đã biết chủng loại của tất cả các bông hoa trừ một cái duy nhất (chúng ta sẽ gọi nó là “bông diên vĩ bí ẩn”) và mục tiêu cuối cùng là tìm ra chủng loại của bông diên vĩ bí ẩn này. Với bài toán này, chúng ta giả sử rằng những thuộc tính trên là đặc trưng của chủng loại.

Giải pháp 1: Quan sát tương đồng (The same observation solution)

Giải pháp đầu tiên mà ta thường nghĩ đến trong trường hợp này là tìm kiếm một bông diên vĩ khác với độ dài và độ dày của đài hoa và cánh hoa giống với bông diên vĩ bí ẩn. Nếu có, nhiều khả năng chủng loại của bông hoa này cũng tương đồng với bông hoa bí ẩn. Không may mắn thay, rất hiếm khi chúng ta tìm được hai bông diên vĩ với những thông số giống hệt nhau. Trên thực tế, tìm kiếm một quan sát với các thuộc tính giống hệt hiếm khi là một giải pháp tốt, sẽ luôn có những sự khác biệt dù là rất nhỏ.

Giải pháp 2: Hàng xóm gần nhất (The 1-nearest neighbors solution)

Thay vì tìm kiếm một bông diên vĩ với các giá trị thuộc tính tương đồng, chúng ta sẽ tìm kiếm những bông hoa gần giống với bông hoa bí ẩn. Nếu hai bông diên vĩ có kích thước rất gần giống nhau, chúng trông sẽ rất giống nhau và vì vậy, có thể chúng thuộc cùng một chủng loại.

Tuy nhiên, cách này sẽ không hiệu quả nếu như có một vài bông diên vĩ thuộc các chủng loại khác nhau nhưng đều có giá trị thuộc tính gần giống với bông diên vĩ bí ẩn. Vì vậy, chúng ta chỉ tìm ra bông diên vĩ giống nhất với bông diên vĩ bí ẩn. Điều đó có nghĩa là chúng ta phải định nghĩa chính xác thế nào là hai bông diên vĩ giống nhau. Chúng ta cũng phải định nghĩa thế nào là một bông diên vĩ giống bông diên vĩ này hơn so với một bông khác.

Giải pháp được sử dụng bởi các nhà nghiên cứu là định nghĩa khoảng cách giữa hai bông diên vĩ. Khoảng cách giữa hai bông diên vĩ càng nhỏ, chúng càng giống nhau. Có rất nhiều cách để định nghĩa khoảng cách. Một trong những khoảng cách thường được sử dụng nhất trong Khoa học Máy tính là khoảng cách Euclide (the Euclidean distance). Nghe có vẻ nguy hiểm, nhưng thực ra khoảng cách Euclide chính là những gì bạn vẫn thường hiểu về khoảng cách hay đường chim bay.

Tuy nhiên, mặc dù khoảng cách Euclide giữa hai điểm trên bản đồ rất dễ hiểu, sẽ khó tưởng tượng hơn một chút khi bạn nói đến khoảng cách giữa hai bông diên vĩ.

Để tính khoảng cách Euclide, bạn phải tính tổng bình phương của hiệu các thuộc tính tương đương, rồi lấy căn bậc hai của tổng đó. Hãy áp dụng công thức đó cho hai bông hoa đầu tiên được biểu diễn trong bảng sau:

table2

Khoảng cách giữa hai bông diên vĩ đầu tiên là:(6.36.2)2+(2.33.4)2+(4.45.4)2+(1.32.3)2=1.79
\sqrt{(6.3-6.2)^{2}+(2.3-3.4)^{2}+(4.4-5.4^{2}+(1.3-2.3)^{2}}  = \sqrt{15.18} = 3.90

Khoảng cách giữa bông hoa đầu tiên và bông hoa thứ ba là:

\sqrt{ (6.3-5.2)^{2}+(2.3-3.4)^{2}+(4.4-1.4)^{2}+(1.3-0.2)^{2}} = 3.70

Giá trị đầu tiên nhỏ hơn (3.7 < 3.9), điều này có nghĩa là bông diên vĩ đầu tiên giống bông hoa thứ hai hơn so với bông hoa thứ ba.

Nhờ những bước tính toán và so sánh như trên, bạn có thể tìm ra bông hoa giống bông hoa bí ẩn nhất. Đơn giản là chúng ta chỉ cần tính khoảng cách giữa bông hoa bí ẩn với mỗi bông hoa khác, và tìm bông hoa có khoảng cách nhỏ nhất. Phương pháp tưởng chừng như đơn giản này thực ra lại được sử dụng bởi rất nhiều nhà nghiên cứu. Nó có tên là Hàng xóm gần nhất (The 1-nearest neighbors solution)

irises

Giải pháp 3: k-hàng xóm gần nhất (The k-nearest neighbors solution)

Thông thường, giải pháp hàng xóm gần nhất (The 1-nearest neighbors solution) cho kết quả tốt, nhưng trong nhiều trường hợp, vì nhiều nguyên nhân khác nhau mà giải pháp này cho kết quả thiếu chính xác. Một trong những nguyên nhân có thể là sự thiếu chính xác trong phép đo các thuộc tính. Điều này dẫn đến việc tính khoảng cách không đúng, và như vậy thuật toán không thể tìm ra lớp (class) đúng nhất.

Các nhà nghiên cứu đã tìm ra một giải pháp đơn giản cho vấn đề này: Thay vì tìm ra bông diên vĩ giống nhất, chúng ta sẽ tìm 5. Nói cách khác, chúng ta tìm 5 bông diên vĩ có khoảng cách nhỏ nhất so với bông diên vĩ bí ẩn. Nếu cả 5 bông diên vĩ thuộc cùng một chủng loại, vấn đề trở nên rất đơn giản: chủng loại (hay lớp) của bông diên vĩ bí ẩn chính là chủng loại của 5 bông diên vĩ đó.

Tuy nhiên, sẽ thế nào nếu 5 bông diên vĩ trên thuộc về các chủng loại khác nhau? Trong trường hợp này, chúng ta sẽ đếm số lượng các bông diên vĩ trong một chủng loại, và chủng loại với số bông diên vĩ lớn nhất sẽ được coi là chủng loại của bông diên vĩ bí ẩn. Ví dụ, nếu trong 5 bông diên vĩ giống nhất, có 1 bông thuộc loại Setosa, 1 thuộc Versicolour và 3 bông còn lại thuộc loại Viginica, chúng ta có thể khá chắc chắn khi kết luận rằng bông hoa bí ẩn thuộc loại Viginica (xem hình minh hoạ phía dưới).

irises2

Giải thuật trên được gọi là 5-hàng xóm gần nhất (5-nearest neighbors)

Có thể bạn thắc mắc tại sao chúng ta lại tìm 5 hàng xóm gần nhất thay vì 2, 10 hay 50. Chọn ra k tốt nhất trong giải thuật k-hàng xóm gần nhất là một câu hỏi rất khó trả lời vì nó phụ thuộc vào rất nhiều vấn đề. Chúng ta sẽ không giải thích chi tiết ở đây, nhưng bạn nên biết rằng, trong thực tế, các nhà nghiên cứu thường thử rất nhiều trường hợp để tìm ra phương án tốt nhất.

Bài viết đến đây là hết. Hi vọng bạn đã có một hiểu biết sơ lược về thuật toán nổi tiếng k-hàng xóm gần nhất (hay k-nearest neighbors). Trong bài viết tiếp theo, tác giả sẽ giới thiệu một thuật toán mới hơn, phức tạp và rất mạnh gọi là Random Forest.

Hẹn gặp lại các bạn trong bài viết tới!

Nguồn: Achoum’s blog, vnoi.info