python - NLP的工作流程
问题描述
我应该什么时候在 NLP 中执行文本数据的预处理和矩阵创建,之前还是之后train_test_split
?下面是我之前完成预处理和矩阵创建 (tfidf) 的示例代码train_test_split
。我想知道会不会有数据泄露?
corpus = []
for i in range(0 ,len(data1)):
review = re.sub('[^a-zA-Z]', ' ', data1['features'][i])
review = review.lower()
review = review.split()
review = [stemmer.stem(j) for j in review if not j in set(stopwords.words('english'))]
review = ' '.join(review)
corpus.append(review)
from sklearn.feature_extraction.text import TfidfVectorizer
cv = TfidfVectorizer(max_features = 6000)
x = cv.fit_transform(corpus).toarray()
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
y = le.fit_transform(data1['label'])
from sklearn.model_selection import train_test_split
train_x, test_x, train_y, test_y = train_test_split(x, y, test_size = 0.2, random_state = 69,
stratify = y)
spam_model = MultinomialNB().fit(train_x, train_y)
pred = spam_model.predict(test_x)
c_matrix = confusion_matrix(test_y, pred)
acc_score = accuracy_score(test_y, pred)
解决方案
正如官方文档 TfidfVectorizer
类中提到的,max_features
参数只保留 k-best 特性。
max_featuresint,默认=无
If not None, build a vocabulary that only consider the top max_features ordered by term frequency across the corpus.
如果您向班级展示测试集,这将有助于更有效地选择此功能,这就是数据泄漏(此方案基于您的问题,但在大多数情况下,可以看到!)。机器学习中最安全的方法是在预测/评估之前忽略测试集,认为它就像不存在一样!
[更新]您可以在此处 查看 kaggle 的示例,该示例在预拆分数据集上使用矢量化器!更多关于这里和这里提到的这个概念!
推荐阅读
- node.js - 你如何将 HTTP2 lib 与 EXPRESS js 一起使用?,我遇到了这个问题 TypeError: Cannot read property 'readable' of undefined
- react-native - 数据数组将自动生成 React-Native 中每个对象的文本输入
- python - Python 的随机森林特征重要性鲁棒性
- python - 熊猫数据框在某行移动值
- angular - 找不到模块'C:\Users\username\project\node_modules\@angular\cli\bin\ng'
- azure - Azure 应用服务 WEBSITE_TIME_ZONE 适用于 web,但不适用于 sqlite
- html - 相对父级中的绝对子级,然后再一次,所有子级都在绝对父级中
- python - Python多索引合并值
- listview - 为什么ListView中不显示Bitmap
- python - Python 包未安装在任何 sys.path 目录中