2015-06-18 15 views
5

Theo sklearn.pipeline.Pipeline tài liệu,Truy cập vào các chức năng biến trong `đường ống sklearn`

Đường ống dẫn dầu có tất cả các phương pháp mà các ước lượng cuối cùng trong đường ống đã, tức là nếu dự toán cuối cùng là một bộ phân loại, các đường ống có thể được sử dụng làm bộ phân loại. Nếu ước tính cuối cùng là một biến áp, một lần nữa, do đó, là đường ống dẫn.

Ví dụ sau tạo một biến giả với một phong tục, giả chức năng f:

class C: 
    def fit(self, X, y=None): 
     print('fit') 
     return self 
    def transform(self, X): 
     print('transform') 
     return X 

    def f(self): 
     print('abc') 

from sklearn.pipeline import Pipeline 
ppl = Pipeline([('C', C())]) 

Tôi đã chờ đợi để có thể truy cập vào f chức năng của máy biến áp C, tuy nhiên gọi ppl.f() kết quả trong AttributeError: 'Pipeline' object has no attribute 'f'

Tôi có hiểu sai tài liệu không? Có cách nào tốt và đáng tin cậy để truy cập các chức năng của biến đổi cuối cùng không?

Trả lời

4

Tài liệu Pipeline hơi phóng đại mọi thứ. Nó có tất cả các phương pháp ước tính của công cụ ước tính cuối cùng của nó. Chúng bao gồm những thứ như predict(), fit_predict(), fit_transform(), transform(), decision_function(), predict_proba()....

Nó không thể sử dụng bất kỳ chức năng nào khác, vì nó sẽ không biết phải làm gì với tất cả các bước khác trong đường ống. Đối với hầu hết các trường hợp, bạn vượt qua (X) hoặc có thể là (X,y) và X và/hoặc y phải vượt qua mọi chuỗi trong đường ống hoặc với fit_transform() hoặc transform().

Nó là khá dễ dàng để truy cập ước cuối cùng, như thế này:

ppl.steps[-1][1].f() 

Nhưng hãy nhớ rằng làm như vậy là bỏ qua các bước trước đó trong đường ống dẫn (ví dụ, nếu bạn vượt qua nó X, nó sẽ không được thu nhỏ với StandardScaler của bạn hoặc bất cứ điều gì bạn đang làm trước đó trong đường ống.)

Các vấn đề liên quan