Onehotencoder là gì

Đối với học máy, bạn gần như chắc chắn muốn sử dụng sklearn.OneHotEncoder. Đối với các tác vụ khác như phân tích đơn giản, bạn có thể sử dụng pd.get_dummies, Tiện lợi hơn một chút .

Lưu ý rằng sklearn.OneHotEncoder Đã được cập nhật trong phiên bản mới nhất để nó không chấp nhận chuỗi cho các biến phân loại, cũng như các số nguyên.

Điểm mấu chốt của nó là bộ mã hóa sklearn tạo ra một hàm vẫn tồn tại và có thể sau đó được áp dụng cho các tập dữ liệu mới sử dụng cùng một biến phân loại, với kết quả phù hợp.

from sklearn.preprocessing import OneHotEncoder # Create the encoder. encoder = OneHotEncoder(handle_unknown="ignore") encoder.fit(X_train) # Assume for simplicity all features are categorical. # Apply the encoder. X_train = encoder.transform(X_train) X_test = encoder.transform(X_test)

Lưu ý cách chúng tôi áp dụng cùng một bộ mã hóa mà chúng tôi đã tạo qua X_train Cho tập dữ liệu mới X_test.

Xem xét điều gì xảy ra nếu X_test Chứa các mức khác với X_train Cho một trong các biến của nó. Ví dụ: giả sử X_train["color"] Chỉ chứa "red" Và "green", Nhưng ngoài những thứ đó, X_test["color"] Đôi khi còn chứa "blue".

Nếu chúng tôi sử dụng pd.get_dummies, X_test Sẽ kết thúc bằng một cột "color_blue" Bổ sung mà X_train Không có và sự không nhất quán có thể sẽ phá vỡ mã của chúng tôi sau này trên, đặc biệt là nếu chúng tôi đang cho X_test vào mô hình sklearn mà chúng tôi đã đào tạo trên X_train.

Và nếu chúng tôi muốn xử lý dữ liệu như thế này trong sản xuất, tại đó chúng tôi sẽ nhận được một ví dụ duy nhất tại một thời điểm, pd.get_dummies Sẽ không được sử dụng.

Mặt khác, với sklearn.OneHotEncoder, Một khi chúng ta đã tạo bộ mã hóa, chúng ta có thể sử dụng lại nó để tạo ra cùng một đầu ra mỗi lần, với các cột chỉ cho "red" Và "green". Và chúng ta có thể kiểm soát rõ ràng những gì xảy ra khi nó gặp cấp độ mới "blue": Nếu chúng ta nghĩ điều đó là không thể, thì chúng ta có thể bảo nó ném lỗi với handle_unknown="error"; nếu không, chúng ta có thể yêu cầu nó tiếp tục và chỉ cần đặt các cột màu đỏ và màu xanh lá cây thành 0, với handle_unknown="ignore".

Đôi khi trong tập dữ liệu, chúng ta gặp các cột chứa các số không có thứ tự ưu tiên cụ thể. Dữ liệu trong cột thường biểu thị một danh mục hoặc giá trị của danh mục và cả khi dữ liệu trong cột được mã hóa nhãn. Điều này gây nhầm lẫn cho mô hình ML, để tránh điều này, dữ liệu trong cột phải được mã hóa One Hot.

Nó đề cập đến việc chia nhỏ cột chứa dữ liệu phân loại số thành nhiều cột tùy thuộc vào số lượng danh mục có trong cột đó. Mỗi cột chứa “0” hoặc “1” tương ứng với cột mà nó đã được đặt.

Ví dụ :
Xem xét tài liệu mà trái cây và giá trị phân loại tương ứng của chúng được đưa ra .

FRUITCATEGORICAL VALUE OF FRUITPRICE
apple 1 5
mango 2 10
apple 1 15
orange 3 20

Đầu ra sau một lần mã hóa nóng(One Hot) dữ liệu được đưa ra như sau,

APPLEMANGOORANGEPRICE
1 0 0 5
0 1 0 10
1 0 0 15
0 0 1 20

2. Dưới đây là Triển khai bằng Python

Ví dụ 1 :
Ví dụ sau đây là tài liệu về khu vực và điểm tín dụng thanh toán của người mua, khu vực là một giá trị phân loại cần được mã hóa nóng .

# Program for demonstration of one hot encoding # import libraries import numpy as np import pandas as pd # import the data required data = pd.read_csv(r"../../onehotenc_data.csv") print(data)

Output:

Onehotencoder là gì

3. Để một mã hóa nóng cột vùng

# ----------------------------------------------------------- #Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam #@author cafedevn #Contact: [email protected] #Fanpage: https://www.facebook.com/cafedevn #Group: https://www.facebook.com/groups/cafedev.vn/ #Instagram: https://instagram.com/cafedevn #Twitter: https://twitter.com/CafedeVn #Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/ #Pinterest: https://www.pinterest.com/cafedevvn/ #YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/ # ----------------------------------------------------------- brightness_4 # importing one hot encoder from sklearn # There are changes in OneHotEncoder class from sklearn.preprocessing import OneHotEncoder from sklearn.compose import ColumnTransformer # creating one hot encoder object with categorical feature 0 # indicating the first column columnTransformer = ColumnTransformer([('encoder', OneHotEncoder(), [0])], remainder='passthrough') data = np.array(columnTransformer.fit_transform(data), dtype = np.str)

Output

Onehotencoder là gì

Kết quả gồm có 5 cột, một cột cho giá và 4 cột còn lại đại diện thay mặt cho 4 khu vực .
Ví dụ 2 :
Một bộ mã hóa nóng chỉ nhận những giá trị phân loại bằng số, do đó bất kể giá trị nào của loại chuỗi phải được mã hóa nhãn trước khi mã hóa một nóng .

Ví dụ dưới đây có dữ liệu về địa lý và giới tính của khách hàng phải được mã hóa nhãn trước.

# importing libraries import numpy as np import pandas as pds # After importing the required data print(data)

Output

Onehotencoder là gì

4. Mã hóa Nhãn dữ liệu

# label encoding the data from sklearn.preprocessing import LabelEncoder le = LabelEncoder() data['Gender']= le.fit_transform(data['Gender']) data['Geography']= le.fit_transform(data['Geography'])

Output

Onehotencoder là gì

Một mã hóa nóng những cột giới tính và địa lý

# importing one hot encoder from sklearn from sklearn.preprocessing import OneHotEncoder # creating one hot encoder object by default # entire data passed is one hot encoded onehotencoder = OneHotEncoder() data = np.array(columnTransformer.fit_transform(data), dtype = np.str)

Output

Onehotencoder là gì

Kết quả gồm có 5 cột, 2 cột đại diện thay mặt cho giới tính, nam và nữ, 3 cột còn lại đại diện thay mặt cho những vương quốc Pháp, Đức và Tây Ban Nha .

Ghi chú :

  • Một bộ mã hóa nóng không chấp nhận mảng 1 chiều hoặc chuỗi gấu trúc, đầu vào phải luôn là 2 Chiều.
  • Dữ liệu được chuyển đến bộ mã hóa không được chứa chuỗi.

Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.

Nguồn và Tài liệu tiếng anh tham khảo:

Tài liệu từ cafedev:

Nếu bạn thấy hay và có ích, bạn hoàn toàn có thể tham gia những kênh sau của cafedev để nhận được nhiều hơn nữa :

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!