Измерение данных запроса должно соответствовать измерению данных обучения - PullRequest
0 голосов
/ 16 февраля 2019

Я разрабатываю классификатор твитов.Я обучил knn clasiffier с набором данных tfidf, в котором каждая строка имеет длину 3,173, после обучения модели загрузил ее в файл, чтобы я мог классифицировать новые твиты.

Проблема в том, что каждый раз, когда я извлекаю новые твиты и пытаюсь их классифицировать, значения tfidf меняются в зависимости от словаря новых извлеченных твитов, поэтому модель не может классифицировать эти новые твиты.

Я искал и пытался решить эту проблему в течение двух дней, но не нашел эффективного решения.Как я могу эффективно адаптировать измерение запрашиваемых данных к измерению обучающих данных ???

Вот мой код:

 #CLASIFICA TWEETS TASS TEST
    clf = joblib.load('files/model_knn_pos.sav')

    #Carga los tweets
    dfNew = pd.read_csv(f'files/tweetsTASStestCaract.csv', encoding='UTF-8',sep='|')

    #Preprocesa 
    prepro = Preprocesado()
    dfNew['clean_text'] = prepro.procesa(dfNew['tweet'])

    #Tercer excluso
    dfNew['type'].replace(['NEU','N','NONE'], 'NoPos', inplace=True)

    #Funcion auxiliar para crear los vectores
    def tokenize(s):
        return s.split()

    #Creo un vector por cada tweet, tendré en cuenta las palabras q aparezcan al menos 3 veces
    vect = TfidfVectorizer(tokenizer=tokenize, ngram_range=(1, 2), max_df=0.75, min_df=3, sublinear_tf=True)
    muestra = vect.fit_transform(dfNew['clean_text']).toarray().tolist()

    #Caracterizo los tweets a clasificar
    for i in range(len(muestra)):
            caract=dfNew.drop(columns=['tweet','clean_text','type']).values[i]
            muestra[i].extend(caract)

    #Clasifica pos
    y_train=dfNew['type'].values
    resultsPos = clf.predict(muestra)
    print(Counter(resultsPos))  

И вот эта ошибка, которую я получаю:

Файл "sklearn / neighbors / binary_tree.pxi", строка 1294, в sklearn.neighbors.kd_tree.BinaryTree.query

ValueError: измерение данных запроса должно соответствовать измерению данных обучения

1 Ответ

0 голосов
/ 17 февраля 2019

Решение простое:

Вам необходимо использовать vect.fit_transform() с данными обучения.Но при использовании тестовых данных вам нужно только использовать vect.transform().

...