【发布时间】:2021-05-22 07:38:00
【问题描述】:
我遇到了一个非常奇怪的情况。
我正在尝试在 sklearn 中使用 SVM 来执行二进制分类任务。这是我的代码:
scaler = StandardScaler()
x_train = scaler.fit_transform(x_train)
x_test = scaler.transform(x_test)
svc = SVC(kernel='rbf', class_weight='balanced', gamma='auto',probability=True)
c_range = np.logspace(-5, 15, 11, base=2)
gamma_range = np.logspace(-9, 3, 13, base=2)
param_grid = [{'kernel': ['rbf'], 'C': c_range, 'gamma': gamma_range}]
grid = GridSearchCV(svc, param_grid, cv=5, n_jobs=-1)
clf = grid.fit(x_train, y_train)
predictions = grid.predict(x_test)
如您所见,这是一个非常简单的模型,其中x_train 是训练数据的输入,x_test 是测试数据的输入,y_train 是训练数据的标签。
我的问题是,既然我没有设置任何种子,为什么这段代码总是重现相同的结果?在我的理解中,随机性应该存在于我的模型中,并且应该至少有一些变体结果。
让我稍微清楚一点,我并不是在抱怨我的模型只为所有测试数据预测同一个类别。我抱怨即使我设置了不同的种子,我的模型仍然会产生一致的结果。
例如,假设我有 3 个测试数据。当我将种子设置为 1 或 2 或其他时,测试数据的预测总是 [1,0,1]。
我尝试设置不同的种子,改变模型中的 random_state。没有任何效果。 我的训练数据很小,只有几百个。测试数据更大,有数千条数据。
【问题讨论】:
标签: python machine-learning scikit-learn svm