- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 scikit-learn 方法 MDS对某些数据进行降维。我想检查压力值以获得减少的质量。我期望介于 0 - 1 之间。但是,我得到的值超出了这个范围。这是一个最小的例子:
%matplotlib inline
from sklearn.preprocessing import normalize
from sklearn import manifold
from matplotlib import pyplot as plt
from matplotlib.lines import Line2D
import numpy
def similarity_measure(vec1, vec2):
vec1_x = numpy.arctan2(vec1[1], vec1[0])
vec2_x = numpy.arctan2(vec2[1], vec2[0])
vec1_y = numpy.sqrt(numpy.sum(vec1[0] * vec1[0] + vec1[1] * vec1[1]))
vec2_y = numpy.sqrt(numpy.sum(vec2[0] * vec2[0] + vec2[1] * vec2[1]))
dot = numpy.sum(vec1_x * vec2_x + vec1_y * vec2_y)
mag1 = numpy.sqrt(numpy.sum(vec1_x * vec1_x + vec1_y * vec1_y))
mag2 = numpy.sqrt(numpy.sum(vec2_x * vec2_x + vec2_y * vec2_y))
return dot / (mag1 * mag2)
plt.figure(figsize=(15, 15))
delta = numpy.zeros((100, 100))
data_x = numpy.random.randint(0, 100, (100, 100))
data_y = numpy.random.randint(0, 100, (100, 100))
for j in range(100):
for k in range(100):
if j <= k:
dist = similarity_measure((data_x[j].flatten(), data_y[j].flatten()), (data_x[k].flatten(), data_y[k].flatten()))
delta[j, k] = delta[k, j] = dist
delta = 1-((delta+1)/2)
delta /= numpy.max(delta)
mds = manifold.MDS(n_components=2, max_iter=3000, eps=1e-9, random_state=0,
dissimilarity="precomputed", n_jobs=1)
coords = mds.fit(delta).embedding_
print mds.stress_
plt.scatter(coords[:, 0], coords[:, 1], marker='x', s=50, edgecolor='None')
plt.tight_layout()
在我的测试中,它打印了以下内容:
263.412196461
并制作了这张图片:
在不知道最大值的情况下如何分析这个值?或者如何对其进行归一化,使其介于 0 和 1 之间?
谢谢。
最佳答案
这是因为当前 scikit-learn 的实现计算并返回原始应力值 (σr),而您期望的是 Stress-1 (σ1)。
前者提供的信息不是很多(它的高值不一定表示不合适),并且传达可靠性的更好方法是计算规范压力,例如。根据 Kruskal (1964, p. 3) 的 Stress-1 或多或少有以下解释:值 0 表示完全适合,0.025 优秀,0.05 良好,0.1 一般和 0.2 差。
我刚刚实现了 Stress-1 和 sent PR 的计算.同时可以使用 version from this branch ,当 normalize 参数设置为 True(默认情况下为 False)时,使用并返回 Stress-1 而不是原始应力。
有关更多信息,请参阅。 Kruskal(1964,第 8-9 页)或 Borg 和 Groenen(2005,第 41-43 页)。
关于python - 应力属性——sklearn.manifold.MDS/Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36428205/
我尝试使用 matplotlib 库绘制梁的应力。 我已经使用公式计算并绘制了一个例子: 如图 1 所示,您会看到绿色光束在元素 3 和元素 8 处具有更大的应力因此,如果我用彩虹渐变填充颜色,整个蓝
我是一名优秀的程序员,十分优秀!