Hướng dẫn how do you convert a categorical variable in python? - làm thế nào để bạn chuyển đổi một biến phân loại trong python?

Giới thiệu

Trong nhiều hoạt động khoa học dữ liệu thực tế, tập dữ liệu sẽ chứa các biến phân loại. Các biến này thường được lưu trữ dưới dạng các giá trị văn bản đại diện cho các đặc điểm khác nhau. Một số ví dụ bao gồm màu sắc (màu đỏ, màu vàng, màu vàng, màu xanh da trời), kích thước (một cách nhỏ, vừa, trung bình, một bộ phận lớn) hoặc chỉ định địa lý (tiểu bang hoặc quốc gia). Bất kể giá trị được sử dụng cho những gì, thách thức là xác định cách sử dụng dữ liệu này trong phân tích. Nhiều thuật toán học máy có thể hỗ trợ các giá trị phân loại mà không cần thao tác thêm nhưng có nhiều thuật toán không có. Do đó, nhà phân tích phải đối mặt với thách thức tìm ra cách biến các thuộc tính văn bản này thành các giá trị số để xử lý thêm & NBSP;

Cũng như nhiều khía cạnh khác của thế giới khoa học dữ liệu, không có câu trả lời nào về cách tiếp cận vấn đề này. Mỗi cách tiếp cận có sự đánh đổi và có tác động tiềm năng đến kết quả của phân tích. May mắn thay, các công cụ python của gấu trúc và scikit-learn cung cấp một số cách tiếp cận có thể được áp dụng để chuyển đổi dữ liệu phân loại thành các giá trị số phù hợp. Bài viết này sẽ là một cuộc khảo sát về một số phương pháp phổ biến (và một vài phức tạp hơn) với hy vọng rằng nó sẽ giúp những người khác áp dụng các kỹ thuật này vào thế giới thực & NBSP;

Dữ liệu & NBSP; Đặt

Đối với bài viết này, tôi đã có thể tìm thấy một bộ dữ liệu tốt tại kho lưu trữ máy học UCI. Bộ dữ liệu ô tô đặc biệt này bao gồm sự kết hợp tốt của các giá trị phân loại cũng như các giá trị liên tục và đóng vai trò là một ví dụ hữu ích tương đối dễ hiểu. Vì sự hiểu biết miền là một khía cạnh quan trọng khi quyết định làm thế nào để mã hóa các giá trị phân loại khác nhau - tập dữ liệu này tạo ra một trường hợp tốt & NBSP; nghiên cứu.UCI Machine Learning Repository. This particular Automobile Data Set includes a good mix of categorical values as well as continuous values and serves as a useful example that is relatively easy to understand. Since domain understanding is an important aspect when deciding how to encode various categorical values - this data set makes a good case study.

Trước khi chúng tôi bắt đầu mã hóa các giá trị khác nhau, chúng tôi cần quan trọng dữ liệu và thực hiện một số việc dọn dẹp nhỏ. May mắn thay, gấu trúc làm điều này & nbsp; đơn giản:

import pandas as pd import numpy as np # Define the headers since the data does not have any headers = ["symboling", "normalized_losses", "make", "fuel_type", "aspiration", "num_doors", "body_style", "drive_wheels", "engine_location", "wheel_base", "length", "width", "height", "curb_weight", "engine_type", "num_cylinders", "engine_size", "fuel_system", "bore", "stroke", "compression_ratio", "horsepower", "peak_rpm", "city_mpg", "highway_mpg", "price"] # Read in the CSV file and convert "?" to NaN df = pd.read_csv("//archive.ics.uci.edu/ml/machine-learning-databases/autos/imports-85.data", header=None, names=headers, na_values="?" ) df.head()

tượng trưngnormalized_losseslàmfuel_typeKhát vọngnum_doorsbody_styledrive_wheelsengine_locationwheel_base…engine_sizefuel_systemchánCú đánhcompression_ratiomã lựcpeak_rpmcity_mpghighway_mpggiá bán01234
3 NanAlfa-Romerokhí gaSTDhaichuyển đổiRWDđổi diện88.6 130 mpfi3.47 2.68 9.0 111.0 5000.0 21 27 13495.0
3 NanAlfa-Romerokhí gaSTDhaichuyển đổiRWDđổi diện88.6 130 mpfi3.47 2.68 9.0 111.0 5000.0 21 27 16500.0
1 NanAlfa-Romerokhí gaSTDhaichuyển đổiRWDđổi diện94.5 152 mpfi2.68 3.47 9.0 154.0 5000.0 19 26 16500.0
2 164.0 hatchbackkhí gaSTDhaichuyển đổiRWDđổi diện99.8 109 mpfi3.19 3.40 10.0 102.0 5500.0 24 30 13950.0
2 164.0 hatchbackkhí gaSTDhaichuyển đổiRWDđổi diện99.4 136 mpfi3.19 3.40 8.0 115.0 5500.0 18 22 17450.0

hatchback

symboling int64 normalized_losses float64 make object fuel_type object aspiration object num_doors object body_style object drive_wheels object engine_location object wheel_base float64 length float64 width float64 height float64 curb_weight int64 engine_type object num_cylinders object engine_size int64 fuel_system object bore float64 stroke float64 compression_ratio float64 horsepower float64 peak_rpm float64 city_mpg int64 highway_mpg int64 price float64 dtype: object

Audi

obj_df = df.select_dtypes(include=['object']).copy() obj_df.head()

làmfuel_typeKhát vọngnum_doorsbody_styledrive_wheelsengine_locationengine_typenum_cylindersfuel_system01234
Alfa-Romerokhí gaSTDhaichuyển đổiRWDđổi diệnhaimpfi
Alfa-Romerokhí gaSTDhaichuyển đổiRWDđổi diệnhaimpfi
Alfa-Romerokhí gaSTDhaichuyển đổiRWDđổi diệnmpfimpfi
hatchbackkhí gaSTDhaichuyển đổiRWDđổi diệnhaimpfi
hatchbackkhí gaSTDhaichuyển đổiRWDđổi diệnmpfimpfi

hatchback

obj_df[obj_df.isnull().any(axis=1)]

làmfuel_typeKhát vọngnum_doorsbody_styledrive_wheelsengine_locationengine_typenum_cylindersfuel_system2763
Audikhí gaSTDNanchuyển đổiRWDđổi diệnhaimpfi
hatchbackAudiSTDNanchuyển đổiRWDđổi diệnhaichuyển đổi

RWD

obj_df["num_doors"].value_counts()

four 114 two 89 Name: num_doors, dtype: int64

obj_df = obj_df.fillna({"num_doors": "four"})

đổi diện

mpfi

hatchback

Audi

obj_df["num_cylinders"].value_counts()

four 159 six 24 five 11 eight 5 two 4 twelve 1 three 1 Name: num_cylinders, dtype: int64

Nếu bạn xem lại tài liệu obj_df[obj_df.isnull().any(axis=1)] 2, bạn có thể thấy rằng đó là một lệnh mạnh mẽ có nhiều tùy chọn. Đối với việc sử dụng của chúng tôi, chúng tôi sẽ tạo một từ điển ánh xạ có chứa từng cột để xử lý cũng như từ điển của các giá trị thành & nbsp; dịch.

Dưới đây là từ điển hoàn chỉnh để làm sạch các cột obj_df[obj_df.isnull().any(axis=1)] 4 và obj_df[obj_df.isnull().any(axis=1)] 5:

cleanup_nums = {"num_doors": {"four": 4, "two": 2}, "num_cylinders": {"four": 4, "six": 6, "five": 5, "eight": 8, "two": 2, "twelve": 12, "three":3 }}

Để chuyển đổi các cột thành các số bằng obj_df[obj_df.isnull().any(axis=1)] 2:

symboling int64 normalized_losses float64 make object fuel_type object aspiration object num_doors object body_style object drive_wheels object engine_location object wheel_base float64 length float64 width float64 height float64 curb_weight int64 engine_type object num_cylinders object engine_size int64 fuel_system object bore float64 stroke float64 compression_ratio float64 horsepower float64 peak_rpm float64 city_mpg int64 highway_mpg int64 price float64 dtype: object 0

làmfuel_typeKhát vọngnum_doorsbody_styledrive_wheelsengine_locationengine_typenum_cylindersfuel_system01234
Alfa-Romerokhí gaSTD2 chuyển đổiRWDđổi diệnDOHC4 mpfi
Alfa-Romerokhí gaSTD2 chuyển đổiRWDđổi diệnDOHC4 mpfi
Alfa-Romerokhí gaSTD2 chuyển đổiRWDđổi diệnDOHC6 mpfi
hatchbackkhí gaSTD4 chuyển đổiRWDđổi diệnDOHC4 mpfi
hatchbackkhí gaSTD4 chuyển đổiRWDđổi diệnDOHC5 mpfi

hatchback

symboling int64 normalized_losses float64 make object fuel_type object aspiration object num_doors object body_style object drive_wheels object engine_location object wheel_base float64 length float64 width float64 height float64 curb_weight int64 engine_type object num_cylinders object engine_size int64 fuel_system object bore float64 stroke float64 compression_ratio float64 horsepower float64 peak_rpm float64 city_mpg int64 highway_mpg int64 price float64 dtype: object 1

ohcv

Audi

Sedan

  • FWD
  • ohc
  • 4WD
  • Lợi ích tốt đẹp cho phương pháp này là Pandas, biết các loại giá trị trong các cột, vì vậy obj_df[obj_df.isnull().any(axis=1)] 0 hiện là obj_df[obj_df.isnull().any(axis=1)] 8
  • Mặc dù phương pháp này chỉ có thể hoạt động trong một số kịch bản nhất định, đó là một minh chứng rất hữu ích về cách chuyển đổi các giá trị văn bản thành số khi có một cách giải thích dữ liệu của con người dễ dàng. Khái niệm này cũng hữu ích cho dữ liệu chung hơn & NBSP; Dọn dẹp.

Cách tiếp cận #2 - Nhãn & NBSP; mã hóa

Một cách tiếp cận khác để mã hóa các giá trị phân loại là sử dụng một kỹ thuật gọi là mã hóa nhãn. Mã hóa nhãn chỉ đơn giản là chuyển đổi từng giá trị trong một cột thành một số. Ví dụ: cột obj_df[obj_df.isnull().any(axis=1)] 9 chứa 5 giá trị khác nhau. Chúng tôi có thể chọn mã hóa nó như & nbsp; này:

symboling int64 normalized_losses float64 make object fuel_type object aspiration object num_doors object body_style object drive_wheels object engine_location object wheel_base float64 length float64 width float64 height float64 curb_weight int64 engine_type object num_cylinders object engine_size int64 fuel_system object bore float64 stroke float64 compression_ratio float64 horsepower float64 peak_rpm float64 city_mpg int64 highway_mpg int64 price float64 dtype: object 2

symboling int64 normalized_losses float64 make object fuel_type object aspiration object num_doors object body_style object drive_wheels object engine_location object wheel_base float64 length float64 width float64 height float64 curb_weight int64 engine_type object num_cylinders object engine_size int64 fuel_system object bore float64 stroke float64 compression_ratio float64 horsepower float64 peak_rpm float64 city_mpg int64 highway_mpg int64 price float64 dtype: object 3

Convertible -> & nbsp; 0

symboling int64 normalized_losses float64 make object fuel_type object aspiration object num_doors object body_style object drive_wheels object engine_location object wheel_base float64 length float64 width float64 height float64 curb_weight int64 engine_type object num_cylinders object engine_size int64 fuel_system object bore float64 stroke float64 compression_ratio float64 horsepower float64 peak_rpm float64 city_mpg int64 highway_mpg int64 price float64 dtype: object 4

làmfuel_typeKhát vọngnum_doorsbody_styledrive_wheelsengine_locationengine_typenum_cylindersfuel_systembody_style_cat01234
Alfa-Romerokhí gaSTD2 chuyển đổiRWDđổi diệnDOHC4 mpfi0
Alfa-Romerokhí gaSTD2 chuyển đổiRWDđổi diệnDOHC4 mpfi0
Alfa-Romerokhí gaSTD2 chuyển đổiRWDđổi diệnDOHC6 mpfi2
hatchbackkhí gaSTD4 chuyển đổiRWDđổi diệnDOHC4 mpfi3
hatchbackkhí gaSTD4 chuyển đổiRWDđổi diệnDOHC5 mpfi3

hatchback

ohcv

Audi

Sedan

FWD

ohc

symboling int64 normalized_losses float64 make object fuel_type object aspiration object num_doors object body_style object drive_wheels object engine_location object wheel_base float64 length float64 width float64 height float64 curb_weight int64 engine_type object num_cylinders object engine_size int64 fuel_system object bore float64 stroke float64 compression_ratio float64 horsepower float64 peak_rpm float64 city_mpg int64 highway_mpg int64 price float64 dtype: object 5

làmfuel_typeKhát vọngnum_doorsbody_styleengine_locationengine_typenum_cylindersfuel_systembody_style_catdrive_wheels_4wddrive_wheels_fwddrive_wheels_rwd01234
Alfa-Romerokhí gaSTD2 chuyển đổiđổi diệnDOHC4 mpfi0 0.0 0.0 1.0
Alfa-Romerokhí gaSTD2 chuyển đổiđổi diệnDOHC4 mpfi0 0.0 0.0 1.0
Alfa-Romerokhí gaSTD2 chuyển đổiđổi diệnDOHC6 mpfi2 0.0 0.0 1.0
hatchbackkhí gaSTD4 chuyển đổiđổi diệnDOHC4 mpfi3 0.0 1.0 0.0
hatchbackkhí gaSTD4 chuyển đổiđổi diệnDOHC5 mpfi3 1.0 0.0 0.0

mpfi

  • obj_df["num_doors"].value_counts() 6
  • obj_df["num_doors"].value_counts() 7
  • obj_df["num_doors"].value_counts() 8

hatchback

symboling int64 normalized_losses float64 make object fuel_type object aspiration object num_doors object body_style object drive_wheels object engine_location object wheel_base float64 length float64 width float64 height float64 curb_weight int64 engine_type object num_cylinders object engine_size int64 fuel_system object bore float64 stroke float64 compression_ratio float64 horsepower float64 peak_rpm float64 city_mpg int64 highway_mpg int64 price float64 dtype: object 6

làmfuel_typeKhát vọngnum_doorsengine_locationengine_typenum_cylindersfuel_systembody_style_catbody_convertiblebody_hardtopbody_hatchbackbody_sedanbody_wagondrive_4wddrive_fwddrive_rwd01234
Alfa-Romerokhí gaSTD2 đổi diệnDOHC4 mpfi0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0
Alfa-Romerokhí gaSTD2 đổi diệnDOHC4 mpfi0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0
Alfa-Romerokhí gaSTD2 đổi diệnDOHC6 mpfi2 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0
ohcvkhí gaSTD4 đổi diệnDOHC4 mpfi3 0.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0
ohcvkhí gaSTD4 đổi diệnDOHC5 mpfi3 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0

ohcv

Audi

ohc

Khái niệm khác cần lưu ý là obj_df["num_doors"].value_counts() 5 trả về toàn bộ dữ liệu, vì vậy bạn sẽ cần lọc các đối tượng bằng cách sử dụng obj_df[obj_df.isnull().any(axis=1)] 1 khi bạn sẵn sàng thực hiện phân tích Final & NBSP;

Một mã hóa nóng, rất hữu ích nhưng nó có thể khiến số lượng cột mở rộng rất nhiều nếu bạn có rất nhiều giá trị duy nhất trong một cột. Đối với số lượng các giá trị trong ví dụ này, nó không phải là vấn đề. Tuy nhiên, bạn có thể thấy làm thế nào điều này thực sự khó khăn để quản lý khi bạn có nhiều tùy chọn hơn & nbsp;

symboling int64 normalized_losses float64 make object fuel_type object aspiration object num_doors object body_style object drive_wheels object engine_location object wheel_base float64 length float64 width float64 height float64 curb_weight int64 engine_type object num_cylinders object engine_size int64 fuel_system object bore float64 stroke float64 compression_ratio float64 horsepower float64 peak_rpm float64 city_mpg int64 highway_mpg int64 price float64 dtype: object 7

symboling int64 normalized_losses float64 make object fuel_type object aspiration object num_doors object body_style object drive_wheels object engine_location object wheel_base float64 length float64 width float64 height float64 curb_weight int64 engine_type object num_cylinders object engine_size int64 fuel_system object bore float64 stroke float64 compression_ratio float64 horsepower float64 peak_rpm float64 city_mpg int64 highway_mpg int64 price float64 dtype: object 8

Cách tiếp cận #4 - Tùy chỉnh nhị phân & nbsp; mã hóaOHC) or not. In other words, the various versions of OHC are all the same for this analysis. If this is the case, then we could use the four 114 two 89 Name: num_doors, dtype: int64 3 accessor plus four 114 two 89 Name: num_doors, dtype: int64 4 to create a new column the indicates whether or not the car has an OHC engine.

symboling int64 normalized_losses float64 make object fuel_type object aspiration object num_doors object body_style object drive_wheels object engine_location object wheel_base float64 length float64 width float64 height float64 curb_weight int64 engine_type object num_cylinders object engine_size int64 fuel_system object bore float64 stroke float64 compression_ratio float64 horsepower float64 peak_rpm float64 city_mpg int64 highway_mpg int64 price float64 dtype: object 9

Tùy thuộc vào tập dữ liệu, bạn có thể sử dụng một số kết hợp mã hóa nhãn và một mã hóa nóng để tạo một cột nhị phân đáp ứng nhu cầu của bạn để tiếp tục & NBSP;

Trong tập dữ liệu cụ thể này, có một cột gọi là four 114 two 89 Name: num_doors, dtype: int64 2 chứa một số giá trị khác nhau & nbsp;

obj_df = df.select_dtypes(include=['object']).copy() obj_df.head() 0

làmengine_typeOHC_Code01234
Alfa-RomeroDOHC1
Alfa-RomeroDOHC1
Alfa-RomeroDOHC1
ohcvDOHC1
ohcvDOHC1

mpfi

Scikit-Learn

ohcv

Audi

ohc

Khái niệm khác cần lưu ý là obj_df["num_doors"].value_counts() 5 trả về toàn bộ dữ liệu, vì vậy bạn sẽ cần lọc các đối tượng bằng cách sử dụng obj_df[obj_df.isnull().any(axis=1)] 1 khi bạn sẵn sàng thực hiện phân tích Final & NBSP;

Một mã hóa nóng, rất hữu ích nhưng nó có thể khiến số lượng cột mở rộng rất nhiều nếu bạn có rất nhiều giá trị duy nhất trong một cột. Đối với số lượng các giá trị trong ví dụ này, nó không phải là vấn đề. Tuy nhiên, bạn có thể thấy làm thế nào điều này thực sự khó khăn để quản lý khi bạn có nhiều tùy chọn hơn & nbsp;

obj_df = df.select_dtypes(include=['object']).copy() obj_df.head() 1

làmmake_code012345678910
Alfa-Romero0
Alfa-Romero0
Alfa-Romero0
ohcv1
ohcv1
ohcv1
ohcv1
ohcv1
ohcv1
ohcv1
Audi2

ohc

obj_df = df.select_dtypes(include=['object']).copy() obj_df.head() 2

Khái niệm khác cần lưu ý là obj_df["num_doors"].value_counts() 5 trả về toàn bộ dữ liệu, vì vậy bạn sẽ cần lọc các đối tượng bằng cách sử dụng obj_df[obj_df.isnull().any(axis=1)] 1 khi bạn sẵn sàng thực hiện phân tích Final & NBSP;Một mã hóa nóng, rất hữu ích nhưng nó có thể khiến số lượng cột mở rộng rất nhiều nếu bạn có rất nhiều giá trị duy nhất trong một cột. Đối với số lượng các giá trị trong ví dụ này, nó không phải là vấn đề. Tuy nhiên, bạn có thể thấy làm thế nào điều này thực sự khó khăn để quản lý khi bạn có nhiều tùy chọn hơn & nbsp;Cách tiếp cận #4 - Tùy chỉnh nhị phân & nbsp; mã hóaTùy thuộc vào tập dữ liệu, bạn có thể sử dụng một số kết hợp mã hóa nhãn và một mã hóa nóng để tạo một cột nhị phân đáp ứng nhu cầu của bạn để tiếp tục & NBSP;Trong tập dữ liệu cụ thể này, có một cột gọi là four 114 two 89 Name: num_doors, dtype: int64 2 chứa một số giá trị khác nhau & nbsp;01234
1 0 0 0 0
1 0 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 1 0

Vì lợi ích của cuộc thảo luận, có thể tất cả những gì chúng ta quan tâm là liệu động cơ có phải là cam chi phí hay không hay không. Nói cách khác, các phiên bản khác nhau của OHC đều giống nhau cho phân tích này. Nếu đây là trường hợp, thì chúng ta có thể sử dụng four 114 two 89 Name: num_doors, dtype: int64 3 accessor Plus four 114 two 89 Name: num_doors, dtype: int64 4 để tạo một cột mới, cho biết liệu chiếc xe có công cụ OHC & NBSP;

obj_df = df.select_dtypes(include=['object']).copy() obj_df.head() 3

Tôi thấy rằng đây là một chức năng tiện dụng mà tôi sử dụng khá nhiều nhưng đôi khi quên cú pháp vì vậy đây là một đồ họa hiển thị những gì chúng tôi đang làm & NBSP;

Advanced Approaches

DataFrame kết quả trông như thế này (chỉ hiển thị một tập hợp con của & nbsp; cột):

Cách tiếp cận này có thể thực sự hữu ích nếu có một tùy chọn để hợp nhất một giá trị Y/N đơn giản trong một cột. Điều này cũng nêu bật kiến ​​thức miền quan trọng như thế nào đối với việc giải quyết vấn đề theo cách hiệu quả nhất & nbsp; có thể.

Cập nhật Scikit-Learn

obj_df = df.select_dtypes(include=['object']).copy() obj_df.head() 4

engine_type_0engine_type_1engine_type_2engine_type_3engine_type_4engine_type_501234
-0.857143 -0.714286 -0.571429 -0.428571 -0.285714 -0.142857
-0.857143 -0.714286 -0.571429 -0.428571 -0.285714 -0.142857
0.142857 -0.714286 -0.571429 -0.428571 -0.285714 -0.142857
0.142857 0.285714 -0.571429 -0.428571 -0.285714 -0.142857
0.142857 0.285714 -0.571429 -0.428571 -0.285714 -0.142857

Điều thú vị là bạn có thể thấy rằng kết quả không phải là tiêu chuẩn 1 và 0 mà chúng ta đã thấy trong các ví dụ mã hóa & NBSP;

Nếu chúng ta thử mã hóa đa thức, chúng ta sẽ nhận được một phân phối các giá trị khác được sử dụng để mã hóa & nbsp; cột:

obj_df = df.select_dtypes(include=['object']).copy() obj_df.head() 5

engine_type_0engine_type_1engine_type_2engine_type_3engine_type_4engine_type_501234
-0.566947 0.545545 -0.408248 0.241747 -0.109109 0.032898
-0.566947 0.545545 -0.408248 0.241747 -0.109109 0.032898
-0.377964 0.000000 0.408248 -0.564076 0.436436 -0.197386
-0.188982 -0.327327 0.408248 0.080582 -0.545545 0.493464
-0.188982 -0.327327 0.408248 0.080582 -0.545545 0.493464

Có một số thuật toán khác nhau có trong gói này và cách tốt nhất để học là thử chúng và xem liệu nó có giúp bạn với độ chính xác của phân tích không. Mã được hiển thị ở trên sẽ cung cấp cho bạn hướng dẫn về cách cắm các phương pháp khác và xem loại kết quả nào bạn & nbsp; nhận được.

scikit-learn pipelines

Sử dụng đường ống

Phần này đã được thêm vào tháng 11 năm 2020. Mục tiêu là chỉ ra cách tích hợp các chức năng mã hóa tính năng Scikit-LEARN vào một đường ống xây dựng mô hình đơn giản.

Như đã đề cập ở trên, các bộ mã hóa phân loại Scikit-Learn, cho phép bạn kết hợp việc chuyển đổi vào các đường ống của bạn có thể đơn giản hóa quy trình xây dựng mô hình và tránh một số cạm bẫy. Tôi đề nghị video trường dữ liệu này như một phần giới thiệu tốt. Nó cũng đóng vai trò là cơ sở cho cách tiếp cận đã phác thảo & nbsp; bên dưới.

Dưới đây là một ví dụ rất nhanh về cách kết hợp four 114 two 89 Name: num_doors, dtype: int64 8 và four 114 two 89 Name: num_doors, dtype: int64 7 vào đường ống và sử dụng obj_df = obj_df.fillna({"num_doors": "four"}) 6 để phân tích & nbsp; kết quả: kết quả:

obj_df = df.select_dtypes(include=['object']).copy() obj_df.head() 6

Bây giờ chúng tôi có dữ liệu của mình, hãy để xây dựng cột & NBSP; Transformer:

obj_df = df.select_dtypes(include=['object']).copy() obj_df.head() 7

Ví dụ này cho thấy cách áp dụng các loại bộ mã hóa khác nhau cho các cột nhất định. Sử dụng đối số obj_df = obj_df.fillna({"num_doors": "four"}) 7 để truyền tất cả các giá trị số thông qua đường ống mà không có bất kỳ & nbsp; thay đổi.

Đối với mô hình, chúng tôi sử dụng hồi quy tuyến tính đơn giản và sau đó tạo & nbsp; đường ống:

obj_df = df.select_dtypes(include=['object']).copy() obj_df.head() 8

Chạy xác thực chéo 10 lần bằng cách sử dụng lỗi tuyệt đối trung bình âm làm chức năng tính điểm của chúng tôi. Cuối cùng, lấy trung bình của 10 giá trị để xem độ lớn của & nbsp; lỗi:

obj_df = df.select_dtypes(include=['object']).copy() obj_df.head() 9

Mang lại giá trị của obj_df = obj_df.fillna({"num_doors": "four"}) 8

Rõ ràng có nhiều phân tích có thể được thực hiện ở đây nhưng điều này có nghĩa là để minh họa cách sử dụng các chức năng Scikit-learn trong một phân tích thực tế hơn & NBSP; đường ống.

Sự kết luận

Mã hóa các biến phân loại là một bước quan trọng trong quá trình khoa học dữ liệu. Bởi vì có nhiều cách tiếp cận để mã hóa các biến, điều quan trọng là phải hiểu các tùy chọn khác nhau và cách thực hiện chúng trên các bộ dữ liệu của riêng bạn. Hệ sinh thái khoa học dữ liệu Python có nhiều cách tiếp cận hữu ích để xử lý các vấn đề này. Tôi khuyến khích bạn ghi nhớ những ý tưởng này vào lần tới khi bạn thấy mình phân tích các biến phân loại. Để biết thêm chi tiết về mã trong bài viết này, vui lòng xem lại sổ ghi chép.

Thay đổi

  • 28-NOV-2020: Đã sửa lỗi liên kết bị hỏng và phần Scikit-lear được cập nhật. Bao gồm ví dụ đường ống. Điều chỉnh mã nhỏ cho & nbsp; tính nhất quán.
  • 9-tháng 1-2021: Đã sửa lỗi đánh máy trong onehotencoder & nbsp; ví dụ.

Chủ đề