2016-03-24 21 views
6

Tôi muốn áp dụng trọng lượng mẫu và đồng thời sử dụng đường ống từ sklearn, điều này sẽ tạo nên một phép biến đổi tính năng, ví dụ: đa thức, và sau đó áp dụng một bộ hồi quy, ví dụ ExtraTrees.đường ống sklearn - Áp dụng trọng lượng mẫu sau khi áp dụng phép biến đổi đa thức trong đường ống

Tôi đang sử dụng các gói sau trong hai ví dụ dưới đây:

from sklearn.ensemble import ExtraTreesRegressor 
import numpy as np 
from sklearn.pipeline import Pipeline 
from sklearn.preprocessing import PolynomialFeatures 

Tất cả mọi thứ hoạt động tốt miễn là tôi riêng rẽ thay đổi các tính năng và tạo và đào tạo các mô hình sau:

#Feature generation 
X = np.random.rand(200,4) 
Y = np.random.rand(200) 

#Feature transformation 
poly = PolynomialFeatures(degree=2) 
poly.fit_transform(X) 

#Model generation and fit 
clf = ExtraTreesRegressor(n_estimators=5, max_depth = 3) 
weights = [1]*100 + [2]*100 
clf.fit(X,Y, weights) 

Nhưng làm điều đó trong một đường ống, không hoạt động:

#Pipeline generation 
pipe = Pipeline([('poly2', PolynomialFeatures(degree=2)), ('ExtraTrees', ExtraTreesRegressor(n_estimators=5, max_depth = 3))]) 

#Feature generation 
X = np.random.rand(200,4) 
Y = np.random.rand(200) 

#Fitting model 
clf = pipe 
weights = [1]*100 + [2]*100 
clf.fit(X,Y, weights) 

Tôi nhận được fol Lỗi lowing: TypeError: fit() lấy tối đa 3 đối số (4 đã cho) Trong ví dụ đơn giản này, không có vấn đề gì để sửa đổi mã, nhưng khi tôi muốn chạy một số kiểm tra khác nhau trên dữ liệu thực của tôi trong mã thực, có thể sử dụng đường ống và trọng lượng mẫu

Trả lời

8

Có đề cập đến **fit_params trong phương pháp fit của tài liệu Pipeline. Bạn phải chỉ định bước nào của đường ống mà bạn muốn áp dụng tham số. Bạn có thể đạt được điều này bằng cách làm theo các quy tắc đặt tên trong các tài liệu:

For this, it enables setting parameters of the various steps using their names and the parameter name separated by a ‘__’, as in the example below.

Vì vậy, tất cả những gì đang được nói, hãy thử thay đổi dòng cuối cùng để:

clf.fit(X,Y, **{'ExtraTrees__sample_weight': weights}) 

This is a good example làm thế nào để làm việc với các thông số trong đường ống.

+1

Cảm ơn, Kevin! Điều này giải quyết vấn đề và ví dụ thực sự tốt đẹp để xem các tham số hoạt động như thế nào trong các đường ống! – stefanE

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