基于这个答案:Scikit learn 中的随机状态(伪随机数),如果我使用相同的整数(比如 42)random_state
,然后每次进行训练-测试分割时,它应该给出相同的分割(即每次运行期间训练中的数据实例相同,测试时的数据实例相同)
But,
-
for test_size in test_sizes:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_size, random_state=42)
clf = SVC(C=penalty, probability=False)
假设我有这样的代码。在这种情况下,我正在更改test_size
在每个循环中。它将如何影响什么random_state
做?它会打乱所有内容,还是尽可能保持尽可能多的行完整,并根据测试大小将几行从火车转移到测试(反之亦然)?
-
Also, random_state
是一些分类器的参数,例如sklearn.svm.SVC
and sklearn.tree.DecisionTreeClassifier
。我有这样的代码:
clf = tree.DecisionTreeClassifier(random_state=0)
scores = cross_validate(clf, X_train, y_train, cv=cv)
cross_val_test_score = round(scores['test_score'].mean(), prec)
clf.fit(X_train, y_train)
什么是random_state
到底在这里做什么?因为它是在定义分类器时使用的。目前尚未提供数据。我从以下得到http://scikit-learn.org/stable/modules/ generated/sklearn.tree.DecisionTreeClassifier.html:
如果是int,random_state是随机数生成器使用的种子;
如果是RandomState实例,random_state是随机数生成器;
如果 None,则随机数生成器是使用的 RandomState 实例
由 np.random 提供。
-
假设以下行针对多个测试大小中的每一个执行多次:
clf = tree.DecisionTreeClassifier(random_state=0)
如果我保留random_state=int(test_size*100)
,这是否意味着对于每个测试大小,结果都会相同? (对于不同的测试规模,它们会有所不同吗?)
(Here, tree.DecisionTreeClassifier
可以替换为其他也使用的分类器random_state
, 例如sklearn.svm.SVC
。我假设所有分类器都使用random_state
以类似的方式?)
1:由于您正在更改测试大小,因此随机状态不会影响测试大小之间的选定行,而且这也不一定是所需的行为,因为您只是尝试根据各种样本大小获取分数。这是什么will为您做的就是允许您比较使用输入数据的模型,并按相同的随机状态进行分割。从一个循环运行到下一个循环,测试集将完全相同。允许您正确比较相同样本的模型性能。
2:对于决策树分类器等模型,有随机设置的初始化参数。这里的随机状态确保这些参数从一次运行到下一次运行设置完全相同,从而创建可重现的行为。
3:如果测试大小不同,并且将其乘以 100,那么将为每个测试集创建不同的随机状态。但从一次完整运行到下一次完整运行,它将创建可重复的行为。您可以轻松地在那里设置静态值。
并非所有模型都以相同的方式使用随机状态,因为每个模型都有随机设置的不同参数。对于随机森林,它正在选择随机特征。对于神经网络,它正在初始化随机权重......等等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)