如何在Python中使用Sklearn做训练和测试分割
在这篇文章中,让我们学习如何在Python中使用Sklearn做训练测试分割。
用Sklearn做训练和测试
train_test_split()方法被用来将我们的数据分成训练集和测试集。
首先,我们需要将我们的数据分为特征(X)和标签(Y)。数据帧被分为X_train,X_test , y_train和y_test。X_train和y_train集被用于训练和拟合模型。X_test和y_test集用于测试模型是否预测了正确的输出/标签。我们可以明确地测试训练集和测试集的大小。建议保持我们的训练集比测试集大。
训练集: 训练数据集是一组被用来拟合模型的数据。训练模型的数据集。这些数据被模型看到并学习。
测试集: 测试数据集是训练数据集的一个子集,利用它来对最终的模型拟合进行准确评估。
验证集: 验证数据集是来自你的模型训练集的数据样本,用于估计模型性能,同时调整模型的超参数。
默认情况下,我们25%的数据是测试集,75%的数据进入训练测试。
语法: sklearn.model_selection.train_test_split()
参数:
- arrays:可索引数据的序列。 列表、numpy数组、scipy稀疏矩阵和pandas数据帧都是有效输入。
- test_size:int 或 float,默认为 None。 如果是float,它应该在0.0和1.0之间,代表要测试分割的数据集的百分比。如果使用int,它指的是测试样本的总数。如果该值为None,则使用训练规模的补码。如果训练规模也是无,它将被设置为0.25。
- train_size:int或float,默认为None。
- random_state : int,默认为None。 控制在执行分割之前如何洗刷数据。如果要在多个函数调用中重复输出,请传递一个int。
shuffle: boolean对象,默认为True。 在拆分前是否要对数据进行洗牌。如果shuffle=False,Stratify必须为None。
- stratify:数组类对象,默认为None。 如果选择None,则使用这些作为类标签对数据进行分层。
返回值: splitting: list
示例1:
numpy、pandas和scikit-learn包被导入。CSV文件被导入。X包含特征,Y是标签。我们将数据帧分割成X和Y,并对它们进行训练测试分割。Random_state的作用类似于numpy的种子,它用于数据的可重复性。test_size被给定为0.25,这意味着我们25%的数据会进入测试尺寸。1-test_size是我们的训练大小,我们不需要指定它。 shuffle =True,在溢出之前对我们的数据进行洗牌。X_train和X_test集被用来拟合和训练我们的模型,测试集被用来测试和验证。
要访问CSV文件请点击这里。
# import packages
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
# importing data
df = pd.read_csv('headbrain1.csv')
# head of the data
print(df.head())
X= df['Head Size(cm^3)']
y=df['Brain Weight(grams)']
# using the train test split function
X_train, X_test,
y_train, y_test = train_test_split(X,y ,
random_state=104,
test_size=0.25,
shuffle=True)
# printing out train and test sets
print('X_train : ')
print(X_train.head())
print('')
print('X_test : ')
print(X_test.head())
print('')
print('y_train : ')
print(y_train.head())
print('')
print('y_test : ')
print(y_test.head())
输出:
Head Size(cm^3) Brain Weight(grams)
0 4512 1530
1 3738 1297
2 4261 1335
3 3777 1282
4 4177 1590
X_train :
99 3478
52 4270
184 3479
139 3171
107 3399
Name: Head Size(cm^3), dtype: int64
(177,)
X_test :
66 3415
113 3594
135 3436
227 4204
68 4430
Name: Head Size(cm^3), dtype: int64
(60,)
y_train :
99 1270
52 1335
184 1160
139 1127
107 1226
Name: Brain Weight(grams), dtype: int64
(177,)
y_test :
66 1310
113 1290
135 1235
227 1380
68 1510
Name: Brain Weight(grams), dtype: int64
(60,)
示例2:
在这个例子中,遵循同样的步骤,而不是指定test_size,而是指定train_size。test_size是1-train_size。80%的数据是训练集,所以20%的数据是我们的测试集。如果我们不指定测试集和训练集的大小,默认test_size为0.25。X_train和y_train有相同的形状和索引,因为y_train是X_train特征的标签,X_test和y_test也是如此。
# import packages
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
# importing data
df = pd.read_csv('headbrain1.csv')
print(df.shape)
# head of the data
print(df.head())
X= df['Head Size(cm^3)']
y=df['Brain Weight(grams)']
# using the train test split function
X_train, X_test, y_train,
y_test = train_test_split(X,y ,
random_state=104,
train_size=0.8, shuffle=True)
# printing out train and test sets
print('X_train : ')
print(X_train.head())
print(X_train.shape)
print('')
print('X_test : ')
print(X_test.head())
print(X_test.shape)
print('')
print('y_train : ')
print(y_train.head())
print(y_train.shape)
print('')
print('y_test : ')
print(y_test.head())
print(y_test.shape)
输出:
(237, 2)
Head Size(cm^3) Brain Weight(grams)
0 4512 1530
1 3738 1297
2 4261 1335
3 3777 1282
4 4177 1590
X_train :
110 3695
164 3497
58 3935
199 3297
182 4005
Name: Head Size(cm^3), dtype: int64
(189,)
X_test :
66 3415
113 3594
135 3436
227 4204
68 4430
Name: Head Size(cm^3), dtype: int64
(48,)
y_train :
110 1310
164 1280
58 1330
199 1220
182 1280
Name: Brain Weight(grams), dtype: int64
(189,)
y_test :
66 1310
113 1290
135 1235
227 1380
68 1510
Name: Brain Weight(grams), dtype: int64
(48,)