X_train和y_train是什么?

14

我希望开始开发一个使用机器学习的应用程序。我想对文本进行分类 - 垃圾邮件或非垃圾邮件。我有两个文件 - spam.txtham.txt - 每个文件包含数千个句子。如果我想使用分类器,比如LogisticRegression

例如,我在互联网上看到,为了适合我的模型,我需要像这样做:

`lr = LogisticRegression()
model = lr.fit(X_train, y_train)`

那么我有一个问题,什么是实际的X_trainy_train?我怎样才能从我的句子中获取它们?我在互联网上搜索了一番,但是我并没有理解。这是我最后的呼唤,因为我对这个主题非常陌生。谢谢!


5
X_train 包含所有实例的属性,y_train 则是每个实例对应的标签。由于您的问题是二元分类问题,并且使用逻辑回归算法,因此 y_train 只能为 0 或 1(垃圾邮件或非垃圾邮件)。 - Heaven
1个回答

7
根据文档 (参见 这里):
  • X 对应于形状为 (n_samples, n_features) 的浮点特征矩阵(也称为训练集的设计矩阵)
  • y 是形状为 (n_samples,) 的浮点目标向量(即标签向量)。在您的情况下,标签 0 可以对应于垃圾邮件示例,而标签 1 可以对应于正常邮件

现在的问题是如何从文本数据中获取浮点特征矩阵。

常见的方案是使用tf-idf向量化(更多信息请参考这里), 该方法在sklearn中可用。

向量化可以通过 sklearnPipeline API与逻辑回归组合使用。

以下是大致的代码示例:

from itertools import chain

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LogisticRegression

import numpy as np

# prepare string data
with open('spam.txt', 'r') as f:
   spam = f.readlines()

with open('ham.txt', 'r') as f:
   ham = f.readlines()

text_train = list(chain(spam, ham))

# prepare labels
labels_train = np.concatenate((np.zeros(len(spam)),np.ones(len(ham))))

# build pipeline
vectorizer = TfidfVectorizer()
regressor = LogisticRegression()

pipeline = Pipeline([('vectorizer', vectorizer), ('regressor', regressor)])

# fit pipeline
pipeline.fit(text_train, labels_train)

# test predict
test = ["Is this spam or ham?"]
pipeline.predict(test) # value in [0,1] 

假设我想要有两个文本类别:测试和训练。我将我的数据分成两部分(80-20%,70-30%等),然后我可以像获取text_train一样获取text_test吗? 我是在谈论如何获取X_testy_test - user9886692
1
可以的。管道将学习训练集中出现的词汇单词的_idf_值,以及逻辑回归中的权重和偏差。 因此,X_test可以馈送到管道的“predict”方法中,其输出可以与y_test进行比较。 - syltruong
syltruong 我还有一些问题,你觉得你能通过邮件帮助我吗? - user9886692
天哪!XY的解释被隐藏得相当好:-\ - t3chb0t

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接