我一直在使用Scikit learn编写一些信用卡欺诈检测问题的代码。我使用train_testrongplit将我的数据拆分为训练、测试和评估数据集。
x_train,x_test,y_train,y_test=train_test_split(x,y,train_size=0.7,random_state=123)
我不明白为什么在训练和测试数据集以及之间划分数据时,这里的random_state是123
part_x_train, x_val, part_y_train, y_val = train_test_split(x_train, y_train, test_size=0.2, random_state=2)
这里random_state是2,同时在训练数据集和验证数据集之间划分数据。为什么会有这么大的差异?我一直在尝试不同的随机状态,但找不出区别。
train_test_split
函数对原始数据的行进行混洗,然后按一定比例生成训练数据集和其余数据集进行测试。
因此,如果是train_size = 0.7
,该函数将对数据进行混洗,并将混洗后的数据的70%保存用于训练,30%保存用于测试。
如果在不声明随机状态的情况下运行train_test_split(x, y, train_size=0.7)
,则产生的拆分(几乎(总是不同的。
我们设置随机状态的原因是告诉函数每次都要对数据进行相同的洗牌,以便使我们的结果可复制。
换句话说,如果您运行train_test_split(x, y, train_size=0.7, random_state=123)
,您将始终得到相同的结果。
至于您的代码,请注意,您正在拆分的数据在第二行中也发生了更改。这是你的代码和评论:
# Divide `x` and `y` in 70% train and 30% test
# Note that you are splitting `x` and `y` ▼ ▼
x_train, x_test, y_train, y_test = train_test_split(x, y,
train_size=0.7,
random_state=123)
# Split the 70% into 80% train and 20% validation
# Note that you are not splitting `x` and `y` anymore ▼ ▼
part_x_train, x_val, part_y_train, y_val = train_test_split(x_train, y_train,
test_size=0.2,
random_state=2)
请注意,在第二个拆分中,您正在拆分x_train
和y_train
。
这意味着您的代码使用70%的原始数据来创建训练数据集,然后将新的子集拆分为80%用于训练,20%用于验证。