Hướng dẫn dùng encoding python python
Trang trước Show
Nội dung chính
Nội dung chính
Trang sau Miêu tảPhương thức encode() trả về phiên bản chuỗi đã được mã hóa của chuỗi ban đầu. Nếu có lỗi xảy ra, thì chương trình sẽ tạo một ValueError trừ khi các lỗi này được cung cấp với ignore hoặc replace. Cú phápstr.encode(encoding='UTF-8',errors='strict') Chi tiết về tham số:
Quảng cáo Trả về giá trịTrả về phiên bản chuỗi đã được mã hóa của chuỗi ban đầu. Chương trình Python ví dụstr = "vi du Python ve chuoi!!!"; print "Ma hoa chuoi la: " + str.encode('base64','strict') Kết quả là: Ma hoa chuoi la: dmkgZHUgUHl0aG9uIHZlIGNodW9pISEh Trang trước Trang sau string_trong_python.jsp Bài viết liên quan
Trang trước Trang sau Miêu tảPhương thức encode() trả về phiên bản chuỗi đã được mã hóa của chuỗi ban đầu. Nếu có lỗi xảy ra, thì chương trình sẽ tạo một ValueError trừ khi các lỗi này được cung cấp với ignore hoặc replace. Cú phápstr.encode(encoding='UTF-8',errors='strict') Chi tiết về tham số:
Quảng cáo Trả về giá trịTrả về phiên bản chuỗi đã được mã hóa của chuỗi ban đầu. Chương trình Python ví dụstr = "vi du Python ve chuoi!!!"; print "Ma hoa chuoi la: " + str.encode('base64','strict') Kết quả là: Ma hoa chuoi la: dmkgZHUgUHl0aG9uIHZlIGNodW9pISEh Trang trước Trang sau string_trong_python.jsp Bài viết liên quan
Trang trước Trang sau Miêu tảPhương thức encode() trả về phiên bản chuỗi đã được mã hóa của chuỗi ban đầu. Nếu có lỗi xảy ra, thì chương trình sẽ tạo một ValueError trừ khi các lỗi này được cung cấp với ignore hoặc replace. Cú phápstr.encode(encoding='UTF-8',errors='strict') Chi tiết về tham số:
Quảng cáo Trả về giá trịTrả về phiên bản chuỗi đã được mã hóa của chuỗi ban đầu. Chương trình Python ví dụstr = "vi du Python ve chuoi!!!"; print "Ma hoa chuoi la: " + str.encode('base64','strict') Kết quả là: Ma hoa chuoi la: dmkgZHUgUHl0aG9uIHZlIGNodW9pISEh Trang trước Trang sau string_trong_python.jsp Bài viết liên quan
Tôi có một tập dữ liệu được tải bởi khung dữ liệu trong đó nhãn lớp cần được mã hóa bằng Nội dung chính
Để thực hiện mã hóa nhãn, tôi đã thử cách sau nhưng không hoạt động. Làm thế nào tôi có thể sửa chữa nó?
22 hữu ích 3 bình luận 26k xem chia sẻ Xin chào mọi người, trong phần trước của series mình đã giới thiệu với mọi người một số phương pháp xử lý với dữ liệu dạng số liên tục (Continuous Numeric Data). Trong phần tiếp theo này chúng ta sẽ tiếp tục với series Understanding Feature Engineering của Dipanjan (DJ) Sarkar để tìm hiểu về một số phương pháp feature engineering với dữ liệu dạng phân loại (Categorical Data). Giới thiệuTrong phần trước chúng ta đã đề cập đến các phương pháp feature engineering với các dữ liệu dạng số liên tục. Trong bài viết này, chúng ta sẽ xem xét một loại dữ liệu có cấu trúc khác, về bản chất là một dạng dữ liệu rời rạc, thường được gọi là dữ liệu phân loại (categorical data). Xử lý dữ liệu số thường dễ hơn dữ liệu phân loại bởi chúng ta không phải đối phó với sự phức tạp của ngữ nghĩa, bối cảnh liên quan đến từng category hoặc type của dữ liệu. Chúng ta sẽ sử dụng các ví dụ thực tế và thảo luận về một số phương pháp mã hóa để xử lý dữ liệu dạng phân loại và một số kỹ thuật để xử lý số lượng lớn nhóm phân loại (thường được gọi là "curse of dimensionality") Sự cần thiếtVới các bạn đọc đã đi đến phần này của series chắc các bạn đã nhận ra được sự cần thiết và tầm quan trọng của các kỹ thuật feature engineering mà chúng ta đã nhấn mạnh trong phần đầu tiên của series này. Mọi người có thể đọc nhanh lại nếu cần thiết. Tóm lại, các thuật toán học máy không thể làm việc trực tiếp với dữ liệu dạng phân loại và bạn cần thực hiện các kỹ thuật biến đổi trên dữ liệu dạng này để có thể đưa chúng vào các mô hình của mình. Cơ bản về dữ liệu phân loại (Categorical Data)Chúng ta xem xét về ý tưởng dữ liệu phân loại trước khi đi sâu vào các phương pháp xử lý. Thông thường, dữ liêu phân loại là dạng dữ liệu có tính chất phân biệt các giá trị thành hữu hạn các nhóm. Chúng cũng thường được gọi là các phân lớp hoặc các nhãn của các thuộc tính. Các giá trị rời rach này có thể là văn bản hoặc các số tự nhiên (hoặc có thể là dữ liệu phi cấu trúc như hình ảnh). Có hai dạng chính của dữ liệu phân loại là danh nghĩa (nominal) và thứ tự (ordinal) Phân loại danh nghĩa (nominal) là dạng dữ liệu không có khái niệm sắp xếp giữa các giá trị của thuộc tính đó. Một ví dụ đơn giản về việc phân loại thời tiết như hình dưới đây. Chúng ta có thể thấy được 6 phân lớp (hoặc danh mục) trong ví dụ cụ thể này mà trong đó không có khái niệm nào về thứ tự (gió không phải lúc nào cũng xảy ra trước nắng và cũng không nhỏ hơn hoặc lớn hơn nắng) Tương tự các thể loại phim, âm nhạc, video, tên quốc gia, loại thực phẩm là một vài ví dụ khác về phân loại danh nghĩa. Phân loại thứ tự thứ tự (ordinal) là dạng dự liệu mang một số ý nghĩa về thứ tự giữa các giá trị của nó. Ví dụ hình dưới đây cho việc phân loại kích cỡ áo. Thứ tự giữa các nhóm được thể hiện rất rõ ràng trong trường hợp này như khi nói về "size" áo sơ mi thì S < M < L Tương tự, cỡ giày, trình độ học vấn, vai trò của nhân viên... là các ví dụ khác cho dạng phân loại thứ tự. Như vậy chúng ta đã có cái nhìn khái quát về dạng dữ liệu phân loại, tiếp theo hãy xem xét các phương pháp để xử lý chúng. Feature engineering cho dữ liệu phân loạiHiện nay chúng ta đã có rất nhiều tiến bộ đã được áp dụng cho các frameworks học máy để có thể sử dụng trực tiếp dữ liệu phân loại phức tạp như text label. Thông thường, bất kỳ quy trình làm việc tiêu chuẩn nào trong giai đoạn feature engineering đều liên quan đến một số dạng biến đổi các giá trị phân loại thành các nhãn dạng số (numberic label) và sau đó áp dụng một số phương pháp encoding trên các giá trị này. Đầu tiên chúng ta cần có một số cài đặt sau
Biến đổi dữ liệu phân loại danh nghĩa (Transforming Nominal Attributes)Như đã đề cập ở trên, phân loại danh nghĩa bao gồm các giá trị phân loại riêng biệt không có khái niệm hoặc ý nghĩa về thứ tự giữa chúng. Ý tưởng ở đây là biến đổi các thuộc tính này thành một dạng số đại diện hơn để có thể dễ dàng đưa vào các thuật toán và pipeline. Chúng ta hãy xem xét một bộ dữ liệu liên quan đến doanh số trò chơi điện tử. Bộ dữ liệu này được cung cấp bởi Kaggle và Github của tác giả.
Các bạn hãy tập trung vào các thuộc tính
Với đoạn code trên chúng ta có thể biết rằng có 12 thể loại trò chơi riêng việt. Bây giwof chúng ta có thể sử dụng
Như vậy chúng ta đã có được một ánh xạ trong đó mỗi giá trị của
Các Chuyển đổi dữ liệu phân loại thứ tự (Transforming Ordinal Attributes)Phân loại thứ tự là dạng dữ liệu mà các phân nhóm có quan hệ thứ tự với nhau. Chúng ta cùng xem lại Pokémon dataset mà chúng ta đã sử dụng trong phần trước của series. Hãy tập trụng vào đặc trưng
Dựa vào kết quả output ở trên chúng ta có thể thấy rằng có tổng cộng 6 thế hệ và mỗi Pokémon thường thuộc vào một thế hệ cụ thể dựa vào các trò chơi điện tử (khi chúng được phát hành) và loạt phim truyền hình theo dòng thời gian tương tự. Thuộc tính này thường là thứ tự (ở đây chúng ta cần đến kiến thức về bộ phim này) vì hầu hết các Pokémon thuộc thế hệ 1 đã được giới thiệu trước thế hệ 2 trong các trò chơi điện tử và các tập phim. Mọi người có thể kiểm tra hình ảnh dưới đây để ghi nhớ một số Pokémon phổ biến của mỗi thế hệ. Về cơ bản, không có một module cụ thể hoặc phương pháp chuyển đổi nào để ánh xạ các đặc trưng này thành dạng số một cách tự động. Do đó, chúng ta có thể tự xây dựng các ánh xạ tùy chỉnh như sau.
Từ đoạn code trên ta có thể thấy function Encoding dữ liệu phân loạiNếu bạn nhớ những gì chúng ta đã đề cập đến trong những phần trên thì các kỹ thuật xử lý trên dữ liệu phân loại bao gồm quá trình biến đổi (transformation) và quá trình encoding. Encoding là quá trình bắt buộc sử dụng các phương pháp mã hóa cụ thể để tạo ra các giá trị/phân nhóm cụ thể cho từng đặc trưng. Các bạn sẽ có câu hỏi rằng tại sau cần quá trình encoding sau khi đã biến đổi các One-hot Encoding SchemeSau bước biến đổi, chúng ta có biểu diễn dạng số của bất kỳ đặc trưng phân loại nào với m nhãn khác nhau. One-hot encoding là quá trình biến đổi từng giá trị thành các đặc trưng nhị phân chỉ chứa giá trị 1 hoặc 0. Mỗi mẫu trong đặc trưng phân loại sẽ được biến đổi thành một vecto có kích thước m chỉ với một trong các giá trị là 1 (biểu thị nó là active). Chúng ta hãy xem xét một tập con của bộ dữ liệu Pokémon.
Chúng ta sẽ quan tâm đến hai đặc trưng là
Các đặc trưng
Nhìn chung, các bạn có thể sử dụng cùng 1 object encode cho cả hai đặc trưng bằng
cách sử dụng
Như bảng trên bạn có thể thấy rằng có 6 đặc trưng nhị phân tạm thời được tạo ra cho đặc trưng
Như vậy, sau khi đã xây dựng được sơ đồ encoding như trên từ bộ dữ liệu training và bây giwof chúng ta có một số dữ liệu mới vào phải được biến đổi phù hợp với sơ đồ encoding trước đó để phục vụ cho việc dự đoán. Đầu tiên chúng ta sẽ tạo ra một số dữ liệu mới.
Bạn có thể sử dụng function
Chúng ta đã có các nhãn dạng số học (numeric labels), tiếp theo hãy áp dụng encoding
Như vậy, chúng ta có thể rất dễ dàng áp dụng các quá trình biến đổi và
encoding cho dữ liệu mới vào bằng cách sử dụng các API từ Ngoài ra, bạn cũng có thể dễ dàng áp dụng one-hot encoding bằng cách sử dụng function
Như vậy chúng ta có thể thấy rằng phương pháp này áp dụng one-hot encoding cho đặc trưng Dummy EncodingDummy Encoding là một phương pháp mã hóa tương tự như One-hot
Encoding ngoại trừ việc khi áp dụng Dummy Encoding cho một đặc trưng có m phân nhóm thì chúng ta sẽ thu được m-1 đặc trưng nhị phân. Do đó, mỗi giá trị của đặc trưng phân loại được biến đổi thành một vecto có m-1 chiều. Các nhóm/danh mục không được sử dụng toàn bộ để tạo đặc trưng tạm, như vậy giá trị của các danh mục được thêm vào sẽ là {0, 1, ..., m-1}, chúng ta sẽ bỏ đi giá trị đầu tiên hoặc giá trị
cuối cùng và giá trị tương ứng thường được biểu diễn bởi vecto 0. Chúng ta tiếp tục xem xét đặc trưng
Chúng ta cũng có thể bỏ qua giá trị cuối cùng
Từ hai ảnh trên chúng ta có thể thấy giá trị bị bỏ qua của đặc trưng sẽ được biểu diễn bởi một vecto 0. Effect encodingEfftect encoding thực chất rất giống với Dummy encoding ngoại trừ trong quá trình encode, giá trị bị bỏ qua sẽ được thay thế bằng -1 thay vì vecto 0 như trong Dummy encoding. Chúng ta hãy xem ví dụ sau.
Kết quả trên cho thấy, các Pokémon thuộc Bin-countingCác phương pháp encoding ở trên sẽ hoạt động khá tốt trên các dữ liệu phân loại nói chung. Tuy nhiên chúng sẽ bắt đầu xảy ra vấn đề khi số lượng các nhóm/danh mục trong từng đặc trưng trở nên rất lớn. Bạn luôn cần m đặc trưng riêng biệt cho một đặc trưng phân loại có m danh mục. Điều này sẽ tăng kích thước của bộ dữ liệu và gây ra các vấn đề trong việc lưu trữ và training mô hình. Bên cạnh đó, chúng ta cũng phải đối mặt với vấn đề rất phổ biến được biến đến là ‘curse of dimensionality’. Về cơ bản, số lượng đặc trưng quá lớn và không đủ số lượng mẫu cần thiết thì hiệu suất của mô hình sẽ bị ảnh hưởng và thường dẫn đến overfitting. Do đó, chúng ta cần hướng tới các phương pháp encoding khác cho các đặc trưng phân loại có số lượng danh mục quá lớn (như địa chỉ IP). Bin-counting là một phương pháp khá hữu ích. Trong phương pháp này, thay vì sử dụng các giá trị nhãn thực tế để encode, chúng ta sẽ sử dụng thông tin thông kê dựa trên xác suất về giá trị và mục tiêu thực tế hoặc label chúng ta nhắm đến để dự đoán trong các mô hình của mình. Ví dụ, dựa trên dữ liệu lịch sử quá khứ của địa chỉ IP và các địa chỉ được sử dụng trong các cuộc tấn công DDOS, chúng ta có thể xây dựng các giá trị xác suất cho một cuộc tấn công tương tự được gây ra bởi bất cứ địa chỉ IP nào. Sử dụng thông tin này, chúng ta có thể encode một địa chỉ IP xuất hiện trong tương lại có giá trị xác suất tấn công DDOS là bao nhiêu. Phương pháp này cần dữ liệu trong lịch sử như một điều kiện tiên quyết và xử lý rất công phu. Việc mô tả phương pháp này với một ví dụ hoàn chỉnh hiện tại là rất khó khăn. Feature hashingFeature hashing cũng là một phương pháp hữu ích để xử lý các đặc trưng phân loại có số lượng danh mục quá lớn. Trong phương pháp này, hàm băm thường được sử dụng với số lượng các đặc trưng tạm sinh ra được cài đặt sẵn (dưới dạng các vevto có độ dài xác định trước). Do hàm băm sẽ ánh xạ một số lượng lớn các giá trị thành một tập hữu hạn nhỏ có thể xảy ra trường hợp nhiều giá trị sẽ tạo ra cùng một hàm băm, điều này được gọi là xung đột. Hashing hoạt động với chuỗi, số hoặc các cấu trúc khác như vecto. Bạn có thể hiểu rằng các ouput được băm là một tập hợp n bins hữu hạn sao cho khi hàm băm được áp dụng trên cùng một giá trị nhóm/danh mục chúng sẽ được gán vào cùng một bin (hoặc một tập hợp các bins) trong số n bins được tạo ra trước đó. Chúng ta có thể định nghĩa trước giá trị n là kích thước cuối cùng của vecto đặc trưng sẽ được băm của từng giá trị. Do vậy, kể cả khi chúng ta có 1000 danh mục khác nhau trong một đặc trưng và chúng ta định nghĩa n = 10 làm kích thước vecto cuối cùng thì bộ đặc trưng tạm cuối cùng được sinh ra vẫn sẽ chỉ là 10 so với 1000 nếu áp dụng one-hot encoding.
Chúng ta cùng xem xét ví dụ về đặc trưng
Chúng to có thể thấy rằng có tổng cộng 12 thể loại trò chơi điện tử. Nếu chúng ta áp dụng one-hot encoding chúng ta sẽ sinh ra 12 đặc trưng nhị phân. Thay vào đó chúng ta sẽ sử dụng
Với kết quả trên, đặc trưng Kêt luậnNhững ví dụ trên đây có thể sẽ cung cấp cho bạn một số ý tưởng tối cho việc xử lý các dữ liệu dạng phân loại, rời rạc. Nếu bạn đọc trong phần trước với xử lý dữ liệu với dạng số liên tục có thể thấy rằng làm việc với dữ liệu có phần khó hơn, nhưng chắc chắn nó sẽ thú vị. Chúng ta cũng đã nói về một số cách để xử lý các không gian đặc trưng lớn hơn bằng các kỹ thuật xử lý dữ liệu bao gồm trích chọn đặc trưng và giảm kích thước để xử lý không gian đặc trưng lớn. Chúng ta sẽ đề cập đến các phương pháp này trong một series khác. Trong phân tiếp theo của series feature engineering này chúng ta sẽ bàn luật về phương pháp xử lý với dữ liệu dạng văn bản, phi cấu trúc. Hãy theo dõi nhé!!! Tài liệu tham khảohttps://towardsdatascience.com/understanding-feature-engineering-part-2-categorical-data-f54324193e63?source=---------2----------------------- |