Ground truth là gì

  -  

Nếu như con người có kiểu học tập “nước mang lại chân mới nhảy”, thì vào Machine Learning cũng đều có một thuật toán như vậy.

Bạn đang xem: Ground truth là gì

Trong trang này:

1. Reviews 3. Ví dụ trên Python thể nghiệm 4. đàm luận

1. Giới thiệu

Một câu chuyện vui

Có một đứa bạn chuẩn bị mang lại ngày thi cuối kỳ. Bởi môn này được mở tài liệu khi thi đề nghị anh ta không chịu ôn tập nhằm hiểu ý nghĩa của từng bài học kinh nghiệm và mối liên hệ giữa các bài. Cầm vào đó, anh thu thập tất cả các tài liệu trên lớp, bao hàm ghi chép bài bác giảng (lecture notes), các slides và bài bác tập về đơn vị + lời giải. Để cho chắc, anh ta ra thư viện và các quán Photocopy quanh trường sở hữu hết toàn bộ các loại tài liệu liên quan (khá khen cho cậu này chịu khó tìm tìm tài liệu). Cuối cùng, thằng bạn của bọn họ thu thập được một chồng cao tư liệu để mang vào phòng thi.

Vào ngày thi, anh lạc quan mang ông chồng tài liệu vào chống thi. Aha, đề này ít nhất mình phải được 8 điểm. Câu 1 hệt nhau bài giảng bên trên lớp. Câu 2 đồng nhất đề thi thời gian trước mà giải thuật có vào tập tài liệu download ở cửa hàng Photocopy. Câu 3 gần giống với bài xích tập về nhà. Câu 4 trắc nghiệm thậm chí là cậu nhớ đúng đắn ba tài liệu gồm ghi đáp án. Câu cuối cùng, 1 câu cực nhọc nhưng anh đã từng nhìn thấy, chỉ nên không nhớ nơi đâu thôi.

Kết trái cuối cùng, cậu ta được 4 điểm, trọn vẹn điểm qua môn. Cậu làm chính xác câu 1 vì tìm kiếm được ngay vào tập ghi chú bài bác giảng. Câu 2 cũng tìm kiếm được đáp án nhưng giải mã của quán Photocopy sai! Câu bố thấy tương tự bài về nhà, chỉ không giống mỗi một trong những thôi, cậu cho kết quả giống như thế luôn, vậy cơ mà không lấy điểm nào. Câu 4 thì tìm được cả 3 tư liệu nhưng tất cả hai trong số ấy cho đáp án A, cái còn lại cho B. Cậu chọn A cùng được điểm. Câu 5 thì không làm cho được dù còn tới trăng tròn phút, vì tìm mãi chẳng thấy đáp án đâu - nhiều tài liệu quá cũng mệt!!

Không đề nghị ngẫu nhiên mà lại tôi dành ra cha đoạn văn để kể về chuyện học hành của chàng trai kia. Từ bây giờ tôi xin trình bày về một phương thức trong Machine Learning, được hotline là K-nearest neighbor (hay KNN), một thuật toán được xếp vào nhiều loại lazy (machine) learning (máy lười học). Thuật toán này khá tương tự với phương pháp học/thi của anh bạn kém suôn sẻ kia.

K-nearest neighbor

K-nearest neighbor là trong những thuật toán supervised-learning đơn giản nhất (mà công dụng trong một vài ngôi trường hợp) vào Machine Learning. Lúc training, thuật toán này không học một điều gì từ dữ liệu training (đây cũng là vì sao thuật toán này được xếp vào nhiều loại lazy learning), mọi thống kê giám sát được triển khai khi nó phải dự đoán công dụng của tài liệu mới. K-nearest neighbor hoàn toàn có thể áp dụng được vào cả hai các loại của vấn đề Supervised learning là Classification và Regression. KNN có cách gọi khác là một thuật toán Instance-based giỏi Memory-based learning.

Có một vài khái niệm khớp ứng người-máy như sau:

ngôn từ người ngữ điệu Máy học tập in Machine Learning
Câu hỏi Điểm dữ liệu Data point
Đáp án Đầu ra, nhãn Output, Label
Ôn thi Huấn luyện Training
Tập tài liệu với vào chống thi Tập tài liệu tập huấn Training set
Đề thi Tập dữ liểu kiểm thử Test set
Câu hỏi trong dề thi Dữ liệu kiểm thử Test data point
Câu hỏi gồm đáp án sai Nhiễu Noise, Outlier
Câu hỏi ngay gần giống Điểm dữ liệu gần nhất Nearest Neighbor

Với KNN, trong bài toán Classification, label của một điểm dữ liệu mới (hay hiệu quả của thắc mắc trong bài thi) được suy ra thẳng từ K điểm tài liệu gần tuyệt nhất trong training set. Label của một kiểm tra data có thể được quyết định bằng major voting (bầu chọn theo số phiếu) giữa những điểm sát nhất, hoặc nó có thể được suy ra bằng cách đánh trọng số khác nhau cho từng trong các điểm sớm nhất đó rồi suy ra label. Chi tiết sẽ được nêu vào phần tiếp theo.

Trong việc Regresssion, đầu ra của một điểm dữ liệu sẽ bởi chính đầu ra output của điểm tài liệu đã biết sớm nhất (trong trường thích hợp K=1), hoặc là trung bình bao gồm trọng số của đầu ra của rất nhiều điểm sát nhất, hoặc bằng một quan hệ dựa trên khoảng cách tới những điểm sớm nhất đó.

Một biện pháp ngắn gọn, KNN là thuật toán đi tìm đầu ra của một điểm tài liệu mới bằng cách chỉ dựa trên tin tức của K điểm tài liệu trong training set ngay sát nó độc nhất vô nhị (K-lân cận), không quan tâm đến việc tất cả một vài ba điểm dữ liệu một trong những điểm gần nhất này là nhiễu. Hình dưới đó là một lấy ví dụ về KNN vào classification với K = 1.


*

Ví dụ trên đấy là bài toán Classification cùng với 3 classes: Đỏ, Lam, Lục. Từng điểm dữ liệu mới (test data point) sẽ được gán label theo màu của điểm cơ mà nó thuộc về. Trong hình này, tất cả một vài vùng nhỏ dại xem lẫn vào những vùng to hơn khác màu. Ví dụ có một điểm màu sắc Lục ở ngay sát góc 11 giờ nằm trong lòng hai vùng lớn với khá nhiều dữ liệu color Đỏ với Lam. Điểm này rất hoàn toàn có thể là nhiễu. Dẫn cho nếu dữ liệu test rơi vào hoàn cảnh vùng này sẽ có rất nhiều khả năng cho công dụng không chính xác.

Khoảng phương pháp trong không gian vector

Trong không gian một chiều, khoảng cách giữa hai điểm là trị tuyệt vời và hoàn hảo nhất giữa hiệu quý hiếm của nhị điểm đó. Trong không khí nhiều chiều, khoảng cách giữa nhì điểm hoàn toàn có thể được định nghĩa bằng nhiều hàm số khác nhau, trong những số đó độ dài đường thằng nổi nhì điểm chỉ là 1 trường hợp quan trọng trong đó. Nhiều thông tin có ích (cho Machine Learning) hoàn toàn có thể được search thấy trên Norms (chuẩn) của vector vào tab Math.

2. đối chiếu toán học

Thuật toán KNN rất dễ hiểu nên đang phần “Phân tích toán học” này sẽ chỉ gồm 3 câu. Tôi thẳng đi vào các ví dụ. Bao gồm một điều đáng chú ý là KNN cần nhớ toàn bộ các điểm tài liệu training, việc này sẽ không được lợi về cả bộ nhớ và thời gian tính toán - giống hệt như khi cậu bạn của bọn họ không tìm được câu trả lời cho thắc mắc cuối cùng.

3. Ví dụ như trên Python

Bộ cơ sở dữ liệu Iris (Iris flower dataset).

Iris flower dataset là 1 trong bộ dữ liệu nhỏ tuổi (nhỏ hơn tương đối nhiều so cùng với MNIST. Bộ dữ liệu này bao gồm thông tin của cha loại hoa Iris (một loại hoa lan) khác nhau: Iris setosa, Iris virginica với Iris versicolor. Mỗi loại tất cả 50 hoa lá được đo với tài liệu là 4 thông tin: chiều dài, chiều rộng lớn đài hoa (sepal), cùng chiều dài, chiều rộng lớn cánh hoa (petal). Dưới đấy là ví dụ về hình ảnh của ba loại hoa. (Chú ý, đây không phải là cỗ cơ sở dữ liệu hình ảnh như MNIST, từng điểm tài liệu trong tập này chỉ là 1 trong những vector 4 chiều).


*

Bộ dữ liệu bé dại này thường xuyên được sử dụng trong vô số nhiều thuật toán Machine Learning trong số lớp học. Tôi sẽ lý giải lý bởi không lựa chọn MNIST vào phần sau.

Thí nghiệm

Trong phần này, bọn họ sẽ tách 150 dữ liệu trong Iris flower dataset ra thành 2 phần, call là training set với test set. Thuật toán KNN sẽ nhờ vào trông tin nghỉ ngơi training set để tham dự đoán coi mỗi dữ liệu trong test set tương ứng với một số loại hoa nào. Dữ liệu được dự đoán này vẫn được so sánh với một số loại hoa thật của mỗi tài liệu trong test set để đánh giá tác dụng của KNN.

Trước tiên, họ cần khai báo vài ba thư viện.

Iris flower dataset có sẵn trong tủ sách scikit-learn.


Tiếp theo, họ load dữ liệu và hiện lên vài dữ liệu mẫu. Những class được gán nhãn là 0, 1, và 2.

Xem thêm: Xem Phim Mới - Xem Phim The Naked Gun 2½: The Smell Of Fear


iris = datasets.load_iris()iris_X = iris.datairis_y = iris.targetprint "Number of classes: %d" %len(np.unique(iris_y))print "Number of data points: %d" %len(iris_y)X0 = iris_Xprint " Samples from class 0: ", X0<:5,:>X1 = iris_Xprint " Samples from class 1: ", X1<:5,:>X2 = iris_Xprint " Samples from class 2: ", X2<:5,:>
Kết quả cho thấy label dự đoán tương tự với label thiệt của test data, chỉ có 2 điểm trong những 20 điểm được hiển thị có kết quả sai lệch. Ở đây họ làm quen với tư tưởng mới: ground truth. Một cách 1-1 giản, ground truth đó là nhãn/label/đầu ra thực sự của các điểm trong kiểm tra data. Quan niệm này được dùng nhiều trong Machine Learning, hi vọng lần tới chúng ta gặp thì sẽ nhớ ngay lập tức nó là gì.

Phương pháp review (evaluation method)

Để reviews độ chính xác của thuật toán KNN classifier này, họ xem xem tất cả bao nhiêu điểm trong chạy thử data được dự kiến đúng. Lấy số lượng này phân chia cho tổng con số trong tập demo data đã ra độ chính xác. Scikit-learn hỗ trợ hàm số accuracy_score nhằm thực hiện các bước này.


from sklearn.metrics import accuracy_scoreprint "Accuracy of 1NN: %.2f %%" %(100*accuracy_score(y_test, y_pred))

Nhận thấy rằng chỉ xét 1 điểm gần nhất có thể dẫn đến công dụng sai nếu đặc điểm đó là nhiễu. Một cách hoàn toàn có thể làm tăng độ chính xác là tăng con số điểm kề bên lên, lấy ví dụ 10 điểm, cùng xem xem trong 10 điểm ngay gần nhất, class nào chiếm nhiều phần thì dự đoán tác dụng là class đó. Chuyên môn dựa vào đa số này được điện thoại tư vấn là major voting.


clf = neighbors.KNeighborsClassifier(n_neighbors = 10, p = 2)clf.fit(X_train, y_train)y_pred = clf.predict(X_test)print "Accuracy of 10NN with major voting: %.2f %%" %(100*accuracy_score(y_test, y_pred))
Kết trái đã tạo thêm 98%, khôn xiết tốt!

Đánh trọng số cho những điểm lạm cận

Là một kẻ tham lam, tôi chưa mong muốn dừng hiệu quả ở đây do thấy rằng mình vẫn đang còn thể nâng cao được. Trong kỹ thuật major voting mặt trên, mỗi trong 10 điểm gần nhất được xem là có vai trò tương đồng và cực hiếm lá phiếu của mỗi đặc điểm đó là như nhau. Tôi đến rằng như thế là không công bằng, vì rõ ràng rằng đa số điểm gần hơn nên có trọng số cao hơn (càng thân cận thì sẽ càng tin tưởng). Vậy yêu cầu tôi sẽ đánh trọng số khác nhau cho từng trong 10 điểm sớm nhất này. Bí quyết đánh trọng số cần thoải mãn điều kiện là 1 điểm càng ngay sát điểm chạy thử data thì buộc phải được đánh trọng số càng cao (tin tưởng hơn). Cách dễ dàng và đơn giản nhất là mang nghịch hòn đảo của khoảng cách này. (Trong trường hợp test data trùng với cùng 1 điểm dữ liệu trong training data, tức khoảng cách bằng 0, ta lấy luôn label của điểm training data).

Scikit-learn giúp chúng ta đơn giản hóa việc này bằng phương pháp gán gía trị weights = "distance". (Giá trị mang định của weights là "uniform", khớp ứng với vấn đề coi toàn bộ các điểm ở kề bên có giá bán trị đồng nhất như sinh sống trên).


clf = neighbors.KNeighborsClassifier(n_neighbors = 10, p = 2, weights = "distance")clf.fit(X_train, y_train)y_pred = clf.predict(X_test)print "Accuracy of 10NN (1/distance weights): %.2f %%" %(100*accuracy_score(y_test, y_pred))
Aha, 100%.

Chú ý: ko kể 2 phương pháp đánh trọng số weights = "uniform" cùng weights = "distance" sinh hoạt trên, scikit-learn còn cung cấp cho chúng ta một cách để đánh trọng số một giải pháp tùy chọn. Ví dụ, một bí quyết đánh trọng số phổ cập khác trong Machine Learning là:

trong kia (mathbfx) là thử nghiệm data, (mathbfx_i) là 1 trong điểm trong K-lân cận của (mathbfx), (w_i) là trọng số của điểm đó (ứng cùng với điểm tài liệu đang xét (mathbfx)), (sigma) là một trong những dương. Nhận ra rằng hàm số này cũng vừa lòng điều kiện: điểm càng gần (mathbfx) thì trọng số càng cao (cao nhất bằng 1). Với hàm số này, bạn có thể lập trình như sau:


def myweight(distances): sigma2 = .5 # we can change this number return np.exp(-distances**2/sigma2)clf = neighbors.KNeighborsClassifier(n_neighbors = 10, phường = 2, weights = myweight)clf.fit(X_train, y_train)y_pred = clf.predict(X_test)print "Accuracy of 10NN (customized weights): %.2f %%" %(100*accuracy_score(y_test, y_pred))
Trong trường hợp này, kết quả tương đương với nghệ thuật major voting. Để tấn công giá chính xác hơn hiệu quả của KNN cùng với K không giống nhau, bí quyết định nghĩa khoảng chừng cách khác biệt và bí quyết đánh trọng số khác nhau, họ cần thực hiện quy trình trên với nhiều phương pháp chia dữ liệu trainingtest không giống nhau rồi lấy kết quả trung bình, bởi vì rất hoàn toàn có thể dữ liệu phân chia trong một trường hợp ví dụ là cực tốt hoặc siêu xấu (bias). Đây cũng là phương pháp thường được sử dụng khi reviews hiệu năng của một thuật toán ví dụ nào đó.

4. Thảo luận

KNN cho Regression

Với câu hỏi Regression, họ cũng trả toàn hoàn toàn có thể sử dụng phương thức tương tự: ước lượng đầu ra dựa vào đầu ra và khoảng cách của các điểm trong K-lân cận. Câu hỏi ước lượng ra sao các chúng ta có thể tự định nghĩa tùy vào từng bài toán.


*

Chuẩn hóa dữ liệu

Khi bao gồm một thuộc tính trong tài liệu (hay thành phần trong vector) to hơn các nằm trong tính khác không ít (ví dụ thay do đo bởi cm thì một công dụng lại tính bởi mm), khoảng cách giữa các điểm sẽ nhờ vào vào nằm trong tính này khôn xiết nhiều. Để có được kết quả đúng mực hơn, một chuyên môn thường được dùng là Data Normalization (chuẩn hóa dữ liệu) để lấy các ở trong tính có đơn vị đo khác biệt về thuộc một khoảng chừng giá trị, thường xuyên là trường đoản cú 0 mang đến 1, trước khi triển khai KNN. Có khá nhiều kỹ thuật chuẩn chỉnh hóa khác nhau, các các bạn sẽ được thấy khi tiếp tục theo dõi Blog này. Những kỹ thuật chuẩn chỉnh hóa được áp dụng với không chỉ KNN hơn nữa với số đông các thuật toán khác.

Sử dụng những phép đo khoảng cách khác nhau

Ngoài norm 1 cùng norm 2 tôi trình làng trong bài này, còn không ít các khoảng cách khác nhau rất có thể được dùng. Một ví dụ dễ dàng và đơn giản là đếm con số thuộc tính khác biệt giữa nhì điểm dữ liệu. Số này càng bé dại thì hai điểm càng sát nhau. Đây đó là giả chuẩn chỉnh 0 mà lại tôi đã ra mắt trong Tab Math.

Ưu điểm của KNN

Độ phức tạp đo lường và thống kê của quy trình training là bằng 0. Câu hỏi dự đoán kết quả của tài liệu mới rất solo giản. Không phải giả sử gì về phân phối của các class.

Nhược điểm của KNN

KNN rất nhạy cảm với nhiễu lúc K nhỏ. Như sẽ nói, KNN là 1 thuật toán nhưng mọi tính toán đều nằm tại khâu test. Trong số đó việc tính khoảng cách tới từng điểm dữ liệu trong training set vẫn tốn rất nhiều thời gian, đặc biệt là với các cơ sở dữ liệu có số chiều to và có nhiều điểm dữ liệu. Với K càng bự thì độ phức tạp cũng trở thành tăng lên. Quanh đó ra, bài toán lưu cục bộ dữ liệu trong bộ lưu trữ cũng ảnh hưởng tới hiệu năng của KNN.

Tăng tốc cho KNN

Ngoài việc đo lường và thống kê khoảng cách xuất phát từ 1 điểm kiểm tra data đến tất cả các điểm vào traing mix (Brute Force), có một số trong những thuật toán khác giúp tăng tốc việc tìm kiếm kiếm này. Bạn đọc có thẻ tra cứu kiếm thêm với hai từ khóa: K-D Tree với Ball Tree. Tôi xin dành riêng phần này cho người hâm mộ tự search hiểu, cùng sẽ quay trở về nếu tất cả dịp. Họ vẫn còn đông đảo thuật toán đặc trưng hơn khác bắt buộc nhiều sự vồ cập hơn.

Try this yourself

Tôi tất cả viết một quãng code ngắn để tiến hành việc Classification cho cơ sở dữ liệu MNIST. Các bạn hãy download toàn cục bộ tài liệu này về vì sau này chúng ta còn dùng nhiều, chạy thử, bình luận kết quả với nhận xét của các bạn vào phần bình luận bên dưới. Để vấn đáp cho thắc mắc vì sao tôi không lựa chọn cơ sở tài liệu này làm ví dụ, bạn đọc hoàn toàn có thể tự search ra giải đáp khi chạy xong xuôi đoạn code này.

Enjoy!


# %resetimport numpy as np from mnist import MNIST # require `pip install python-mnist`# https://pypi.python.org/pypi/python-mnist/import matplotlib.pyplot as pltfrom sklearn import neighborsfrom sklearn.metrics import accuracy_scoreimport time# you need to tải về the MNIST dataset first# at: http://yann.lecun.com/exdb/mnist/mndata = MNIST("../MNIST/") # path khổng lồ your MNIST folder mndata.load_testing()mndata.load_training()X_test = mndata.test_imagesX_train = mndata.train_imagesy_test = np.asarray(mndata.test_labels)y_train = np.asarray(mndata.train_labels)start_time = time.time()clf = neighbors.KNeighborsClassifier(n_neighbors = 1, p. = 2)clf.fit(X_train, y_train)y_pred = clf.predict(X_test)end_time = time.time()print "Accuracy of 1NN for MNIST: %.2f %%" %(100*accuracy_score(y_test, y_pred))print "Running time: %.2f (s)" % (end_time - start_time)
Nếu có câu hỏi, chúng ta có thể để lại comment dưới hoặc trên forum để nhận được câu vấn đáp sớm hơn.Bạn đọc hoàn toàn có thể ủng hộ blog qua "Buy me a cofee" ở góc cạnh trên phía bên trái của blog.

Xem thêm: Lộ Kết Quả The Face - Hot: The Face Vietnam Lộ Kết Quả Chung Cuộc

Tôi vừa xong cuốn ebook "Machine Learning cơ bản", chúng ta cũng có thể đặt sách trên đây.Cảm ơn bạn.