为什么ML模型中的随机状态不同?



我最近读到,为random_state指定一个数字可以确保每次运行都得到相同的结果。

为什么在将数据分成训练集和验证集时使用random_state=1,而在创建模型时使用random_state=0 ?

我希望它们是相同的值。

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
data = pd.read_csv('../input/fifa-2018-match-statistics/FIFA 2018 Statistics.csv')
y = (data['Man of the Match'] == "Yes")  # Convert from string "Yes"/"No" to binary
feature_names = [i for i in data.columns if data[i].dtype in [np.int64]]
X = data[feature_names]
train_X, val_X, train_y, val_y = train_test_split(X, y, random_state=1)
my_model = RandomForestClassifier(n_estimators=100,
random_state=0).fit(train_X, train_y)

不要过多解读数字本身。基本上,random_state引用numpys的随机数生成器numpy.random.seed(),并确保您创建的随机数始终是完全相同的。用1初始化会得到不同于用0初始化的序列。因为分割使用随机数的目的不同(分割数据),而不是随机森林(给树引入随机性,例如为树选择子特征等)。然而,你给出的数字并不重要——这只是为了确保你的平局的可重复性。你可以设置种子,例如numpy.random.seed(42),然后画几个随机数numpy.random.rand()。重新设置为42并重复绘制将得到相同的顺序。

不时地(在令人满意地设置了所有内容之后),去掉set random_state来反复查看包含更多随机性的结果是什么样子可能是明智的。尝试其他值(或根本没有种子)可以让您了解最终结果的独立性和有效性。如果你需要准确地比较和重现结果,应该给出种子。

相关内容

  • 没有找到相关文章

最新更新