nxf*_*777 1 python machine-learning tf-idf python-3.x scikit-learn
我正在尝试创建一个 AI 来读取我的数据集并说明数据外部的输入是 1 还是 0
我的数据集具有定性数据列和布尔值列。这是其中的一个示例:
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
import re
import string
Run Code Online (Sandbox Code Playgroud)
saisei_data = saisei_data.dropna(how='any',axis=0)
saisei_data = saisei_data.sample(frac=1)
X = saisei_data['Data']
y = saisei_data['Conscious']
saisei_data
Run Code Online (Sandbox Code Playgroud)
from sklearn.feature_extraction.text import TfidfVectorizer
vectorization = TfidfVectorizer()
xv_train = vectorization.fit_transform(X_train)
xv_test = vectorization.fit_transform(X_test)
Run Code Online (Sandbox Code Playgroud)
LR = LogisticRegression()
LR.fit(xv_train,y_train)
pred_lr=LR.predict(xv_test) # Here is where I get an error
Run Code Online (Sandbox Code Playgroud)
一切正常,直到我使用逻辑回归算法进行预测。
ValueError: X has 112 features per sample; expecting 23
Run Code Online (Sandbox Code Playgroud)
这似乎会变成类似的错误,例如:
ValueError: X has 92 features per sample; expecting 45
Run Code Online (Sandbox Code Playgroud)
我是机器学习的新手,所以我真的不知道在使用算法时我在做什么,但是我尝试打印 xv_test 变量,这是输出的示例(也经常更改):
有任何想法吗?
那是因为你错误地应用了.fit_transform()你的测试数据;并且,在这种情况下,您很幸运,该过程会产生编程错误,从而提醒您正在做一些方法上错误的事情(情况并非总是如此)。
我们从不将.fit()或应用于.fit_transform()看不见的(测试)数据。拟合应该只对训练数据进行一次,就像您在这里所做的那样:
xv_train = vectorization.fit_transform(X_train)
Run Code Online (Sandbox Code Playgroud)
对于未见过的(测试)数据的后续转换,我们仅使用.transform(). 所以,你的下一行应该是
xv_test = vectorization.transform(X_test)
Run Code Online (Sandbox Code Playgroud)
这样,测试集中的特征将与训练集中的特征相同,因为它应该放在首位。
请注意文档中两种方法之间的区别(重点是我的):
学习词汇和idf,返回文档术语矩阵。
将文档转换为文档术语矩阵。
使用通过 fit(或 fit_transform)学习的词汇和文档频率(df) 。
请记住,我们从来没有使用测试集来学习任何东西。
所以,简单的通用助记符规则,几乎无处不在:
术语“拟合”和“测试数据”总是(总是......)不兼容;混合它们会造成严重破坏。
| 归档时间: |
|
| 查看次数: |
1512 次 |
| 最近记录: |