X_train 和 y_train 是啥?

Posted

技术标签:

【中文标题】X_train 和 y_train 是啥?【英文标题】:What are X_train and y_train?X_train 和 y_train 是什么? 【发布时间】:2018-11-12 17:12:55 【问题描述】:

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

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

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

所以我的问题来了,X_trainy_train 实际上是什么?我如何从我的句子中获得它们?我在互联网上搜索,我不明白,这是我的最后一个电话,我对这个话题很陌生。谢谢!

【问题讨论】:

X_train 是所有具有属性的实例,y_train 是每个实例的标签。因为您的问题是二元分类问题并使用逻辑回归。您的 y_train 为 0 或 1(是否为垃圾邮件)。 【参考方案1】:

根据文档(见here):

X 对应于形状为 (n_samples, n_features) 的浮点特征矩阵(又名。训练集的设计矩阵y 是形状为 (n_samples,) 的浮点目标向量(标签向量)。在您的情况下,标签 0 可能对应于垃圾邮件示例,1 可能对应于火腿示例

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

一个常见的方案是使用 tf-idf 矢量化(更多关于这个here),它在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] 

【讨论】:

假设我想要 2 类文本:测试和训练。我将我的数据分成 2(80-20%,70-30% 等等),我可以像 text_train 一样获得 text_test?我说的是获取X_testy_test 是的,你可以。管道将学习训练集中出现的词汇的 idf 值,以及逻辑回归中的权重和偏差。因此,X_test 可以馈送到管道的predict 方法,该方法的输出可以与y_test 进行比较。 syltruong 我还有一些问题,你认为你可以通过邮件帮助我吗? 天哪! XY 的解释隐藏得很好:-\

以上是关于X_train 和 y_train 是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 LSTM keras 重塑 X_train 和 y_train

K近邻实现

我正在尝试训练我的 X_train 和 y_train 但存在数组维度问题

clf.score(X_train,Y_train) 在决策树中评估啥?

错误:未知标签类型:'unknown'....y_train 值与 x_train 值不一致

sklearn grid.fit(X,y) - 错误:X_train,y_train 的“位置索引器超出范围”