sklearn模型中的随机性丢失

我遇到了一个非常奇怪的情况。

我正在尝试使用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,但都没有效果。我的训练数据非常小,只有几百个。测试数据较大,有数千个数据。


回答:

下面的代码将为SVC中的不同random_state值返回不同的类概率。事实上,在不同运行中预测的类别相同,仅仅意味着数据点所属的类别没有太多的模糊性。换句话说,如果你的数据点看起来像这个,它们很容易分离,不同种子的模型会为相同的点分配相同的类别。

在实践中,如果第一个模型为某个数据点分配的概率例如{A: 0.942, B: 0.042, C: 0.016},而另一个具有不同种子的模型分配的概率是{A: 0.917, B: 0.048, C: 0.035},那么这两个模型都会为这个点预测相同的类别A。

另外,大部分数据应该用于训练,而不是测试。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注