Tiền xử lý - Dữ liệu phân loại
Trên trang này, W3schools.com hợp tác với Học viện Khoa học Dữ liệu NYC để cung cấp nội dung đào tạo kỹ thuật số cho sinh viên của chúng tôi.
Dữ liệu phân loại
Khi dữ liệu của bạn có các danh mục được biểu thị bằng chuỗi, sẽ khó sử dụng chúng để huấn luyện các mô hình machine learning thường chỉ chấp nhận dữ liệu số.
Thay vì bỏ qua dữ liệu phân loại và loại trừ thông tin khỏi mô hình của chúng tôi, bạn có thể chuyển đổi dữ liệu để có thể sử dụng dữ liệu đó trong mô hình của mình.
Hãy xem bảng bên dưới, đây chính là tập dữ liệu mà chúng tôi đã sử dụng trong chương hồi quy bội .
Ví dụ
import pandas as pd
cars = pd.read_csv('data.csv')
print(cars.to_string())
Kết quả
Mẫu xe Khối lượng Trọng lượng CO2 0 Toyota Aygo 1000 790 99 1 Mitsubishi Space Star 1200 1160 95 2 Skoda Citigo 1000 929 95 3 Fiat 500 900 865 90 4 Mini Cooper 1500 1140 105 5 VW lên! 1000 929 105 6 Skoda Fabia 1400 1109 90 7 Mercedes A-Class 1500 1365 92 8 Ford Fiesta 1500 1112 98 9 Audi A1 1600 1150 99 10 Huyndai I20 1100 980 99 11 Suzuki Swift 1300 990 101 12 Ford Fiesta 1000 1112 99 13 Honda Civic 1600 1252 94 14 Huyndai I30 1600 1326 97 15 Opel Astra 1600 1330 97 16 BMW 1 1600 1365 99 17 Mazda 3 2200 1280 104 18 Skoda Nhanh 1600 1119 104 19 Ford Focus 2000 1328 105 20 Ford Mondeo 1600 1584 94 21 Opel Phù Hiệu 2000 1428 99 22 Mercedes C-Class 2100 1365 99 23 Skoda Octavia 1600 1415 99 24 Volvo S60 2000 1415 99 25 Mercedes CLA 1500 1465 102 26 Audi A4 2000 1490 104 27 Audi A6 2000 1725 114 28 Volvo V70 1600 1523 109 29 BMW 5 2000 1705 114 30 Mercedes E-Class 2100 1605 115 31 Volvo XC70 2000 1746 117 32 Ford B-Max 1600 1235 104 33 BMW 216 1600 1390 108 34 Opel Zafira 1600 1405 109 35 Mercedes SLK 2500 1395 120
Chạy ví dụ »
Trong chương hồi quy bội, chúng tôi đã cố gắng dự đoán lượng CO2 thải ra dựa trên thể tích động cơ và trọng lượng của ô tô nhưng chúng tôi đã loại trừ thông tin về nhãn hiệu và kiểu dáng ô tô.
Thông tin về thương hiệu ô tô hoặc mẫu xe có thể giúp chúng ta dự đoán tốt hơn về lượng CO2 thải ra.
QUẢNG CÁO
Một mã hóa nóng
Chúng tôi không thể sử dụng cột Ô tô hoặc Mẫu xe trong dữ liệu của mình vì chúng không phải là số. Không thể xác định được mối quan hệ tuyến tính giữa biến phân loại, Ô tô hoặc Mẫu xe và biến số, CO2.
Để khắc phục sự cố này, chúng ta phải có biểu diễn bằng số của biến phân loại. Một cách để làm điều này là có một cột đại diện cho từng nhóm trong danh mục.
Đối với mỗi cột, các giá trị sẽ là 1 hoặc 0 trong đó 1 thể hiện sự bao gồm của nhóm và 0 thể hiện sự loại trừ. Sự chuyển đổi này được gọi là một mã hóa nóng.
Bạn không cần phải thực hiện việc này một cách thủ công, mô-đun Python Pandas có một hàm gọi là get_dummies()
thực hiện một mã hóa nóng.
Tìm hiểu về mô-đun Pandas trong Hướng dẫn về Pandas của chúng tôi.
Ví dụ
Một mã hóa nóng cột ô tô:
import pandas as pd
cars = pd.read_csv('data.csv')
ohe_cars =
pd.get_dummies(cars[['Car']])
print(ohe_cars.to_string())
Kết quả
Ô tô_Ô tô Audi_Ô tô BMW_Ô tô Fiat_Ô tô Ford_Ô tô Honda_Ô tô Honda_Ô tô Huyndai_Ô tô Mazda_Ô tô Mercedes_Ô tô mini_Xe Mitsubishi_Ô tô Opel_Ô tô Skoda_Ô tô Suzuki_Ôtô Toyoty_Ô tô VW_Volvo 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 3 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 6 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 7 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 8 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 9 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 12 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 13 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 15 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 16 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 18 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 19 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 20 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 21 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 22 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 23 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 25 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 26 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 29 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 32 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 33 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 35 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
Chạy ví dụ »
Kết quả
Một cột được tạo cho mọi thương hiệu ô tô trong cột Ô tô.
Dự đoán CO2
Chúng tôi có thể sử dụng thông tin bổ sung này cùng với khối lượng và trọng lượng để dự đoán lượng CO2
Để kết hợp thông tin, chúng ta có thể sử dụng hàm concat()
từ pandas.
Đầu tiên chúng ta sẽ cần nhập một vài mô-đun.
Chúng tôi sẽ bắt đầu với việc nhập Pandas.
import pandas
Mô-đun pandas cho phép chúng ta đọc tệp csv và thao tác với các đối tượng DataFrame:
cars = pandas.read_csv("data.csv")
Nó cũng cho phép chúng ta tạo các biến giả:
ohe_cars = pandas.get_dummies(cars[['Car']])
Sau đó chúng ta phải chọn các biến độc lập (X) và cộng các biến giả theo cột.
Đồng thời lưu trữ biến phụ thuộc trong y.
X = pandas.concat([cars[['Volume', 'Weight']], ohe_cars], axis=1)
y = cars['CO2']
Chúng ta cũng cần nhập một phương thức từ sklearn để tạo mô hình tuyến tính
Tìm hiểu về hồi quy tuyến tính .
from sklearn import linear_model
Bây giờ chúng ta có thể điều chỉnh dữ liệu theo hồi quy tuyến tính:
regr = linear_model.LinearRegression()
regr.fit(X,y)
Cuối cùng, chúng ta có thể dự đoán lượng khí thải CO2 dựa trên trọng lượng, thể tích và nhà sản xuất của ô tô.
##predict the CO2 emission of a Volvo where the weight is 2300kg, and the volume is 1300cm3:
predictedCO2 = regr.predict([[2300, 1300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0]])
Ví dụ
import pandas
from sklearn import linear_model
cars = pandas.read_csv("data.csv")
ohe_cars = pandas.get_dummies(cars[['Car']])
X = pandas.concat([cars[['Volume', 'Weight']], ohe_cars], axis=1)
y = cars['CO2']
regr = linear_model.LinearRegression()
regr.fit(X,y)
##predict the CO2 emission of a Volvo where the weight is 2300kg, and the volume is 1300cm3:
predictedCO2 = regr.predict([[2300, 1300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0]])
print(predictedCO2)
Kết quả
[122.45153299]
Chạy ví dụ »
Bây giờ chúng ta có hệ số về khối lượng, trọng lượng và từng nhãn hiệu ô tô trong tập dữ liệu
làm giả
Không cần thiết phải tạo một cột cho mỗi nhóm trong danh mục của bạn. Thông tin có thể được lưu giữ bằng cách sử dụng ít hơn 1 cột so với số lượng nhóm bạn có.
Ví dụ: bạn có một cột biểu thị màu sắc và trong cột đó bạn có hai màu là đỏ và xanh.
Ví dụ
import pandas as pd
colors = pd.DataFrame({'color': ['blue', 'red']})
print(colors)
Kết quả
màu sắc 0 màu xanh 1 màu đỏ
Chạy ví dụ »
Bạn có thể tạo 1 cột tên là màu đỏ trong đó 1 đại diện cho màu đỏ và 0 đại diện cho không phải màu đỏ, nghĩa là cột đó có màu xanh lam.
Để làm điều này, chúng ta có thể sử dụng cùng một hàm mà chúng ta đã sử dụng cho một mã hóa nóng, get_dummies, sau đó loại bỏ một trong các cột. Có một đối số, drop_first, cho phép chúng ta loại trừ cột đầu tiên khỏi bảng kết quả.
Ví dụ
import pandas as pd
colors = pd.DataFrame({'color': ['blue', 'red']})
dummies = pd.get_dummies(colors, drop_first=True)
print(dummies)
Kết quả
màu đỏ 0 0 1 1
Chạy ví dụ »
Nếu bạn có nhiều hơn 2 nhóm thì sao? Làm thế nào nhiều nhóm có thể được biểu diễn bằng 1 cột ít hơn?
Giả sử lần này chúng ta có ba màu, đỏ, xanh dương và xanh lục. Khi chúng tôi get_dummies trong khi bỏ cột đầu tiên, chúng tôi nhận được bảng sau.
Ví dụ
import pandas as pd
colors = pd.DataFrame({'color': ['blue', 'red',
'green']})
dummies = pd.get_dummies(colors, drop_first=True)
dummies['color'] = colors['color']
print(dummies)
Kết quả
màu_màu xanh_màu đỏ 0 0 0 màu xanh 1 0 1 đỏ 2 1 0 màu xanh lá cây
Chạy ví dụ »