У меня есть список предложений, которые должны в конечном итоге оказаться в классификаторе стохастического градиента.Я преобразую слова в векторы, используя 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, не так ли?
Кто-нибудь может мне помочь?