sklearn中的x_test,x_train,y_test,y_train有什么区别?

时间:2020-03-11 12:49:49

标签: python machine-learning scikit-learn sklearn-pandas supervised-learning

我正在学习sklearn,我不十分清楚它们之间的区别,以及为什么要使用带有Train_test_split函数的4个输出。

在文档中,我找到了一些示例,但这还不足以结束我的疑问。

代码是使用x_train预测x_test还是使用x_train预测y_test?

培训与考试有什么区别?我会使用火车来预测测试或类似的结果吗?

我对此很困惑。我将在文档中提供的示例下面。

>>> import numpy as np  
>>> from sklearn.model_selection import train_test_split  
>>> X, y = np.arange(10).reshape((5, 2)), range(5)  
>>> X
array([[0, 1], 
       [2, 3],  
       [4, 5],  
       [6, 7],  
       [8, 9]])  
>>> list(y)  
[0, 1, 2, 3, 4] 
>>> X_train, X_test, y_train, y_test = train_test_split(  
...     X, y, test_size=0.33, random_state=42)  
...  
>>> X_train  
array([[4, 5], 
       [0, 1],  
       [6, 7]])  
>>> y_train  
[2, 0, 3]  
>>> X_test  
array([[2, 3], 
       [8, 9]])  
>>> y_test  
[1, 4]  
>>> train_test_split(y, shuffle=False)  
[[0, 1, 2], [3, 4]]

3 个答案:

答案 0 :(得分:5)

下面是一个虚拟pandas.DataFrame,例如:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

df = pd.DataFrame({'X1':[100,120,140,200,230,400,500,540,600,625],
                       'X2':[14,15,22,24,23,31,33,35,40,40],
                       'Y':[0,0,0,0,1,1,1,1,1,1]})

这里我们有3列,X1,X2,Y 假设X1 & X2是您的自变量,而'Y'列是您的因变量。

X = df[['X1','X2']]
y = df['Y']

使用sklearn.model_selection.train_test_split,您将创建4部分数据,这些数据将用于拟合和预测值。

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.4,random_state=42) 

X_train, X_test, y_train, y_test

现在

1)。 X_train -这包括您所有的独立变量,这些变量将用于训练模型,也正如我们指定的test_size = 0.4一样,这意味着将使用来自您完整数据的60%个观测值训练/拟合模型,其余的40%将用于测试模型。

2)。 X_test -这是数据中自变量的其余40%部分,这些部分将不会在训练阶段使用,并将用于进行预测以测试模型的准确性。

3)。 y_train -这是该模型需要预测的因变量,其中包括针对您的自变量的类别标签,我们需要在训练/拟合模型时指定因变量。

4)。 y_test -此数据具有测试数据的类别标签,这些标签将用于测试实际类别和预测类别之间的准确性。

现在您可以在此数据上拟合模型,让我们拟合sklearn.linear_model.LogisticRegression

logreg = LogisticRegression()
logreg.fit(X_train, y_train) #This is where the training is taking place
y_pred_logreg = logreg.predict(X_test) #Making predictions to test the model on test data
print('Logistic Regression Train accuracy %s' % logreg.score(X_train, y_train)) #Train accuracy
#Logistic Regression Train accuracy 0.8333333333333334
print('Logistic Regression Test accuracy %s' % accuracy_score(y_pred_logreg, y_test)) #Test accuracy
#Logistic Regression Test accuracy 0.5
print(confusion_matrix(y_test, y_pred_logreg)) #Confusion matrix
print(classification_report(y_test, y_pred_logreg)) #Classification Report

您可以了解有关指标here

的更多信息

详细了解数据here

希望这会有所帮助:)

答案 1 :(得分:0)

您应该使用训练集来训练分类器/回归器,并使用测试集对其进行测试/评估。

您的分类器/回归器使用x_train来预测y_pred,并使用y_predy_train之间的差(通过损失函数)进行学习。然后,您可以通过计算x_test(也可以称为y_pred)和y_test的预测之间的损失来评估它。

答案 2 :(得分:0)

将X视为1000个数据点,将Y视为整数类标签(每个数据点所属的类)

例如:
X = [1.24 2.36 3.24 ...(1000个条件)
Y = [1,0,0,1 .....(1000个条件)]

我们正在以600:400的比例进行分配

X_train =>将具有600个数据点

Y_train =>将具有400个数据点

X_test =>将具有对应于600个数据点的类标签

Y_test =>将具有对应于400个数据点的类标签