【问题标题】:Why random seed does not make results constant in Python为什么随机种子不会使 Python 中的结果保持不变
【发布时间】:2018-03-21 13:08:00
【问题描述】:

我使用以下代码。我想为相同的随机种子获得相同的结果。我使用相同的随机种子(在这种情况下为 1)并得到不同的结果。 代码如下:

import pandas as pd
import numpy as np
from random import seed
# Load scikit's random forest classifier library
from sklearn.ensemble import RandomForestClassifier

from sklearn.model_selection import train_test_split
seed(1) ### <-----

file_path = 'https://archive.ics.uci.edu/ml/machine-learning-databases/undocumented/connectionist-bench/sonar/sonar.all-data'
dataset2 = pd.read_csv(file_path, header=None, sep=',')

from sklearn import preprocessing
le = preprocessing.LabelEncoder()

#Encoding
y = le.fit_transform(dataset2[60])
dataset2[60] = y
train, test = train_test_split(dataset2, test_size=0.1)
y = train[60] 
y_test = test[60] 
clf = RandomForestClassifier(n_jobs=100, random_state=0)
features = train.columns[0:59] 
clf.fit(train[features], y)

# Apply the Classifier we trained to the test data
y_pred = clf.predict(test[features])

# Decode 
y_test_label = le.inverse_transform(y_test)
y_pred_label = le.inverse_transform(y_pred)


from sklearn.metrics import accuracy_score
print (accuracy_score(y_test_label, y_pred_label))

# Two following results:
# 0.761904761905
# 0.90476190476

【问题讨论】:

  • 据我所知,train, test = train_test_split(dataset2, test_size=0.1) 行没有随机种子集。

标签: python-2.7 random seed


【解决方案1】:

您的代码:

import numpy as np
from random import seed
seed(1) ### <-----

设置pythonrandom-class的随机种子。

但是sklearn完全基于numpy的random class,如explained here

对于测试和可复制性,对于具有随机组件的算法中使用的伪随机数生成器,让整个执行由单个种子控制通常很重要。 Scikit-learn 不使用自己的全局随机状态;每当没有提供 RandomState 实例或整数随机种子作为参数时,它依赖于 numpy 全局随机状态,可以使用 numpy.random.seed 设置。例如,要将执行的 numpy 全局随机状态设置为 42,可以在他或她的脚本中执行以下命令:

import numpy as np

np.random.seed(42)

所以一般来说你应该这样做:

np.random.seed(1)

但这只是事实的一部分,因为在小心使用所有 sklearn-components 时通常不需要这样做,明确地用一些种子调用它们!

就像提到的ShreyasG,这也适用于train_test_split

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    相关资源
    最近更新 更多