Sự khác biệt giữa cột chỉ báo và cột nhận dạng phân loại trong dòng chảy


8

Tôi đang học Tensorflow và tình cờ thấy các cột tính năng khác nhau được sử dụng trong Tensorflow. Trong số các loại, hai là categorical_identity_columnindicator_column. Cả hai đã được định nghĩa theo cùng một cách. Theo tôi hiểu, cả hai đều chuyển đổi cột phân loại thành cột được mã hóa một nóng.

Vì vậy, câu hỏi của tôi là sự khác biệt giữa hai là gì? Khi nào nên sử dụng cái này và khi nào sử dụng cái kia?

Câu trả lời:


9

indicator_columnmã hóa đầu vào thành một multi-hotđại diện, không one-hotmã hóa.

Ví dụ từ https://www.tensorflow.org/api_docs/python/tf/feature_column/indicator_column làm rõ thêm:

name = indicator_column(categorical_column_with_vocabulary_list(
    'name', ['bob', 'george', 'wanda'])
columns = [name, ...]
features = tf.parse_example(..., features=make_parse_example_spec(columns))
dense_tensor = input_layer(features, columns)

dense_tensor == [[1, 0, 0]]  # If "name" bytes_list is ["bob"]
dense_tensor == [[1, 0, 1]]  # If "name" bytes_list is ["bob", "wanda"]
dense_tensor == [[2, 0, 0]]  # If "name" bytes_list is ["bob", "bob"] 

Hai ví dụ cuối mô tả những gì có nghĩa là multi-hotmã hóa. ví dụ nếu đầu vào là ["bob", "wanda"]mã hóa [[1, 0, 1]].


1

Bạn sẽ sử dụng c sortical_column_with_ * để có được một _CategoricalColumnnguồn cấp dữ liệu vào mô hình tuyến tính; cột này trả về giá trị nhận dạng, thường sử dụng từ vựng.

Mặt khác, Indicator_column là một đại diện đa điểm nóng của một cột phân loại nhất định và sẽ được sử dụng nếu bạn muốn đưa tính năng này vào một DNN, ví dụ; nó tạo ra một _IndicatorColumn. embpping_column là tương tự nhưng bạn sẽ sử dụng nó nếu đầu vào của bạn thưa thớt.


Vì vậy, bạn đang nói cột Phân loại không thể được cung cấp trực tiếp cho DNN, trừ khi được bao bọc bởi indicatorhoặc embeddedcột.
Ankit Seth

Theo các tài liệu, các cột tính năng "nên là các thể hiện của các lớp xuất phát từ FeatureColumn" - các nhúng sẽ làm giảm độ phức tạp của biểu diễn dữ liệu nhưng tôi không chắc chắn đó là một yêu cầu. tenorflow.org/api_docs/python/tf/contrib/learn/DNNClassifier
Ethereal

1

Liên quan đến câu hỏi trong các ý kiến ​​trên (của Ankit Seth), các tài liệu ở đây nói như sau về các mô hình sâu (trái ngược với "rộng", tức là tuyến tính):

tf.estimator.DNNClassifiertf.estimator.DNNRegressor: Chỉ chấp nhận các cột dày đặc. Các loại cột khác phải được bọc trong một indicator_columnhoặc embedding_column.

Và nếu bạn cố gắng chuyển một cột phân loại trực tiếp đến một mô hình sâu, TF sẽ đưa ra lỗi sau:

ValueError: Các mục của Feature_column phải là _DenseColumn. Bạn có thể bọc một cột phân loại bằng một embpping_column hoặc Indicator_column.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.