Dự đoán các biến phân loại python

Khi tiếp cận với một bài toán học máy, khả năng cao là chúng ta sẽ phải đối mặt với dữ liệu dạng phân loại [dữ liệu phân loại]. Khác với các định dạng dữ liệu số, máy tính sẽ không thể hiểu và làm việc trực tiếp với biến phân loại. Do đó, nhiệm vụ của chúng tôi là phải tìm cách "mã hóa" danh mục định dạng dữ liệu, đưa nó về một định dạng khác để có thể đưa vào mô hình của mình

Nội dung chính Hiển thị

Nội dung chính

  • 1. Dữ liệu phân loại là gì
  • 2. Cách thức làm việc với dữ liệu phân loại
  • 2. 1. Mã hóa số nguyên/ Mã hóa thứ tự
  • 2. 2. Mã hóa một lần so với mã hóa giả
  • 2. 3. mã hóa băm
  • 2. 4. mã hóa nhị phân
  • 2. 5. Mã hóa cơ sở N
  • 2. 6. Đã học nhúng
  • Kết luận

Bài viết này là một ghi chú nơi mình ghi chú tóm tắt các cách thức để xử lý dữ liệu phân loại cũng như lưu lại mã cần thiết để sau này có thể dễ dàng tham khảo lại

1. Dữ liệu phân loại là gì

2. Cách thức làm việc với dữ liệu phân loại

2. 1. Mã hóa số nguyên/ Mã hóa thứ tự

  • 2. 2. Mã hóa một lần so với mã hóa giả
  • 2. 3. mã hóa băm

2. 4. mã hóa nhị phân

  1. 2. 5. Mã hóa cơ sở N
  2. 2. 6. Đã học nhúng
  3. Kết luận

Bài viết này là một ghi chú nơi mình ghi chú tóm tắt các cách thức để xử lý dữ liệu phân loại cũng như lưu lại mã cần thiết để sau này có thể dễ dàng tham khảo lại

2. Cách thức làm việc với dữ liệu phân loại

2. 1. Mã hóa số nguyên/ Mã hóa thứ tự

2. 2. Mã hóa một lần so với mã hóa giả

2. 3. mã hóa băm

2. 4. mã hóa nhị phân

2. 5. Mã hóa cơ sở N

2. 1. Mã hóa số nguyên/ Mã hóa thứ tự

2. 2. Mã hóa một lần so với mã hóa giả

2. 3. mã hóa băm

2. 4. mã hóa nhị phân

2. 2. Mã hóa một lần so với mã hóa giả

Mã hóa một lần nóng là một trong những cách thức mã hóa giá trị phân loại phổ biến nhất. Theo đó, mỗi danh mục giá trị sẽ tương ứng với một one-hot vector với k phần tử [k là số lượng của các giá trị khác nhau]. là một trong những cách thức mã hóa giá trị phân loại phổ biến nhất. Theo đó, mỗi danh mục giá trị sẽ tương ứng với một one-hot vector với k phần tử [k là số lượng của các giá trị khác nhau]

Cách làm như sau. với mỗi giá trị khác nhau của tính năng phân loại, chúng ta sẽ tạo ra một tính năng mới, chẳng hạn như trong ví dụ của bài này sẽ lần lượt là Category_drink, Category_food, v.v. Mỗi danh mục mới này sẽ được gán cho một giá trị là 0 hoặc 1. Nếu sản phẩm thuộc danh mục nào thì giá trị ở đó sẽ là 1. Những tính năng mới được tạo ra này được gọi là Biến giả

nhập category_encoders dưới dạng ce encoder=ce. OneHotEncoder[cols='Category', return_df=True,use_cat_names=True] data_encoded = bộ mã hóa. fit_transform[dữ liệu]

Mã hóa giả cũng tương tự như mã hóa One-hot nhưng thay vì có k biến giả mới cho k loại khác nhau thì ta chỉ cần k-1 thôi. Một danh mục còn lại sẽ được biểu thị bằng 0 ở tất cả các cột [trong ví dụ này chính là Category_drink]. tương tự như mã hóa One-hot nhưng thay vì có k biến giả mới cho k loại khác nhau thì ta chỉ cần k-1 thôi. Một danh mục còn lại sẽ được biểu thị bằng 0 ở tất cả các cột [trong ví dụ này chính là Category_drink]

dữ liệu được mã hóa = pdf. get_dummies[data=data,prefix = 'Danh mục', cột = ['Danh mục'], drop_first=True] data_encoded

Nhược điểm của mã hóa One-hot và Dummy

  • Khi các đặc trưng phân loại có một số lượng lớn các giá trị khác nhau, hoặc trong tập dữ liệu có nhiều đặc trưng phân loại, chúng ta sẽ cần đến rất nhiều biến giả để mã hóa dữ liệu. Ví dụ một tính năng có 30 giá trị khác nhau sẽ tương đương với 30 biến mới
  • Trong trường hợp trên, hai cách mã hóa này sẽ gây ra độ thưa thớt cho tập dữ liệu [rất nhiều côt 0 và rất ít cột 1]. Nói cách khác, quá nhiều biến giả được tạo ra trong tập dữ liệu mà lại không được thêm nhiều thông tin

=> không hiệu quả về bộ nhớ, dễ gây tràn bộ nhớ, làm chậm và giảm hiệu quả trong quá trình học

  • Không hiệu quả khi sử dụng mô hình dựa trên cây

2. 3. mã hóa băm

Băm là quá trình biến đầu vào là một nội dung có kích thước, độ dài bất kỳ rồi sử dụng các thuật toán, công thức toán học để biến đầu ra tiêu chuẩn có độ dài chuẩn nhất. Quá trình đó sử dụng những Hàm băm [Hash function]

Cũng giống như mã hóa one-hot, băm cũng như biểu diễn các giá trị định dạng phân loại trên các kích thước mới [bằng các tính năng mới]. Chúng ta có thể cố định số tính năng mới này. Tức giận là một tính năng A có 5 giá trị khác nhau có thể được biểu diễn bằng 10 tính năng mới và tính năng B có 100 giá trị cũng có thể được biểu diễn bằng 10 tính năng. Hàm băm mặc định được sử dụng là MD5 nhưng người dùng cũng có thể tùy chọn các hàm băm khác

bộ mã hóa = ce. Bộ mã hóa HashingEncoder[cols='Category',n_components=3]. fit_transform[dữ liệu]

=========>

Như chúng ta có thể thấy từ hình trên, vì dữ liệu băm được đưa về một số chiều thấp hơn, nó có thể làm mất mát thông tin hoặc gây ra va chạm [2 giá trị khác nhau được biểu thị giống nhau]. Tuy nhiên, đây vẫn là một kỹ thuật đáng thử nghiệm với những tính năng có sức mạnh cơ bản cao

2. 4. mã hóa nhị phân

Mã hóa nhị phân là sự kết hợp giữa Hashing và One-hot encoding. Đầu tiên các tính năng phân loại sẽ được chuyển thành các số nguyên [mã hóa thứ tự]. Sau đó, các số nguyên này được chuyển về định dạng nhị phân. Các giá trị nhị phân sẽ được phân thành các cột

bộ mã hóa = ce. BinaryEncoder[cols=['Category'],return_df=True] data_encoded=encoder. fit_transform[dữ liệu]

===========>

Cách thức hoạt động này rất tốt khi số lượng danh mục lớn, sử dụng bộ nhớ hiệu quả hơn sử dụng ít tính năng hơn. Ngoài ra nó còn giúp giảm đáng kể chiều đối với những dữ liệu có cardinality cao

2. 5. Mã hóa cơ sở N

Mã hóa nhị phân chính là trường hợp của mã hóa Cơ sở N. Sau khi thực hiện mã hóa thứ tự, thì thay đổi số nguyên về hệ nhị phân thành nhị phân, ta sẽ thay đổi số đó về các cơ số khác như 4 hay 8 không hạn chế [=> Cơ số N]

bộ mã hóa = ce. BaseNEncoder[cols=['Category'],return_df=True,base=4] data_encoded=encoder. fit_transform[dữ liệu]

=======>

Như vậy Mã hóa cơ sở N giúp giảm lượng tính năng nhiều hơn so với nhị phân, do đó nó có thể trở nên hữu dụng hơn khi loại lượng lượng ngày càng lớn

2. 6. Đã học nhúng

Cách thức mã hóa giới thiệu trên chủ yếu mới giải quyết vấn đề về dịnh dạng dữ liệu cũng như cardinality [2/3 biểu thức nêu ra ở đầu bài]. Do đó làm thế nào để có thể biểu diễn các mối tương quan giữa các danh mục để máy tính có thể hiểu được. Câu trả lời là nhúng đã học, hay gọi ngắn gọn là “nhúng”, là một cách biểu diễn phân tán [biểu diễn phân tán] cho dữ liệu phân loại

Mỗi danh mục sẽ được ánh xạ với một véc tơ riêng, và véc tơ thân này sẽ được cập nhật/"học" trong quá trình traning mạng nơ ron. Nhờ vậy các thể loại gần nhau hoặc có quan hệ với nhau cũng sẽ gần nhau hơn trong không gian vector

Kỹ thuật này ban đầu được phát triển để sử dụng trong xử lý ngôn ngữ tự nhiên, với mục đích là cung cấp khả năng nhúng cho các từ [các từ có ngôn ngữ có nghĩa gần nhau sẽ có biểu thức dạng vector tương đồng]

Lợi ích

  • Mối quan hệ giữa các danh mục có thể được "học" từ dữ liệu
  • Mỗi danh mục giá trị vẫn được biểu diễn dưới dạng vectơ mà không bị thưa thớt dưới dạng mã hóa one-hot
  • Vector sau khi được "học" có thể được tách ra và sử dụng làm đầu vào cho các mô hình/ứng dụng khác

Embedding can be used in Keras qua class tf. máy ảnh. lớp. nhúng. Ta sẽ thêm một lớp Nhúng vào trước các lớp của mạng nơ ron

Kết luận

Trong bài viết này, mình đã giới thiệu thông qua một số cách mã hóa dữ liệu dưới dạng phân loại [phân loại] để có thể khai thác các dữ liệu này trong học máy. Trên đây mới chỉ là những hình thức cơ bản nhất và mình sẽ cập nhật thêm các kỹ thuật khác khi có cơ hội. Cảm ơn các bạn đã đọc và mình rất mong nhận được sự đóng góp ý kiến ​​từ các bạn

Chủ Đề