我知道这个问题可能很奇怪,但是如何random_seed
为我的分类器选择最终的?
下面是一个示例代码。它使用SGDClassifier
来自 SKlearn 的iris dataset
,并GridSearchCV
找到最好的random_state
:
from sklearn.linear_model import SGDClassifier
from sklearn import datasets
from sklearn.model_selection import train_test_split, GridSearchCV
iris = datasets.load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)
parameters = {'random_state':[1, 42, 999, 123456]}
sgd = SGDClassifier(max_iter=20, shuffle=True)
clf = GridSearchCV(sgd, parameters, cv=5)
clf.fit(X_train, y_train)
print("Best parameter found:")
print(clf.best_params_)
print("\nScore per grid set:")
means = clf.cv_results_['mean_test_score']
stds = clf.cv_results_['std_test_score']
for mean, std, params in zip(means, stds, clf.cv_results_['params']):
print("%0.3f (+/-%0.03f) for %r" % (mean, std * 2, params))
结果如下:
Best parameter found:
{'random_state': 999}
Score per grid set:
0.732 (+/-0.165) for {'random_state': 1}
0.777 (+/-0.212) for {'random_state': 42}
0.786 (+/-0.277) for {'random_state': 999}
0.759 (+/-0.210) for {'random_state': 123456}
在这种情况下,从最佳到次佳的区别在于0.009
得分。当然,train
/test
拆分也有所作为。
这只是一个例子,人们可能会争辩说我选择哪一个并不重要。random_state
不应该影响算法的工作。但是,没有什么可以阻止从最佳到次佳的差异是0.1
, 0.2
,0.99
的情况,这种情况random_seed
会产生很大的影响。
- 在
random_seed
产生重大影响的情况下,超参数优化是否公平? - 什么时候影响太小而无法在意?