首先,“符号随机性”的可视化结果是什么?使用下面的代码(从this official example)和eigen_solver = 'arpack'一起使用,您可以看到两个使用相同的Isomap类的{}可能(或可能不会)得到不同的结果。但是,正如您在图中看到的,相对位置保持不变。只是整个情节被颠覆了。如果使用eigen_solver='dense'并多次运行代码,则不会看到这种随机性:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import offsetbox
from sklearn import (manifold, datasets, decomposition, ensemble,
discriminant_analysis, random_projection)
digits = datasets.load_digits(n_class=6)
X = digits.data
y = digits.target
n_samples, n_features = X.shape
n_neighbors = 30
def plot_embedding(X, ax, title=None):
x_min, x_max = np.min(X, 0), np.max(X, 0)
X = (X - x_min) / (x_max - x_min)
for i in range(X.shape[0]):
ax.text(X[i, 0], X[i, 1], str(digits.target[i]),
color=plt.cm.Set1(y[i] / 10.),
fontdict={'weight': 'bold', 'size': 9})
eigen_solver = 'arpack'
#eigen_solver = 'dense'
iso = manifold.Isomap(n_neighbors, n_components=2, eigen_solver=eigen_solver)
X_iso1 = iso.fit_transform(X)
X_iso2 = iso.fit_transform(X)
fig = plt.figure(figsize=(16, 6))
ax1 = fig.add_subplot(121)
plot_embedding(X_iso1, ax1)
ax2 = fig.add_subplot(122)
plot_embedding(X_iso2, ax2)
plt.show()
其次,有没有办法设置种子来“稳定”随机状态?不,当前无法从Isomap为KernelPCA设置种子。然而,对于^{},有一个kwarg random_state,它是“当特征解算器==‘arpack’”时用于初始化残差的伪随机数生成器。使用以下代码(修改自this official test code),您可以看到这种随机性消失了(蓝点覆盖红点),即使使用eigen_solver = 'arpack':
你所看到的随机性是你结果的标志。在我看来,这个标志不是100%随机的。每个组成部分中的符号是一致的,因此相对关系在结果中是一致的。部件之间的符号是随机的。换句话说,哪个分量乘以
-1
或1
是随机的。此行为来自使用Isomap
内核时KernelPCA
函数。在要首先给出解决方案,可以在使用
Isomap
时使用eigen_solver='dense'
。这可能会减慢你的算法,但应该消除这种随机性。我知道上面的解释可能会让人困惑。让我给你更多的细节,并按情节展示。在首先,“符号随机性”的可视化结果是什么?使用下面的代码(从this official example)和}可能(或可能不会)得到不同的结果。但是,正如您在图中看到的,相对位置保持不变。只是整个情节被颠覆了。如果使用
eigen_solver = 'arpack'
一起使用,您可以看到两个使用相同的Isomap
类的{eigen_solver='dense'
并多次运行代码,则不会看到这种随机性:其次,有没有办法设置种子来“稳定”随机状态?不,当前无法从} ,有一个kwarg
^{pr2}$Isomap
为KernelPCA
设置种子。然而,对于^{random_state
,它是“当特征解算器==‘arpack’”时用于初始化残差的伪随机数生成器。使用以下代码(修改自this official test code),您可以看到这种随机性消失了(蓝点覆盖红点),即使使用eigen_solver = 'arpack'
:相关问题 更多 >
编程相关推荐