【问题标题】:Query data dimension must match training data dimension查询数据维度必须匹配训练数据维度
【发布时间】:2019-07-10 14:44:54
【问题描述】:

我正在开发一个推文分类器。我用一个 tfidf 数据集训练了一个 knn 分类器,其中每行的长度为 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: 查询数据维度必须匹配训练数据维度

【问题讨论】:

    标签: python scikit-learn nlp knn tweets


    【解决方案1】:

    解决方法很简单:

    您需要将vect.fit_transform() 与训练数据一起使用。但是,在使用测试数据时,只需要使用vect.transform()即可。

    【讨论】:

      猜你喜欢
      • 2019-05-14
      • 2020-03-15
      • 2015-07-09
      • 2017-05-19
      • 2018-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多