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ụ :
Đầu ra sau một lần mã hóa nóng(One Hot) dữ liệu được đưa ra như sau,
2. Dưới đây là Triển khai bằng PythonVí dụ 1 : Output: 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 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 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 Một mã hóa nóng những cột giới tính và địa lý Output 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ú :
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! |