실제로 scikit-learn
는 구현하기가 약간 까다로울 수 있지만 이러한 기능을 제공합니다. 다음은 세 가지 모델 위에 구축 된 평균 회귀 분석기의 완전한 작동 예입니다. 먼저 필요한 모든 패키지를 가져 오십시오.
from sklearn.base import TransformerMixin
from sklearn.datasets import make_regression
from sklearn.pipeline import Pipeline, FeatureUnion
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.neighbors import KNeighborsRegressor
from sklearn.preprocessing import StandardScaler, PolynomialFeatures
from sklearn.linear_model import LinearRegression, Ridge
그런 다음 세 가지 회귀 모델을 변압기로 변환해야합니다. 그러면 다음을 사용하여 예측을 단일 피쳐 벡터로 병합 할 수 있습니다 FeatureUnion
.
class RidgeTransformer(Ridge, TransformerMixin):
def transform(self, X, *_):
return self.predict(X)
class RandomForestTransformer(RandomForestRegressor, TransformerMixin):
def transform(self, X, *_):
return self.predict(X)
class KNeighborsTransformer(KNeighborsRegressor, TransformerMixin):
def transform(self, X, *_):
return self.predict(X)
이제 프랑켄슈타인 모델을위한 빌더 함수를 정의 해 봅시다 :
def build_model():
ridge_transformer = Pipeline(steps=[
('scaler', StandardScaler()),
('poly_feats', PolynomialFeatures()),
('ridge', RidgeTransformer())
])
pred_union = FeatureUnion(
transformer_list=[
('ridge', ridge_transformer),
('rand_forest', RandomForestTransformer()),
('knn', KNeighborsTransformer())
],
n_jobs=2
)
model = Pipeline(steps=[
('pred_union', pred_union),
('lin_regr', LinearRegression())
])
return model
마지막으로 모델을 맞추겠습니다.
print('Build and fit a model...')
model = build_model()
X, y = make_regression(n_features=10, n_targets=2)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
model.fit(X_train, y_train)
score = model.score(X_test, y_test)
print('Done. Score:', score)
산출:
Build and fit a model...
Done. Score: 0.9600413867438636
그런 식으로 문제를 복잡하게하는 이유는 무엇입니까? 이 접근법을 사용하면 또는 scikit-learn
과 같은 표준 모듈을 사용하여 모델 하이퍼 파라미터를 최적화 할 수 있습니다 . 또한 사전 훈련 된 모델을 디스크에서 쉽게 저장하고로드 할 수 있습니다.GridSearchCV
RandomizedSearchCV