Cách thực hiện mã hóa một lần cho nhiều biến số phân loại

Nút nguồn: 841101

Trong bài viết này, chúng ta sẽ tìm hiểu về cách chúng ta có thể xử lý nhiều biến phân loại bằng cách sử dụng kỹ thuật Feature Engineering One Hot Encoding.

Nhưng trước khi tiếp tục, chúng ta hãy thảo luận ngắn gọn về Kỹ thuật tính năng và Mã hóa One Hot.

Kỹ thuật tính năng

Vì vậy, Feature Engineering là quá trình trích xuất các tính năng từ dữ liệu thô bằng cách sử dụng kiến ​​thức miền của vấn đề. Các tính năng này có thể được sử dụng để cải thiện hiệu suất của các thuật toán học máy và nếu hiệu suất tăng lên thì nó sẽ cho độ chính xác tốt nhất. Chúng ta cũng có thể nói rằng kỹ thuật tính năng giống như học máy ứng dụng. Kỹ thuật tính năng là nghệ thuật quan trọng nhất trong học máy, tạo ra sự khác biệt lớn giữa mô hình tốt và mô hình xấu. Đây là bước thứ ba trong bất kỳ vòng đời dự án khoa học dữ liệu nào.

Khái niệm về tính minh bạch cho các mô hình học máy là một điều phức tạp vì các mô hình khác nhau thường yêu cầu các cách tiếp cận khác nhau đối với các loại dữ liệu khác nhau. Chẳng hạn như:-

  • Dữ liệu liên tục
  • Tính năng phân loại
  • Giá trị bị mất
  • Bình thường hóa
  • Ngày giờ

Nhưng ở đây chúng ta sẽ chỉ thảo luận về Các tính năng phân loại, Các tính năng phân loại là những tính năng trong đó kiểu dữ liệu là một loại Đối tượng. Giá trị của điểm dữ liệu trong bất kỳ tính năng phân loại nào không ở dạng số, mà ở dạng đối tượng.

Có nhiều kỹ thuật để xử lý các biến phân loại, một số là:

  • Mã hóa nhãn hoặc Mã hóa thông thường
  • Một mã hóa nóng
  • mã hóa giả
  • Mã hóa hiệu ứng
  • Mã hóa nhị phân
  • Mã hóa Basel
  • mã hóa băm
  • Mã hóa mục tiêu

Vì vậy, ở đây chúng tôi xử lý các tính năng phân loại bằng Mã hóa một nóng, vì vậy trước hết chúng ta sẽ thảo luận về Mã hóa một nóng.

Một mã hóa nóng

Chúng tôi biết rằng các biến phân loại chứa các giá trị nhãn hơn là các giá trị số. Số lượng các giá trị có thể thường được giới hạn trong một tập hợp cố định. Các biến phân loại thường được gọi là danh nghĩa. Nhiều thuật toán học máy không thể hoạt động trực tiếp trên dữ liệu nhãn. Chúng yêu cầu tất cả các biến đầu vào và biến đầu ra phải là số.

Điều này có nghĩa là dữ liệu phân loại phải được chuyển đổi thành dạng số. Nếu biến phân loại là một biến đầu ra, bạn cũng có thể muốn chuyển đổi các dự đoán của mô hình trở lại thành dạng phân loại để trình bày chúng hoặc sử dụng chúng trong một số ứng dụng.

ví dụ dữ liệu về giới tính ở dạng 'nam giới''nữ giới'.

Nhưng nếu chúng ta sử dụng mã hóa một lần thì mã hóa và cho phép mô hình giả định thứ tự tự nhiên giữa các danh mục có thể dẫn đến hiệu suất kém hoặc kết quả không mong muốn.

Mã hóa một lần có thể được áp dụng cho biểu diễn số nguyên. Đây là nơi biến mã hóa số nguyên bị loại bỏ và một biến nhị phân mới được thêm vào cho mỗi giá trị số nguyên duy nhất.

Ví dụ: chúng tôi mã hóa biến màu,

Màu đỏ  Màu xanh da trời
0 1
1 0
0 1

Bây giờ chúng ta sẽ bắt đầu hành trình của mình. Trong bước đầu tiên, chúng tôi lấy một bộ dữ liệu dự đoán giá nhà.

Bộ dữ liệu

Ở đây chúng ta sẽ sử dụng tập dữ liệu house_price dùng để dự đoán giá nhà theo diện tích.

Nếu bạn muốn tải bộ dữ liệu dự báo giá nhà thì click tại đây.

Nhập mô-đun

Bây giờ, chúng ta phải nhập các mô-đun quan trọng từ python sẽ sử dụng cho mã hóa một lần nóng

# nhập gấu trúc nhập gấu trúc dưới dạng pd # nhập numpy nhập numpy dưới dạng np # nhập OneHotEncoder từ sklearn.preprocessing nhập OneHotEncoder()

Ở đây, chúng tôi sử dụng pandas được sử dụng để phân tích dữ liệu, NumPyuse cho mảng n chiều và từ sklearn, chúng tôi sẽ sử dụng một lớp quan trọng One Hot Encoder để mã hóa phân loại.

Bây giờ chúng ta phải đọc dữ liệu này bằng Python.

Đọc tập dữ liệu

Nói chung, tập dữ liệu ở dạng CSV và tập dữ liệu chúng tôi sử dụng cũng ở dạng CSV. Để đọc tệp CSV, chúng tôi sẽ sử dụng hàm pandas read_csv(). xem bên dưới:

# đọc bộ dữ liệu df = pd.read_csv('house_price.csv') df.head()

đầu ra: -

Nhưng chúng tôi chỉ phải sử dụng các biến phân loại cho một bộ mã hóa nóng và chúng tôi sẽ chỉ cố gắng giải thích bằng các biến phân loại để dễ hiểu.

để phân vùng các biến phân loại từ dữ liệu, chúng tôi phải kiểm tra xem có bao nhiêu tính năng có giá trị phân loại.

Kiểm tra giá trị phân loại

Để kiểm tra các giá trị, chúng tôi sử dụng hàm select_dtypes của gấu trúc được sử dụng để chọn loại dữ liệu của biến.

# kiểm tra các tính năng cat = df.select_dtypes(include='O').keys() # hiển thị biến thể mèo

đầu ra: -

 

Bây giờ chúng ta phải loại bỏ các cột số đó khỏi tập dữ liệu và chúng ta sẽ sử dụng biến phân loại này để sử dụng. Chúng tôi chỉ sử dụng 3-4 cột phân loại từ tập dữ liệu để áp dụng mã hóa một lần.

Tạo khung dữ liệu mới

Bây giờ, để sử dụng các biến phân loại, chúng tôi sẽ tạo một khung dữ liệu mới gồm các cột phân loại đã chọn.

# tạo các cột cài đặt df mới # chúng tôi sử dụng new_df = pd.read_csv('house_price.csv',usecols=['Hàng xóm','Ngoại thất1','Ngoại thất2']) new_df.head()

đầu ra: -

Bây giờ chúng ta phải tìm xem có bao nhiêu danh mục duy nhất có trong mỗi cột danh mục.

Tìm giá trị duy nhất

Để tìm các giá trị duy nhất, chúng ta sẽ sử dụng hàm pandas unique().

# giá trị duy nhất trong mỗi cột cho x trong new_df.columns: #prinfting giá trị duy nhất print(x ,':', len(new_df[x].unique()))

đầu ra: -

Vùng lân cận : 25
Ngoại thất1 : 15
Ngoại thất2nd : 16

Bây giờ, chúng tôi sẽ sử dụng kỹ thuật của mình để áp dụng mã hóa một lần trên nhiều biến phân loại.

Kỹ thuật cho nhiều biến phân loại

Kỹ thuật này là chúng tôi sẽ giới hạn mã hóa one-hot cho 10 nhãn thường xuyên nhất của biến. Điều này có nghĩa là chúng tôi sẽ chỉ tạo một biến nhị phân cho mỗi trong số 10 nhãn phổ biến nhất, điều này tương đương với việc nhóm tất cả các nhãn khác trong một danh mục mới, trong trường hợp này sẽ bị loại bỏ. Do đó, 10 biến giả mới cho biết liệu một trong 10 nhãn phổ biến nhất có xuất hiện hay không. 1 hay không thì 0 cho một quan sát cụ thể.

Các biến thường xuyên nhất

Ở đây chúng tôi sẽ chọn 20 biến thường xuyên nhất.

Giả sử chúng ta lấy một biến phân loại Vùng lân cận.

# tìm 20 danh mục hàng đầu new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

đầu ra:

Khi bạn nhìn thấy trong hình ảnh đầu ra này, bạn sẽ nhận thấy rằng Tên nhãn đang lặp lại 225 lần trong các cột Vùng lân cận và chúng tôi đi xuống con số này đang giảm dần.

Vì vậy, chúng tôi lấy 10 kết quả hàng đầu từ trên cùng và chúng tôi chuyển đổi 10 kết quả hàng đầu này thành mã hóa one-hot và các nhãn bên trái biến thành XNUMX.

đầu ra: -

 

Danh sách các biến phân loại thường xuyên nhất

# tạo danh sách với 10 biến hàng đầu top_10 = [x for x in new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index] top_10

đầu ra: -

['NAmes',
'CollgCr',
'Phố cổ',
'Edward',
'Somer',
'Gilbert',
'NridgHt',
'thợ cưa',
'NWAmes',
'SawyerW']

Có 10 nhãn phân loại hàng đầu trong cột Vùng lân cận.

tạo nhị phân

Bây giờ, chúng ta phải tạo 10 biến nhị phân của top_10 nhãn:

# tạo nhị phân của nhãn

cho nhãn trong top_10:

mới_df = np.where(new_df['Neighborhood']==label,1,0)

new_df[['Neighborhood']+top_10]


đầu ra: -

Tên CollgCr Phố cổ Edwards Somerst Gilbert NridgHt Thợ cưa NWAmes SawyerW
0 CollgCr 0 1 0 0 0 0 0 0 0 0
1 người yêu 0 0 0 0 0 0 0 0 0 0
2 CollgCr 0 1 0 0 0 0 0 0 0 0
3 thu thập thông tin 0 0 0 0 0 0 0 0 0 0
4 không có sườn núi 0 0 0 0 0 0 0 0 0 0
5 mitchel 0 0 0 0 0 0 0 0 0 0
6 Somerst 0 0 0 0 1 0 0 0 0 0
7 NWAmes 0 0 0 0 0 0 0 0 1 0
8 Phố cổ 0 0 1 0 0 0 0 0 0 0
9 BrkSide 0 0 0 0 0 0 0 0 0 0
10 Thợ cưa 0 0 0 0 0 0 0 1 0 0
11 NridgHt 0 0 0 0 0 0 1 0 0 0

Bạn có thể xem cách các nhãn top_10 hiện được chuyển đổi thành định dạng nhị phân.

Hãy lấy một ví dụ, xem trong bảng nơi 1 chỉ số người yêu không thuộc nhãn top_10 danh mục của chúng tôi nên sẽ dẫn đến 0 tất cả các cột.

Bây giờ chúng ta sẽ thực hiện cho tất cả các biến Phân loại mà chúng ta đã chọn ở trên.

Tất cả biến được chọn trên OneHotEncoding

# cho tất cả các biến phân loại mà chúng tôi đã chọn def top_x(df2,biến,top_x_labels): cho nhãn trong top_x_labels: df2[biến+'_'+nhãn] = np.where(dữ liệu[biến]==nhãn,1,0) # đọc dữ liệu lại data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Neighborhood','Exterior1st','Exterior2nd']) #encode Vùng lân cận thành 10 danh mục thường xuyên nhất top_x(data, 'Vùng lân cận',top_10) # hiển thị dữ liệu data.head()

Đầu ra: -

Bây giờ, ở đây chúng tôi áp dụng mã hóa một lần nóng trên tất cả các biến đa phân loại.

Bây giờ chúng ta sẽ thấy những ưu điểm và nhược điểm của Mã hóa một nóng cho nhiều biến.

Ưu điểm

  • Đơn giản để thực hiện
  • Không cần nhiều thời gian để khám phá biến
  • Không mở rộng ồ ạt không gian tính năng.

Điểm yếus

  • Không thêm bất kỳ thông tin nào có thể làm cho biến có tính dự đoán hơn
  • Không giữ thông tin của các biến bị bỏ qua.

Ghi chú kết thúc

Vì vậy, phần Tóm tắt của phần này là chúng ta tìm hiểu về cách xử lý nhiều biến phân loại, Nếu bạn gặp phải vấn đề này thì đây là một nhiệm vụ rất khó khăn. Vì vậy, cảm ơn bạn đã đọc bài viết này.

Kết nối với tôi trên Linkedin: Hồ sơ

Đọc các bài viết khác của tôi: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

Cảm ơn bạn😎

Phương tiện hiển thị trong bài viết này không thuộc sở hữu của Analytics Vidhya và được sử dụng theo quyết định của Tác giả.

Bạn cũng có thể đọc bài viết này trên APP di động của chúng tôi Nhận được nó trên Google Play

Bài viết liên quan

Nguồn: https://www.analyticsvidhya.com/blog/2021/05/how-to-perform-one-hot-encoding-for-multi-categorical-variables/

Dấu thời gian:

Thêm từ Phân tích Vidhya