编程语言
首页 > 编程语言> > 种子选项:在Python中使用不同的包进行机器学习

种子选项:在Python中使用不同的包进行机器学习

作者:互联网

我想知道以下代码是否会给出相同的结果.更具体地说,如果random_state = 0与seed = 0相同:

– 使用sklearn:

from sklearn.cross_validation import train_test_split
x = data['x']
y = data['y']
X_train,X_test,Y_train,Y_test = train_test_split(x,y,test_size = 0.2,random_state = 0)

– 使用graphlab:

import graphlab
train_data,test_data = data.random_split(.8,seed=0)

据我所知,graphlab在版本3.4中不可用(如果我错了,请纠正我),所以我无法检查自己.谢谢

解决方法:

不,这两个库不会为这两个代码片段提供相同的结果. scikit-learn函数使用随机置换来对数据进行混洗,然后将数据拆分为所需的分数. SFrame.random_split方法不同;它根据指定的分数从原始数据中随机抽样行.

不仅如此,两个库的随机数生成器是不同的,因此将随机状态和种子设置为相同的值将不会产生任何影响.

我用GraphLab Create 1.7.1和Scikit-learn 0.17验证了这一点.

import numpy as np
import graphlab as gl
from sklearn.cross_validation import train_test_split

sf = graphlab.SFrame(np.random.rand(10, 1))
sf = sf.add_row_number('row_id')

sf_train, sf_test = sf.random_split(0.6, seed=0)
df_train, df_test = train_test_split(sf.to_dataframe(),
                                     test_size=0.4,
                                     random_state=0)

sf_train是:

+--------+-------------------+
| row_id |         X1        |
+--------+-------------------+
|   0    |  [0.459467634448] |
|   4    |  [0.424260273035] |
|   6    |  [0.143786736949] |
|   7    | [0.0871068666212] |
|   8    |  [0.74631952689]  |
|   9    |  [0.37570258651]  |
+--------+-------------------+
[6 rows x 2 columns]

而df_train看起来像:

   row_id                 X1
1       1   [0.561396445174]
6       6   [0.143786736949]
7       7  [0.0871068666212]
3       3   [0.397315891635]
0       0   [0.459467634448]
5       5   [0.033673713722]

绝对不一样.

标签:python,scikit-learn,graphlab
来源: https://codeday.me/bug/20190623/1271033.html