如果在代码中没有提到 Random _ state,那么无论何时执行代码,都会生成一个新的随机值,每次列车和测试数据集都会有不同的值。
然而,如果您每次都为 Random _ state (Random _ state = 1或任何其他值)使用一个特定的值,那么结果将是相同的,即在 train 和 test 数据集中使用相同的值。
请参考以下代码:
import pandas as pd
from sklearn.model_selection import train_test_split
test_series = pd.Series(range(100))
size30split = train_test_split(test_series,random_state = 1,test_size = .3)
size25split = train_test_split(test_series,random_state = 1,test_size = .25)
common = [element for element in size25split[0] if element in size30split[0]]
print(len(common))
无论运行代码多少次,输出都是70。
70
尝试删除 Random _ state 并运行代码。
import pandas as pd
from sklearn.model_selection import train_test_split
test_series = pd.Series(range(100))
size30split = train_test_split(test_series,test_size = .3)
size25split = train_test_split(test_series,test_size = .25)
common = [element for element in size25split[0] if element in size30split[0]]
print(len(common))
随机状态数以随机方式分割测试和训练数据集。除了这里所解释的内容之外,重要的是要记住,随机状态值可以对模型的质量产生重大影响(所谓质量,本质上是指预测的准确性)。例如,如果您使用一个特定的数据集并用它训练一个回归模型,而不指定 Random _ state 值,那么每次都有可能得到不同的准确性结果,这与您所训练的模型对测试数据的准确性结果是不同的。
因此,找到最佳随机状态值以提供最精确的模型非常重要。然后,这个数字将被用来在另一个场合重现你的模型,比如另一个研究实验。
为此,可以通过将随机数赋给 Random _ state 参数: ,在 for 循环中对模型进行分割和训练
for j in range(1000):
X_train, X_test, y_train, y_test = train_test_split(X, y , random_state =j, test_size=0.35)
lr = LarsCV().fit(X_train, y_train)
tr_score.append(lr.score(X_train, y_train))
ts_score.append(lr.score(X_test, y_test))
J = ts_score.index(np.max(ts_score))
X_train, X_test, y_train, y_test = train_test_split(X, y , random_state =J, test_size=0.35)
M = LarsCV().fit(X_train, y_train)
y_pred = M.predict(X_test)`