Bazı verilerde boyut küçültme gerçekleştirmek için scikit-öğrenme yöntemini MDS kullanıyorum. Redüksiyonun kalitesine erişmek için stres değerini kontrol etmek istiyorum. 0 - 1 arasında bir şey bekliyordum. Ancak, bu aralığın dışında değerler aldım. İşte minimal örnek:Stress özniteliği - sklearn.manifold.MDS/Python
%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()
Ki, benim testinde aşağıdaki baskılı:
263,412196461
Ve bu resim üretti:
nasıl bu değeri analiz edebilir miyim Maksimum değeri bilmek? Ya da normalleştirmek için, 0 ile 1 arasında var mı?
Teşekkür ederiz.
Aynı problemim var, cevabı buldunuz mu? Burada ayrıca 0 ile 1 arasında olması gerektiği belirtilmektedir. Http://www.analytictech.com/borgatti/mds.htm – student
Merhaba, @student. Evet, bunu çözdüm. Hatırladığım kadarıyla, bu yöntemin "stres" fonksiyonu normalleştirilmiyor. 0 ile 1 arasında yer almak için paydayı (https://en.wikipedia.org/wiki/Multidimensional_scaling) eklemelisiniz. – pceccon