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 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 để có thể cung cấp dữ liệu đó 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.
Tiền xử lý 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 cho các thuật toán học máy, chúng ta cần chuyển đổi nó thành một dữ liệu có ý nghĩa. Đó là nơi tiền xử lý dữ liệu xuất hiện. Nói một cách đơn giản, 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 xử lý trước dữ liệu.
Các bước tiền xử lý dữ liệu
Thực hiện theo các bước sau để xử lý trước dữ liệu trong Python –
Bước 1 – Nhập các gói hữu ích – 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 có mục đích chung được thiết kế để thao tác hiệu quả các mảng lớn đa chiều 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 cho các thuật toán học máy.
Bước 2 – Xác định dữ liệu mẫu – Sau khi nhập các gói, chúng tôi 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 tôi 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])
Bước 3 – Áp dụng kỹ thuật tiền xử lý – 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 tiền xử lý dữ liệu được mô tả bên dưới –
nhị phân hóa
Đâ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 giá trị Boolean. Chúng ta có thể sử dụng một phương thức sẵn có để nhị phân 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 đầu ra sau, tất cả các giá trị trên 0,5 (giá trị ngưỡng) sẽ được chuyển thành 1 và tất cả các giá trị dưới 0,5 sẽ được chuyển thành 0.
Dữ liệu nhị phân
[[ 1. 0. 1.]
[ 0. 1. 1.]
[ 0. 0. 1.]
[ 1. 1. 0.]]
có nghĩa là loại bỏ
Đâ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 sao cho mọi đặc trưng đều tập trung vào số không. Chúng tôi cũng có thể loại bỏ sai lệch khỏi các tính năng trong vectơ đặc trư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à 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ờ, mã bên dưới sẽ loại bỏ Độ lệch trung bình và 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ô
Đây 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. Việc chia tỷ lệ các vectơ đặc trưng là cần thiết vì các giá trị của mọi đặc trư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 vì chúng ta không muốn bất kỳ tính năng nào trở nên lớn hoặc nhỏ về mặt tổng hợp. Với sự trợ giúp của mã Python sau, chúng ta có thể thực hiện chia tỷ lệ dữ liệu đầu vào của mình, tức là, vectơ đặc trưng –
# Tỷ lệ tối đa tối thiểu
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 –
Dữ liệu được chia tỷ lệ tối thiểu tối đa
[ [ 0.48648649 0.58252427 0.99122807]
[ 0. 1. 0.81578947]
[ 0.27027027 0. 1. ]
[ 1. 0. 99029126 0. ]]
bình thường hóa
Đây 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 thang điểm chung. Sau đây là hai loại chuẩn hóa có thể được sử dụng trong học máy
Chuẩn hóa L1 Nó còn được gọi là Độ lệch tuyệt đối nhỏ nhất . Loại chuẩn hóa này sửa đổi các giá trị sao cho tổng các giá trị tuyệt đối luôn bằng 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 đầu ra sau &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]]
Chuẩn hóa L2 Nó còn được gọi là bình phương nhỏ nhất . Kiểu chuẩn hóa này sửa đổi các giá trị sao cho tổng bình phương luôn bằng 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 đầu ra 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 ]]
Ghi nhãn dữ liệu
Chúng tôi đã 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 gắn nhãn phù hợp trước khi gửi nó làm đầ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 trong sklearn yêu cầu 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 chuyển đổi 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
Thực hiện theo các bước sau để mã hóa nhãn dữ liệu trong Python –
Bước 1 – Nhập các gói hữu ích 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
Bước 2 – Xác định nhãn mẫu Sau khi nhập các gói, chúng tôi cần xác định một số nhãn mẫu để có thể tạo và huấn luyện 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']
Bước 3 – Tạo và huấn luyện đối tượng bộ mã hóa nhãn Trong bước này, chúng ta cần tạo bộ mã hóa nhãn và huấn luyện nó. Mã Python sau đây sẽ giúp thực hiện điều 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()
Bước 4 – Kiểm tra hiệu suất bằng cách mã hóa danh sách có thứ tự ngẫu nhiên 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ó thứ tự ngẫu nhiên. Mã Python sau đây có thể được viết để làm điều tương tự
# encoding a set of labels
test_labels = ['green','red','black']
encoded_values = encoder.transform(test_labels)
print("\nLabels =", test_labels)
Labels = ['green', 'red', 'black']
Bây giờ, chúng ta có thể lấy danh sách các giá trị được mã hóa, tức là 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 ra như sau
Encoded values = [1, 2, 0]
Bước 5 – Kiểm tra hiệu suất bằng cách giải mã một bộ số ngẫu nhiên – 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 đây có thể được viết để làm điều 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 ra như sau –
Decoded labels = ['white', 'black', 'yellow', 'green']
Dữ liệu được gắn nhãn v/s Không được gắn nhãn
Dữ liệu chưa được gắn nhãn chủ yếu bao gồm các mẫu đối tượng 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, hình ả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 chưa được gắn nhãn và tăng thêm từng phần của dữ liệu chưa được gắn nhãn đó bằng 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ô bé 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 phán đoán 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 chưa được gắn nhãn rất phong phú và dễ dàng thu đượ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 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
Xem thêm : AI với Python – Học có giám sát: Phân loại