Я только что столкнулся с ошибкой при попытке применить перекрестную проверку для векторной модели абзаца:
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import Pipeline
from gensim.sklearn_api import D2VTransformer
data = pd.read_csv('https://pastebin.com/raw/bSGWiBfs')
np.random.seed(0)
X_train = data.apply(lambda r: simple_preprocess(r['text'], min_len=2), axis=1)
y_train = data.label
model = D2VTransformer(size=10, min_count=1, iter=5, seed=1)
clf = LogisticRegression(random_state=0)
pipeline = Pipeline([
('vec', model),
('clf', clf)
])
pipeline.fit(X_train, y_train)
score = pipeline.score(X_train, y_train)
print("Score:", score) # This works
cval = cross_val_score(pipeline, X_train, y_train, scoring='accuracy', cv=3)
print("Cross-Validation:", cval) # This doesn't work
KeyError: 0
Я экспериментировал, заменив X_train
в cross_val_score
на model.transform(X_train)
или model.fit_transform(X_train)
. Кроме того, я попытался сделать то же самое с необработанными входными данными (data.text
) вместо предварительно обработанного текста. Я подозреваю, что что-то не так с форматом X_train
для перекрестной проверки, по сравнению с функцией .score
для Pipeline, которая работает просто отлично. Я также отметил, что cross_val_score
работал с CountVectorizer()
.
Кто-нибудь замечает ошибку?