当我尝试将tf-idf应用于测试集时,尺寸不匹配

低密度脂蛋白

我尝试按照以下答案对我的数据集应用新的预处理算法:在ML分类器中编码文本

我现在尝试的是以下内容:

def test_tfidf(data, ngrams = 1):

    df_temp = data.copy(deep = True)
    df_temp = basic_preprocessing(df_temp)
    
    tfidf_vectorizer = TfidfVectorizer(ngram_range=(1, ngrams))
    tfidf_vectorizer.fit(df_temp['Text'])

    list_corpus = df_temp["Text"].tolist()
    list_labels = df_temp["Label"].tolist()

    X = tfidf_vectorizer.transform(list_corpus)
    
    return X, list_labels

(我建议参考上面提到的所有代码链接)。当我尝试将后两个函数应用于我的数据集时:

train_x, train_y, count_vectorizer  = tfidf(undersample_train, ngrams = 1)
testing_set = pd.concat([X_test, y_test], axis=1)
test_x, test_y = test_tfidf(testing_set, ngrams = 1)

full_result = full_result.append(training_naive(train_x, test_x, train_y, test_y), ignore_index = True)

我收到此错误:

---> 12 full_result = full_result.append(training_naive(train_x, test_x, train_y, test_y, ), ignore_index = True) 
---> 14     y_pred = clf.predict(X_test_naive)

ValueError: dimension mismatch

错误中提到的函数是:

def training_naive(X_train_naive, X_test_naive, y_train_naive, y_test_naive, preproc):
    
    clf = MultinomialNB() 
    clf.fit(X_train_naive, y_train_naive)
    y_pred = clf.predict(X_test_naive)
        
    return 

在理解我的新定义中有什么问题和/或将tf-idf应用于我的数据集方面的任何帮助(请在此处参考相关部分:在ML分类器中编码文本),将不胜感激。

更新:我认为此问题/答案也可能有助于我解决以下问题:scikit-学习ValueError:尺寸不匹配

如果我更换test_x, test_y = test_tfidf(testing_set, ngrams = 1)test_x, test_y = test_tfidf(undersample_train, ngrams = 1)它不返回任何错误。但是,我认为这是不对的,因为我得到的价值非常高(所有统计数据中的99%)

Qusai Alothman

使用转换时(TfidfVectorizer在这种情况下),必须在训练数据和测试数据都使用同一对象的情况下进行转换通常仅使用培训数据来装配变压器,然后将其重新用于转换测试数据。

在您的情况下执行此操作的正确方法是:

def tfidf(data, ngrams = 1):

    df_temp = data.copy(deep = True)
    df_temp = basic_preprocessing(df_temp)
    
    tfidf_vectorizer = TfidfVectorizer(ngram_range=(1, ngrams))
    tfidf_vectorizer.fit(df_temp['Text'])

    list_corpus = df_temp["Text"].tolist()
    list_labels = df_temp["Label"].tolist()

    X = tfidf_vectorizer.transform(list_corpus)
    
    return X, list_labels, tfidf_vectorizer


def test_tfidf(data, vectorizer, ngrams = 1):

    df_temp = data.copy(deep = True)
    df_temp = basic_preprocessing(df_temp)

    # No need to create a new TfidfVectorizer here!

    list_corpus = df_temp["Text"].tolist()
    list_labels = df_temp["Label"].tolist()

    X = vectorizer.transform(list_corpus)
    
    return X, list_labels

# this method is copied from the other SO question
def training_naive(X_train_naive, X_test_naive, y_train_naive, y_test_naive, preproc):
    
    clf = MultinomialNB() # Gaussian Naive Bayes
    clf.fit(X_train_naive, y_train_naive)

    res = pd.DataFrame(columns = ['Preprocessing', 'Model', 'Precision', 'Recall', 'F1-score', 'Accuracy'])
    
    y_pred = clf.predict(X_test_naive)
    
    f1 = f1_score(y_pred, y_test_naive, average = 'weighted')
    pres = precision_score(y_pred, y_test_naive, average = 'weighted')
    rec = recall_score(y_pred, y_test_naive, average = 'weighted')
    acc = accuracy_score(y_pred, y_test_naive)
    
    res = res.append({'Preprocessing': preproc, 'Model': 'Naive Bayes', 'Precision': pres, 
                     'Recall': rec, 'F1-score': f1, 'Accuracy': acc}, ignore_index = True)

    return res 

train_x, train_y, count_vectorizer  = tfidf(undersample_train, ngrams = 1)
testing_set = pd.concat([X_test, y_test], axis=1)
test_x, test_y = test_tfidf(testing_set, count_vectorizer, ngrams = 1)

full_result = full_result.append(training_naive(train_x, test_x, train_y, test_y, count_vectorizer), ignore_index = True)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当我尝试运行测试时,获取“不匹配的匿名define()模块...”

来自分类Dev

当我尝试将数据插入数据库时,应用程序崩溃

来自分类Dev

将List <MyObject>绑定到DataGrid吗?当我尝试时,我收到“ TargetInvocationException”

来自分类Dev

当我尝试将mysql与php连接时,我的XAMPP服务器返回错误

来自分类Dev

错误:将默认类型'int * int'应用于类型推断变量时,类型约束不匹配

来自分类Dev

我正在尝试将线性渐变应用于我的身体,但这不起作用。现在,当我使用径向渐变时,它可以工作。这是为什么?

来自分类Dev

当我尝试将表格设置为干净时,脏表格显示错误

来自分类Dev

当我尝试插入ip2long整数时,将错误的整数插入表中

来自分类Dev

当我尝试将某些内容以图表或ChartObject的形式显示时出错

来自分类Dev

当我尝试将文件夹添加到存档时出现错误:路径太长

来自分类Dev

当我尝试将sonarqube与Azure Devops构建管道连接时出现以下错误

来自分类Dev

当我尝试增加变量时,无法将变量与字典中的值进行比较

来自分类Dev

当我尝试将kubectl补丁部署到Gitlab时Yaml无效

来自分类Dev

猫鼬无法将“”的属性设置为undefined,每当我尝试创建新条目时。

来自分类Dev

当我尝试将r-markdown导出到pdf时出现错误

来自分类Dev

当我尝试将精灵添加到屏幕时,PyGame滞后

来自分类Dev

当我尝试将Excel文件转换为列表时,“ DataFrame”对象没有属性“ tolist”

来自分类Dev

当我尝试将String转换为Date时,它使用Javascript返回今天的日期吗?

来自分类Dev

当我尝试将文件内容输入到列表框中时,程序冻结

来自分类Dev

当我尝试将鼠标悬停时,导航下拉列表会不断消失

来自分类Dev

当我尝试将值添加到Array时java.lang.NullPointerException

来自分类Dev

当我尝试将String转换为Integer时引发错误

来自分类Dev

当我尝试插入ip2long整数时,将错误的整数插入表中

来自分类Dev

当我尝试使用BufferedReader将整数输入存储到数组时遇到数字格式异常

来自分类Dev

当我尝试将消息写入文件时出现java.util.ConcurrentModificationException

来自分类Dev

当我尝试在newtonsoft.json中使用Jsonserialize时,将null返回给字符串

来自分类Dev

当我尝试将dateTime字段添加到表中时出错

来自分类Dev

当我尝试将文件夹添加到存档时,出现错误:路径太长

来自分类Dev

当我尝试将值插入表时,错误 msg SQL 命令未正确结束

Related 相关文章

  1. 1

    当我尝试运行测试时,获取“不匹配的匿名define()模块...”

  2. 2

    当我尝试将数据插入数据库时,应用程序崩溃

  3. 3

    将List <MyObject>绑定到DataGrid吗?当我尝试时,我收到“ TargetInvocationException”

  4. 4

    当我尝试将mysql与php连接时,我的XAMPP服务器返回错误

  5. 5

    错误:将默认类型'int * int'应用于类型推断变量时,类型约束不匹配

  6. 6

    我正在尝试将线性渐变应用于我的身体,但这不起作用。现在,当我使用径向渐变时,它可以工作。这是为什么?

  7. 7

    当我尝试将表格设置为干净时,脏表格显示错误

  8. 8

    当我尝试插入ip2long整数时,将错误的整数插入表中

  9. 9

    当我尝试将某些内容以图表或ChartObject的形式显示时出错

  10. 10

    当我尝试将文件夹添加到存档时出现错误:路径太长

  11. 11

    当我尝试将sonarqube与Azure Devops构建管道连接时出现以下错误

  12. 12

    当我尝试增加变量时,无法将变量与字典中的值进行比较

  13. 13

    当我尝试将kubectl补丁部署到Gitlab时Yaml无效

  14. 14

    猫鼬无法将“”的属性设置为undefined,每当我尝试创建新条目时。

  15. 15

    当我尝试将r-markdown导出到pdf时出现错误

  16. 16

    当我尝试将精灵添加到屏幕时,PyGame滞后

  17. 17

    当我尝试将Excel文件转换为列表时,“ DataFrame”对象没有属性“ tolist”

  18. 18

    当我尝试将String转换为Date时,它使用Javascript返回今天的日期吗?

  19. 19

    当我尝试将文件内容输入到列表框中时,程序冻结

  20. 20

    当我尝试将鼠标悬停时,导航下拉列表会不断消失

  21. 21

    当我尝试将值添加到Array时java.lang.NullPointerException

  22. 22

    当我尝试将String转换为Integer时引发错误

  23. 23

    当我尝试插入ip2long整数时,将错误的整数插入表中

  24. 24

    当我尝试使用BufferedReader将整数输入存储到数组时遇到数字格式异常

  25. 25

    当我尝试将消息写入文件时出现java.util.ConcurrentModificationException

  26. 26

    当我尝试在newtonsoft.json中使用Jsonserialize时,将null返回给字符串

  27. 27

    当我尝试将dateTime字段添加到表中时出错

  28. 28

    当我尝试将文件夹添加到存档时,出现错误:路径太长

  29. 29

    当我尝试将值插入表时,错误 msg SQL 命令未正确结束

热门标签

归档