4

次のコードで同じ結果が得られるかどうか疑問に思っていました。より具体的に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 では使用できないため (間違っていたら訂正してください)、自分で調べることができませんでした。ありがとう

4

1 に答える 1

4

いいえ、2 つのライブラリは、これら 2 つのコード スニペットに対して同じ結果をもたらしません。scikit-learn 関数は、ランダム順列を使用してデータをシャッフルし、データを目的の部分に分割します。SFrame.random_split方法は異なります。指定された割合に基づいて、元のデータから行をランダムにサンプリングします。

それだけでなく、2 つのライブラリの乱数ジェネレーターが異なるため、ランダム状態とシードを同じ値に設定しても効果はありません。

これを 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]

間違いなく同じではありません。

于 2015-12-17T20:16:07.087 に答える