AI với Python - Chuẩn bị dữ liệu
Chúng tôi đã nghiên cứu các thuật toán học máy có giám sát cũng như không được giám sát. Các thuật toán này yêu cầu dữ liệu được định dạng để bắt đầu quá trình đào tạo. Chúng ta phải chuẩn bị hoặc định dạng dữ liệu theo một cách nhất định để nó có thể được cung cấp làm đầu vào cho các thuật toán ML.
Chương này tập trung vào việc chuẩn bị dữ liệu cho các thuật toán học máy.
Xử lý trước dữ liệu
Trong cuộc sống hàng ngày, chúng ta xử lý rất nhiều dữ liệu nhưng dữ liệu này ở dạng thô. Để cung cấp dữ liệu làm đầu vào của các thuật toán học máy, chúng ta cần chuyển nó thành một dữ liệu có ý nghĩa. Đó là nơi mà quá trình tiền xử lý dữ liệu trở thành hình ảnh. Nói cách khác, chúng ta có thể nói rằng trước khi cung cấp dữ liệu cho các thuật toán học máy, chúng ta cần phải xử lý trước dữ liệu.
Các bước xử lý trước dữ liệu
Làm theo các bước sau để xử lý trước dữ liệu bằng Python -
Step 1 − Importing the useful packages - Nếu chúng ta đang sử dụng Python thì đây sẽ là bước đầu tiên để chuyển đổi dữ liệu sang một định dạng nhất định, tức là tiền xử lý. Nó có thể được thực hiện như sau:
import numpy as np
import sklearn.preprocessing
Ở đây chúng tôi đã sử dụng hai gói sau:
NumPy - Về cơ bản NumPy là một gói xử lý mảng đa chiều được thiết kế để thao tác hiệu quả các mảng đa chiều lớn của các bản ghi tùy ý mà không phải hy sinh quá nhiều tốc độ cho các mảng đa chiều nhỏ.
Sklearn.preprocessing - Gói này cung cấp nhiều hàm tiện ích phổ biến và các lớp biến áp để thay đổi các vectơ đặc trưng thô thành một biểu diễn phù hợp hơn với các thuật toán học máy.
Step 2 − Defining sample data - Sau khi nhập các gói, chúng ta cần xác định một số dữ liệu mẫu để có thể áp dụng các kỹ thuật tiền xử lý trên dữ liệu đó. Bây giờ chúng ta sẽ xác định dữ liệu mẫu sau:
input_data = np.array([2.1, -1.9, 5.5],
[-1.5, 2.4, 3.5],
[0.5, -7.9, 5.6],
[5.9, 2.3, -5.8])
Step3 − Applying preprocessing technique - Trong bước này, chúng ta cần áp dụng bất kỳ kỹ thuật tiền xử lý nào.
Phần sau đây mô tả các kỹ thuật tiền xử lý dữ liệu.
Kỹ thuật tiền xử lý dữ liệu
Các kỹ thuật để xử lý trước dữ liệu được mô tả dưới đây:
Binarization
Đây là kỹ thuật tiền xử lý được sử dụng khi chúng ta cần chuyển đổi các giá trị số thành các giá trị Boolean. Chúng ta có thể sử dụng một phương thức có sẵn để mã hóa dữ liệu đầu vào bằng cách sử dụng 0,5 làm giá trị ngưỡng theo cách sau:
data_binarized = preprocessing.Binarizer(threshold = 0.5).transform(input_data)
print("\nBinarized data:\n", data_binarized)
Bây giờ, sau khi chạy đoạn mã trên, chúng ta sẽ nhận được kết quả sau, tất cả các giá trị trên 0,5 (giá trị ngưỡng) sẽ được chuyển đổi thành 1 và tất cả các giá trị dưới 0,5 sẽ được chuyển thành 0.
Binarized data
[[ 1. 0. 1.]
[ 0. 1. 1.]
[ 0. 0. 1.]
[ 1. 1. 0.]]
Loại bỏ trung bình
Đây là một kỹ thuật tiền xử lý rất phổ biến khác được sử dụng trong học máy. Về cơ bản, nó được sử dụng để loại bỏ giá trị trung bình khỏi vectơ đặc trưng để mọi đối tượng đều được căn giữa bằng 0. Chúng tôi cũng có thể xóa sai lệch khỏi các đối tượng trong vectơ đối tượng. Để áp dụng kỹ thuật tiền xử lý loại bỏ trung bình trên dữ liệu mẫu, chúng ta có thể viết mã Python được hiển thị bên dưới. Mã sẽ hiển thị Độ lệch trung bình và Độ lệch chuẩn của dữ liệu đầu vào -
print("Mean = ", input_data.mean(axis = 0))
print("Std deviation = ", input_data.std(axis = 0))
Chúng ta sẽ nhận được đầu ra sau khi chạy các dòng mã trên:
Mean = [ 1.75 -1.275 2.2]
Std deviation = [ 2.71431391 4.20022321 4.69414529]
Bây giờ, đoạn mã dưới đây sẽ loại bỏ Độ lệch trung bình và Độ lệch chuẩn của dữ liệu đầu vào -
data_scaled = preprocessing.scale(input_data)
print("Mean =", data_scaled.mean(axis=0))
print("Std deviation =", data_scaled.std(axis = 0))
Chúng ta sẽ nhận được đầu ra sau khi chạy các dòng mã trên:
Mean = [ 1.11022302e-16 0.00000000e+00 0.00000000e+00]
Std deviation = [ 1. 1. 1.]
Mở rộng quy mô
Nó là một kỹ thuật tiền xử lý dữ liệu khác được sử dụng để chia tỷ lệ các vectơ đặc trưng. Chia tỷ lệ của vectơ đối tượng là cần thiết vì giá trị của mọi đối tượng có thể khác nhau giữa nhiều giá trị ngẫu nhiên. Nói cách khác, chúng ta có thể nói rằng việc mở rộng quy mô là quan trọng bởi vì chúng tôi không muốn bất kỳ đối tượng địa lý nào là tổng hợp lớn hay nhỏ. Với sự trợ giúp của mã Python sau, chúng ta có thể thực hiện việc chia tỷ lệ dữ liệu đầu vào của mình, tức là vector đặc trưng -
# Min max scaling
data_scaler_minmax = preprocessing.MinMaxScaler(feature_range=(0,1))
data_scaled_minmax = data_scaler_minmax.fit_transform(input_data)
print ("\nMin max scaled data:\n", data_scaled_minmax)
Chúng ta sẽ nhận được đầu ra sau khi chạy các dòng mã trên:
Min max scaled data
[ [ 0.48648649 0.58252427 0.99122807]
[ 0. 1. 0.81578947]
[ 0.27027027 0. 1. ]
[ 1. 0. 99029126 0. ]]
Bình thường hóa
Nó là một kỹ thuật tiền xử lý dữ liệu khác được sử dụng để sửa đổi các vectơ đặc trưng. Loại sửa đổi như vậy là cần thiết để đo các vectơ đặc trưng trên một tỷ lệ chung. Tiếp theo là hai loại chuẩn hóa có thể được sử dụng trong học máy -
L1 Normalization
Nó cũng được gọi là Least Absolute Deviations. Loại chuẩn hóa này sửa đổi các giá trị để tổng các giá trị tuyệt đối luôn lên đến 1 trong mỗi hàng. Nó có thể được triển khai trên dữ liệu đầu vào với sự trợ giúp của mã Python sau:
# Normalize data
data_normalized_l1 = preprocessing.normalize(input_data, norm = 'l1')
print("\nL1 normalized data:\n", data_normalized_l1)
Dòng mã trên tạo ra kết quả & miuns;
L1 normalized data:
[[ 0.22105263 -0.2 0.57894737]
[ -0.2027027 0.32432432 0.47297297]
[ 0.03571429 -0.56428571 0.4 ]
[ 0.42142857 0.16428571 -0.41428571]]
L2 Normalization
Nó cũng được gọi là least squares. Loại chuẩn hóa này sửa đổi các giá trị để tổng các ô vuông luôn lên đến 1 trong mỗi hàng. Nó có thể được triển khai trên dữ liệu đầu vào với sự trợ giúp của mã Python sau:
# Normalize data
data_normalized_l2 = preprocessing.normalize(input_data, norm = 'l2')
print("\nL2 normalized data:\n", data_normalized_l2)
Dòng mã trên sẽ tạo ra kết quả sau:
L2 normalized data:
[[ 0.33946114 -0.30713151 0.88906489]
[ -0.33325106 0.53320169 0.7775858 ]
[ 0.05156558 -0.81473612 0.57753446]
[ 0.68706914 0.26784051 -0.6754239 ]]
Gắn nhãn dữ liệu
Chúng ta đã biết rằng dữ liệu ở một định dạng nhất định là cần thiết cho các thuật toán học máy. Một yêu cầu quan trọng khác là dữ liệu phải được dán nhãn thích hợp trước khi gửi nó như là đầu vào của các thuật toán học máy. Ví dụ, nếu chúng ta nói về phân loại, có rất nhiều nhãn trên dữ liệu. Các nhãn đó ở dạng từ, số, v.v. Các chức năng liên quan đến học máy trongsklearnmong đợi rằng dữ liệu phải có nhãn số. Do đó, nếu dữ liệu ở dạng khác thì nó phải được chuyển đổi thành số. Quá trình biến đổi các nhãn từ thành dạng số được gọi là mã hóa nhãn.
Các bước mã hóa nhãn
Làm theo các bước sau để mã hóa nhãn dữ liệu bằng Python -
Step1 − Importing the useful packages
Nếu chúng ta đang sử dụng Python thì đây sẽ là bước đầu tiên để chuyển đổi dữ liệu sang định dạng nhất định, tức là tiền xử lý. Nó có thể được thực hiện như sau:
import numpy as np
from sklearn import preprocessing
Step 2 − Defining sample labels
Sau khi nhập các gói, chúng ta cần xác định một số nhãn mẫu để chúng ta có thể tạo và đào tạo bộ mã hóa nhãn. Bây giờ chúng ta sẽ xác định các nhãn mẫu sau:
# Sample input labels
input_labels = ['red','black','red','green','black','yellow','white']
Step 3 − Creating & training of label encoder object
Trong bước này, chúng ta cần tạo bộ mã hóa nhãn và đào tạo nó. Đoạn mã Python sau sẽ giúp thực hiện việc này:
# Creating the label encoder
encoder = preprocessing.LabelEncoder()
encoder.fit(input_labels)
Sau đây sẽ là đầu ra sau khi chạy mã Python ở trên:
LabelEncoder()
Step4 − Checking the performance by encoding random ordered list
Bước này có thể được sử dụng để kiểm tra hiệu suất bằng cách mã hóa danh sách được sắp xếp ngẫu nhiên. Mã Python sau có thể được viết để làm tương tự:
# encoding a set of labels
test_labels = ['green','red','black']
encoded_values = encoder.transform(test_labels)
print("\nLabels =", test_labels)
Các nhãn sẽ được in như sau:
Labels = ['green', 'red', 'black']
Bây giờ, chúng ta có thể nhận được danh sách các giá trị được mã hóa tức là các nhãn từ được chuyển đổi thành số như sau:
print("Encoded values =", list(encoded_values))
Các giá trị được mã hóa sẽ được in như sau:
Encoded values = [1, 2, 0]
Step 5 − Checking the performance by decoding a random set of numbers −
Bước này có thể được sử dụng để kiểm tra hiệu suất bằng cách giải mã bộ số ngẫu nhiên. Mã Python sau có thể được viết để làm tương tự:
# decoding a set of values
encoded_values = [3,0,4,1]
decoded_list = encoder.inverse_transform(encoded_values)
print("\nEncoded values =", encoded_values)
Bây giờ, các giá trị được mã hóa sẽ được in như sau:
Encoded values = [3, 0, 4, 1]
print("\nDecoded labels =", list(decoded_list))
Bây giờ, các giá trị được giải mã sẽ được in như sau:
Decoded labels = ['white', 'black', 'yellow', 'green']
Dữ liệu không được gắn nhãn v / s được gắn nhãn
Dữ liệu không được gắn nhãn chủ yếu bao gồm các mẫu vật thể tự nhiên hoặc do con người tạo ra có thể dễ dàng lấy được từ thế giới. Chúng bao gồm, âm thanh, video, ảnh, tin bài, v.v.
Mặt khác, dữ liệu được gắn nhãn lấy một tập hợp dữ liệu không được gắn nhãn và tăng cường mỗi phần của dữ liệu không được gắn nhãn đó với một số thẻ hoặc nhãn hoặc lớp có ý nghĩa. Ví dụ, nếu chúng ta có một bức ảnh thì nhãn có thể được đặt dựa trên nội dung của bức ảnh, tức là ảnh của một cậu bé hoặc cô gái hoặc động vật hoặc bất cứ thứ gì khác. Việc gắn nhãn dữ liệu cần có chuyên môn hoặc sự đánh giá của con người về một phần dữ liệu chưa được gắn nhãn nhất định.
Có nhiều tình huống trong đó dữ liệu không được gắn nhãn rất phong phú và dễ dàng lấy được nhưng dữ liệu được gắn nhãn thường yêu cầu con người / chuyên gia chú thích. Học tập bán giám sát cố gắng kết hợp dữ liệu được gắn nhãn và không được gắn nhãn để xây dựng các mô hình tốt hơn.