Python 移动到Azure机器学习工作室时,模型会产生不同的结果

Python 移动到Azure机器学习工作室时,模型会产生不同的结果,python,scikit-learn,gensim,azure-machine-learning-studio,Python,Scikit Learn,Gensim,Azure Machine Learning Studio,我们在本地机器上开发了一个Jupyter笔记本,用Python(V3)库sklearn和gensim来训练模型。 当我们将random_state变量设置为固定整数时,结果总是相同的 在此之后,我们尝试将笔记本移动到Azure机器学习工作室(classic)的工作区,但即使我们保持random_状态不变,结果也会有所不同 如以下链接所示,我们安装了相同的库版本,并检查了MKL版本是否相同,并且MKL\u CBWR变量设置为AUTO 然而,我们无法得到同样的结果 我们还应该检查什么,或者为什么

我们在本地机器上开发了一个Jupyter笔记本,用Python(V3)库
sklearn
gensim
来训练模型。 当我们将
random_state
变量设置为固定整数时,结果总是相同的

在此之后,我们尝试将笔记本移动到Azure机器学习工作室(classic)的工作区,但即使我们保持
random_状态不变,结果也会有所不同

如以下链接所示,我们安装了相同的库版本,并检查了
MKL
版本是否相同,并且
MKL\u CBWR
变量设置为
AUTO

然而,我们无法得到同样的结果

我们还应该检查什么,或者为什么会发生这种情况

更新

如果我们在本地机器中生成一个
pkl
文件并将其导入AML,结果是相同的(与pkl文件的意图相同)

尽管如此,我们仍希望在不导入pkl文件的情况下获得相同的结果(如果可能)

库版本

gensim 3.8.3.
sklearn 0.19.2.
matplotlib 2.2.3.
numpy 1.17.2.
scipy 1.1.0.
代码

完整的代码可以找到,样本数据链接里面

import pandas as pd
import numpy as np
import matplotlib
from matplotlib import pyplot as plt

from gensim.models import KeyedVectors
%matplotlib inline

import time

from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
from sklearn.manifold import TSNE
import seaborn as sns

wordvectors_file_vec = '../libraries/embeddings-new_large-general_3B_fasttext.vec'
wordvectors = KeyedVectors.load_word2vec_format(wordvectors_file_vec)

math_quests = # some transformations using wordvectors

df_subset = pd.DataFrame()

pca = PCA(n_components=3, random_state = 42)
pca_result = pca.fit_transform(mat_quests)
df_subset['pca-one'] = pca_result[:,0]
df_subset['pca-two'] = pca_result[:,1] 

time_start = time.time()
tsne = TSNE(n_components=2, verbose=1, perplexity=40, n_iter=300, random_state = 42)
tsne_results = tsne.fit_transform(mat_quests)

df_subset['tsne-2d-one'] = tsne_results[:,0]
df_subset['tsne-2d-two'] = tsne_results[:,1]

pca_50 = PCA(n_components=50, random_state = 42)
pca_result_50 = pca_50.fit_transform(mat_quests)
print('Cumulative explained variation for 50 principal components: {}'.format(np.sum(pca_50.explained_variance_ratio_)))

time_start = time.time()
tsne = TSNE(n_components=2, verbose=0, perplexity=40, n_iter=300, random_state = 42)
tsne_pca_results = tsne.fit_transform(pca_result_50)
print('t-SNE done! Time elapsed: {} seconds'.format(time.time()-time_start))

一定要对你所遇到的问题感同身受。每一位数据科学家都曾在某个时候与之斗争过

我要告诉你的一个残酷的事实是,Azure ML Studio(经典版)无法真正解决“在我的机器上工作”的问题。然而,好消息是Azure ML服务在这方面令人难以置信。Studio classic不允许您确定地定义自定义环境,只允许添加和删除包(即使在这方面也不太好)

因为ML服务的执行是建立在
Docker
容器和
conda
环境之上的,所以您可以对重复的结果更有信心。我强烈建议您花点时间学习它(我也很乐意调试出现的任何问题)。Azure有很多非常好的入门教程

我花了两个小时来演示ML服务如何通过综合以下内容来解决您的问题:

  • 您的代码示例(在共享笔记本之前)
  • ,及
  • 远程培训
我不是T-SNE专家,但从下面的屏幕截图可以看出,当我在本地和远程运行脚本时,T-SNE输出是相同的。这在Studio classic中是可能的,但很难保证它始终有效


你是说Azure ML服务吗?或Azure ML Studio(经典版)?Azure ML Studio(经典版),将Jupyter与Python 3结合使用。是否可以提供一些示例数据?或者将脚本更改为使用公共数据集?如果可以,我可以向您展示如何在使用远程计算目标进行培训时保证正确的环境。当然可以。请在最新的问题版中找到指向代码的链接。谢谢!明白了!我正在处理我想是的案例你搞定了!我会尝试一下,让你知道它是怎么回事!谢谢你!!!!!它成功了!我们能够识别出t-sne的行为有所不同!谢谢你,安德斯!