Я использую GridSearchCV и подходит Ошибка: get_params () отсутствует 1 обязательный позиционный аргумент - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть список предложений, которые должны в конечном итоге оказаться в классификаторе стохастического градиента.Я преобразую слова в векторы, используя word2vec, усредняю ​​предложение и предоставляю эти векторы в SGC.

Прекрасно работает, при подгонке и прогнозировании с заданными параметрами.Но когда я применяю gridSearch, чтобы найти лучшие параметры для SGC, это терпит неудачу.

Я добавил set_params и get_params в событие моего класса, хотя я выполняю только Grid Search по классификатору.

ЭтоМой класс для векторизации с использованием word2vec.

import numpy as np
from gensim.models import Word2Vec
from sklearn.linear_model import SGDClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import Pipeline

class MeanEmbeddingVectorizer(object):
    def __init__(self, word2vec):
        self.word2vec = word2vec
        if self.word2vec.vector_size > 0:
            self.dim = self.word2vec.vector_size
        else:
            self.dim = 0

    def set_params(self, **parameters):
        print("foo")

    def get_params(self,deep=True):
            return {}

    def fit(self, X, y):
        return self

    def transform(self, X):
        return np.array([
            np.sum([self.word2vec[w] for w in words if w in self.word2vec]
                    or [np.zeros(self.dim)], axis=0)
            for words in X

        ])

И вот сценарий теста:

def test():
    X = [['hello', 'world'],['this', 'is', 'not', 'working']]
    y = ['alright','wrong']
    model = Word2Vec(X, size=100, window=10, min_count=0,
                     workers=8, iter = 30,sg = 1)   
    w2v = model.wv

    text_clf_SGC_MEAN = Pipeline([('tfidf', MeanEmbeddingVectorizer(w2v)),
                        ('clfTest',SGDClassifier())])

    #that works
    fitted = text_clf_SGC_MEAN.fit(X, y)
    predicted_svm3 = fitted.predict(X)
    print(np.mean(predicted_svm3 == y))

    # that does NOT work
    parameters = {'clfTest__alpha': (1e-2, 1e-3)}
    gs_clf = GridSearchCV(text_clf_SGC_MEAN, parameters, n_jobs=-1,)
    gs_clf = gs_clf.fit(X, y)

    #__init__() missing 1 required positional argument: 'word2vec'

Я не понимаю, почему это не работает.с clfTest__alpha он должен только оптимизировать альфа для SGC, не так ли?

Кто-нибудь может мне помочь?

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