sk-learn: Kesalahan fit() membutuhkan 2 argumen posisi tetapi 3 diberikan di FeatureUnion

Saya menggunakan sk-learn dengan python untuk menyesuaikan model dan mengubah input_data melalui model.

Saya menggunakan FeatureUnion untuk menggabungkan CountVectorizer dan TfidfEmbeddingVectorizer.

Boleh saja menggunakan CountVectorizer atau TfidfEmbeddingVectorizer saja, tetapi jika saya menggabungkan dua fitur dengan Feature Union, ada kesalahan seperti ini:

TypeError: fit() takes 2 positional arguments but 3 were given

Kelas TfidfEmbeddingVectorizer seperti ini:

class TfidfEmbeddingVectorizer(object):
   ...
    def fit(self, X):
            tfidf = TfidfVectorizer(analyzer=lambda x: x)
            tfidf.fit(X)
            # if a word was never seen - it must be at least as infrequent
            # as any of the known words - so the default idf is the max of 
            # known idf's
            max_idf = max(tfidf.idf_)
            self.word2weight = defaultdict(
                lambda: max_idf,
                [(w, tfidf.idf_[i]) for w, i in tfidf.vocabulary_.items()])

            return self

Dan saya menggunakan FeatureUnion seperti ini:

model = gensim.models.Word2Vec(speech.train_data, size = 100)
w2v = dict(zip(model.wv.index2word, model.wv.syn0))

count = CountVectorizer(tokenizer=lambda doc: doc, lowercase=False)
w2v_tfidf = TfidfEmbeddingVectorizer(w2v)
feature_union = FeatureUnion([('ngram', count),
                             ('tfidf', w2v_tfidf)])
feature_union.fit(speech.train_data)

Saya telah melihat solusi yang menurunkan versi sk-learn menjadi 0.18.0 membuatnya baik-baik saja, Tapi saya tidak dapat menurunkan versi sk-learn dengan kesalahan ini:

error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://andinghub.visualstudio.com/visual-cpp-build-tools

Apakah ada solusi lain untuk menggunakan fungsi fit FeatureUnion?


person Gi Yeon Shin    schedule 08.04.2018    source sumber


Jawaban (1)


Metode fit() dari FeatureUnion mengambil X, dan y sebagai masukan sesuai dengan dokumentasi:

cocok(X, y=Tidak Ada)

Fit all transformers using X.

Meskipun nilai defaultnya adalah None tetapi tetap diteruskan ke trafo internal. Itu hadir di sana untuk alasan kompatibilitas saat digunakan dalam Pipeline.

Sekarang berbicara tentang metode trafo internal fit().

cocok(dokumen_mentah, y=Tidak Ada)

Learn vocabulary and idf from training set.

Seperti yang Anda lihat, ini juga berisi y untuk alasan yang sama meskipun tidak digunakan di mana pun.

  • TfidfEmbeddingVectorizer fit() khusus Anda tidak memiliki parameter y tambahan.

Namun gabungan fitur akan mencoba memasukkan y (dengan nilai None) ke dalamnya dan karenanya terjadi kesalahan. Ubah saja fit menjadi:

def fit(self, X, y=None):
    ....
    ....
person Vivek Kumar    schedule 09.04.2018