Ech*_*che 5 python scikit-learn
我在一个小数据集样本上尝试了这两种方法,它返回了相同的输出。那么问题来了,scikit的train-test-split方法中的“shuffle”和“random_state”参数有什么区别?
MWE 代码:
X, y = np.arange(10).reshape((5, 2)), range(5)
train_test_split(y, shuffle=False)
Out: [[0, 1, 2], [3, 4]]
train_test_split(y, random_state=0)
Out: [[0, 1, 2], [3, 4]]
Run Code Online (Sandbox Code Playgroud)
The*_*nce 11
有时,试验可能有助于理解函数的工作原理。
假设您有这样的 DataFrame:
X Y
0 A 2
1 A 3
2 A 2
3 B 0
4 B 0
Run Code Online (Sandbox Code Playgroud)
我们将讨论您可以使用该函数执行的不同操作train_test_split:
train, test = train_test_split(df, test_size=2/5, shuffle=False, random_state=None),您将始终得到:# TRAIN
X Y
0 A 2
1 A 3
2 A 2
#TEST
X Y
3 B 0
4 B 0
Run Code Online (Sandbox Code Playgroud)
train, test = train_test_split(df, test_size=2/5, shuffle=False, random_state=1)或任何其他 int for random_state,您将得到相同的结果:# TRAIN
X Y
0 A 2
1 A 3
2 A 2
#TEST
X Y
3 B 0
4 B 0
Run Code Online (Sandbox Code Playgroud)
这是因为您决定不洗牌 dataset,因此
random_state函数不使用它。
train, test = train_test_split(df, test_size=2/5, shuffle=True, random_state=None),您将获得如下所示的数据集:# TRAIN
X Y
4 B 0
0 A 2
1 A 3
# TEST
X Y
2 A 2
3 B 0
Run Code Online (Sandbox Code Playgroud)
请注意,条目已被洗牌。但还要注意,如果您再次运行代码,结果可能会有所不同。
train, test = train_test_split(df, test_size=2/5, shuffle=True, random_state=1)或任何其他 int for random_state,你也会得到两个带有混洗条目的数据集:# TRAIN
X Y
4 B 0
0 A 2
3 B 0
# TEST
X Y
2 A 2
1 A 3
Run Code Online (Sandbox Code Playgroud)
只是,这一次,如果您再次使用相同的 运行代码
random_state,输出将始终保持不变。您已经设置了一个种子,这对于结果的重现性非常有用!
| 归档时间: |
|
| 查看次数: |
10079 次 |
| 最近记录: |