Как передать модель конвейера в класс, не создавая его экземпляры - PullRequest
0 голосов
/ 03 июля 2019

Я хотел бы создать класс, который принимает конвейер scikit-learn и зацикливается на нем (как в примере кода ниже).

В приведенном ниже примере я, однако, могу только передать экземпляр моего конвейерав класс, а не создавать новый, чтобы начать с новой модели.

from sklearn.ensemble import AdaBoostClassifier 
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_iris
from sklearn.pipeline import Pipeline


class my_class:
    def __init__(self,model):
        self.model = model
    def evaluate(self, X, y):
        results = []
        for i in range(10):
            self.model.fit(X,y) #I always use the same instance here.
            y_pred = self.model.predict(X)
            results.append(accuracy_score(y_pred=y_pred, y_true=y))
        return results 

iris = load_iris()
X = iris.data
y = iris.target

pipeline = Pipeline([
    ('classifier', AdaBoostClassifier())
])

test = my_class(pipeline)
scores = test.evaluate(X,y)

1 Ответ

0 голосов
/ 03 июля 2019

Ваш код может инициализировать разные модели, но результат всегда будет одинаковым, потому что вы тренируетесь и тестируете одни и те же данные X каждый раз без каких-либо изменений в гиперпараметрах и random_state как None.Вот почему список results всегда будет содержать одно и то же значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...