Tôi nghĩ rằng M0rkHaV có ý tưởng đúng. Scikit-học của lớp đường ống là một công cụ hữu ích cho đóng gói nhiều máy biến áp khác nhau cùng với một ước lượng vào một đối tượng, do đó bạn chỉ cần gọi các phương thức quan trọng của bạn một lần ( fit()
, predict()
, vv). Hãy chia nhỏ hai thành phần chính:
Máy biến áp là các lớp thực hiện cả hai fit()
và transform()
. Bạn có thể quen thuộc với một số công cụ tiền xử lý của sklearn, như TfidfVectorizer
và Binarizer
. Nếu bạn xem tài liệu cho các công cụ tiền xử lý này, bạn sẽ thấy rằng chúng triển khai cả hai phương pháp này. Điều tôi thấy khá thú vị là một số công cụ ước tính cũng có thể được sử dụng như các bước chuyển đổi, ví dụ LinearSVC
!
Bộ ước lượng là các lớp thực hiện cả fit()
và predict()
. Bạn sẽ thấy rằng nhiều bộ phân loại và mô hình hồi quy triển khai cả hai phương pháp này và như vậy bạn có thể dễ dàng kiểm tra nhiều mô hình khác nhau. Có thể sử dụng một máy biến áp khác làm công cụ ước tính cuối cùng (tức là nó không nhất thiết phải thực hiện predict()
, nhưng chắc chắn thực hiện fit()
). Tất cả điều này có nghĩa là bạn sẽ không thể gọi được predict()
.
Đối với chỉnh sửa của bạn: hãy xem qua một ví dụ dựa trên văn bản. Sử dụng LabelBinarizer, chúng tôi muốn biến một danh sách các nhãn thành một danh sách các giá trị nhị phân.
bin = LabelBinarizer() #first we initialize
vec = ['cat', 'dog', 'dog', 'dog'] #we have our label list we want binarized
Bây giờ, khi bộ binarizer được lắp trên một số dữ liệu, nó sẽ có một cấu trúc được gọi là classes_
chứa các lớp duy nhất mà máy biến áp 'biết' về. Nếu không gọi fit()
trình xử lý binarizer thì sẽ không biết dữ liệu trông như thế nào, vì vậy việc gọi transform()
sẽ không có ý nghĩa gì. Điều này đúng nếu bạn in ra danh sách các lớp trước khi cố gắng khớp dữ liệu.
print bin.classes_
Tôi gặp lỗi sau khi thử điều này:
AttributeError: 'LabelBinarizer' object has no attribute 'classes_'
Nhưng khi bạn phù hợp với binarizer trong vec
danh sách:
bin.fit(vec)
và thử lại
print bin.classes_
Tôi nhận được những điều sau:
['cat' 'dog']
print bin.transform(vec)
Và bây giờ, sau khi gọi biến đổi trên vec
đối tượng, chúng ta nhận được như sau:
[[0]
[1]
[1]
[1]]
Đối với công cụ ước tính được sử dụng làm máy biến áp, chúng ta hãy sử dụng bộ DecisionTree
phân loại làm ví dụ về trình trích xuất tính năng. Cây Quyết định là tuyệt vời vì nhiều lý do, nhưng đối với mục đích của chúng tôi, điều quan trọng là chúng có khả năng xếp hạng các tính năng mà cây thấy hữu ích để dự đoán. Khi bạn gọi transform()
Cây quyết định, nó sẽ lấy dữ liệu đầu vào của bạn và tìm những gì nó cho là các tính năng quan trọng nhất. Vì vậy, bạn có thể nghĩ đến việc chuyển đổi ma trận dữ liệu của bạn (n hàng x m cột) thành ma trận nhỏ hơn (n hàng x k cột), trong đó k cột là k đặc điểm quan trọng nhất mà Cây quyết định tìm thấy.