我最近读到,为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并重复绘制将得到相同的顺序。