12

Thuật toán hồi quy dường như đang hoạt động trên các đối tượng được trình bày dưới dạng số. Ví dụ:Phân tích hồi quy tuyến tính với các tính năng chuỗi/phân loại (biến)?

enter image description here

bộ dữ liệu này không có các tính năng phân loại/biến. Nó khá rõ ràng làm thế nào để làm hồi quy về dữ liệu này và dự đoán giá cả.


Nhưng bây giờ tôi muốn làm phân tích hồi quy trên dữ liệu đó có các tính năng phân loại:

enter image description here

Có các tính năng: District, Condition, Material, Security, Type


Làm cách nào để tôi có thể thực hiện hồi quy trên dữ liệu này? Tôi có phải chuyển tất cả dữ liệu chuỗi/phân loại này thành số theo cách thủ công không? Tôi có nghĩa là nếu tôi phải tạo một số quy tắc mã hóa và theo quy tắc đó, chuyển đổi tất cả dữ liệu thành giá trị số. Có cách nào đơn giản để chuyển đổi dữ liệu chuỗi thành các số mà không phải tạo quy tắc mã hóa riêng theo cách thủ công không? Có thể có một số thư viện trong số Python có thể được sử dụng cho điều đó? Có một số rủi ro mà mô hình hồi quy sẽ bằng cách nào đó không chính xác do "mã hóa xấu"?

Trả lời

26

Có, bạn sẽ phải chuyển đổi tất cả mọi thứ để con số. Điều đó đòi hỏi phải suy nghĩ về những gì các thuộc tính này đại diện.

Thông thường có ba khả năng:

mã hóa
  1. One-Hot cho dữ liệu phân loại
  2. số Arbitrary cho dữ liệu thứ
  3. Sử dụng một cái gì đó giống như nhóm có nghĩa là cho dữ liệu phân loại (ví dụ có nghĩa là giá cho các huyện thành phố) .

Bạn phải cẩn thận để không truyền tải thông tin bạn không có trong trường hợp đơn đăng ký.

Một nóng mã hóa

Nếu bạn có dữ liệu phân loại, bạn có thể tạo biến giả với 0/1 giá trị cho mỗi giá trị có thể.

E. g.

idx color 
0 blue 
1 green 
2 green 
3 red 

để

idx blue green red 
0 1 0  0 
1 0 1  0 
2 0 1  0 
3 0 0  1 

này có thể dễ dàng được thực hiện với gấu trúc:

import pandas as pd 

data = pd.DataFrame({'color': ['blue', 'green', 'green', 'red']}) 
print(pd.get_dummies(data)) 

sẽ cho kết quả:

color_blue color_green color_red 
0   1   0   0 
1   0   1   0 
2   0   1   0 
3   0   0   1 

số cho dữ liệu thứ

Tạo ánh xạ các danh mục có thể sắp xếp, e. g. cũ < cải tạo < mới → 0, 1, 2

Đây cũng là có thể với gấu trúc:

data = pd.DataFrame({'q': ['old', 'new', 'new', 'ren']}) 
data['q'] = data['q'].astype('category') 
data['q'] = data['q'].cat.reorder_categories(['old', 'ren', 'new'], ordered=True) 
data['q'] = data['q'].cat.codes 
print(data['q']) 

Kết quả:

0 0 
1 2 
2 2 
3 1 
Name: q, dtype: int8 

Sử dụng dữ liệu phân loại cho các hoạt động groupby

Bạn có thể sử dụng giá trị trung bình cho từng danh mục trong quá khứ (các sự kiện đã biết).

Giả sử bạn có một DataFrame với giá trị trung bình cuối cùng được biết đến cho các thành phố:

prices = pd.DataFrame({ 
    'city': ['A', 'A', 'A', 'B', 'B', 'C'], 
    'price': [1, 1, 1, 2, 2, 3], 
}) 
mean_price = prices.groupby('city').mean() 
data = pd.DataFrame({'city': ['A', 'B', 'C', 'A', 'B', 'A']}) 

print(data.merge(mean_price, on='city', how='left')) 

Kết quả:

city price 
0 A  1 
1 B  2 
2 C  3 
3 A  1 
4 B  2 
5 A  1 
+0

Nhưng làm thế nào có thể hotencoding giúp đỡ bạn khi bạn sẽ cố gắng để dự đoán một màu mới? Có thể trong trường hợp của bạn, bạn phải đào tạo lại mô hình. Bạn có giải pháp nào không? – gtzinos

3

Bạn có thể sử dụng "Mã hóa giả" trong trường hợp này. Có thư viện Python để làm mã hóa giả, bạn có một vài tùy chọn.

Bạn có thể sử dụng thư viện tìm hiểu. Hãy xem here.

Hoặc, nếu bạn làm việc với gấu trúc, nó có chức năng tích hợp để tạo biến giả. Kiểm tra this.

Một ví dụ với gấu trúc là dưới đây:

import pandas as pd 

sample_data = [[1,2,'a'],[3,4,'b'],[5,6,'c'],[7,8,'b']] 
df = pd.DataFrame(sample_data, columns=['numeric1','numeric2','categorical']) 
dummies = pd.get_dummies(df.categorical) 
df.join(dummies) 
Các vấn đề liên quan