Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查询数据维度必须与培训数据维度匹配_Python_Scikit Learn_Nlp_Knn_Tweets - Fatal编程技术网

Python 查询数据维度必须与培训数据维度匹配

Python 查询数据维度必须与培训数据维度匹配,python,scikit-learn,nlp,knn,tweets,Python,Scikit Learn,Nlp,Knn,Tweets,我正在开发一个tweet分类器。我用一个tfidf数据集训练了一个knn分类程序,其中每一行的长度为3.173,训练完模型a后,将其加载到一个文件中,以便我可以对新的推文进行分类 问题是,每次我提取新tweet并尝试对其进行分类时,tfidf的长度都会根据新提取tweet的词汇表而变化,因此模型不可能对这些新tweet进行分类 我已经搜索并试图解决这个问题两天了,但没有找到一个有效的解决方案。如何有效地将查询数据的维度调整为训练数据的维度 这是我的密码: #CLASIFICA TWEETS T

我正在开发一个tweet分类器。我用一个tfidf数据集训练了一个knn分类程序,其中每一行的长度为3.173,训练完模型a后,将其加载到一个文件中,以便我可以对新的推文进行分类

问题是,每次我提取新tweet并尝试对其进行分类时,tfidf的长度都会根据新提取tweet的词汇表而变化,因此模型不可能对这些新tweet进行分类

我已经搜索并试图解决这个问题两天了,但没有找到一个有效的解决方案。如何有效地将查询数据的维度调整为训练数据的维度

这是我的密码:

 #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/neights/binary_tree.pxi”,第1294行,在 sklearn.neights.kd_tree.BinaryTree.query

ValueError:查询数据维度必须与培训数据维度匹配


解决方案很简单:

您需要对训练数据使用
vect.fit\u transform()
。但是,在使用测试数据时,只需使用
vect.transform()