我使用的是dendrogram从scipy使用绘制层次聚类matplotlib如下:
mat = array([[1, 0.5, 0.9],
[0.5, 1, -0.5],
[0.9, -0.5, 1]])
plt.subplot(1,2,1)
plt.title("mat")
dist_mat = mat
linkage_matrix = linkage(dist_mat,
"single")
print "linkage2:"
print linkage(1-dist_mat, "single")
dendrogram(linkage_matrix,
color_threshold=1,
labels=["a", "b", "c"],
show_leaf_counts=True)
plt.subplot(1,2,2)
plt.title("1 - mat")
dist_mat = 1 - mat
linkage_matrix = linkage(dist_mat,
"single")
dendrogram(linkage_matrix,
color_threshold=1,
labels=["a", "b", "c"],
show_leaf_counts=True)
Run Code Online (Sandbox Code Playgroud)
我的问题是:第一,为什么mat和1-mat在这里给同一聚类?第二,如何使用树的每个分支来注释距离,dendrogram以便可以比较节点对之间的距离?
最后似乎show_leaf_counts忽略了标志,有没有办法打开它,以便显示每个类中的对象数量?谢谢.
我想通过索引号迭代python中的字典.
示例:
dict = {'apple':'red','mango':'green','orange':'orange'}
Run Code Online (Sandbox Code Playgroud)
我想从头到尾遍历字典,以便我可以通过索引访问字典项.例如,第1项将是苹果,第2项将是芒果,值将为绿色.
像这样的东西:
for i in range(0,len(dict)):
dict.i
Run Code Online (Sandbox Code Playgroud) 我对这个模块(scipy.cluster.hierarchy)感到困惑......还有一些!
例如,我们有以下树形图:

我的问题是如何以一种漂亮的格式提取彩色子树(每个子树代表一个簇),比如SIF格式?现在获得上述情节的代码是:
import scipy
import scipy.cluster.hierarchy as sch
import matplotlib.pylab as plt
scipy.randn(100,2)
d = sch.distance.pdist(X)
Z= sch.linkage(d,method='complete')
P =sch.dendrogram(Z)
plt.savefig('plot_dendrogram.png')
T = sch.fcluster(Z, 0.5*d.max(), 'distance')
#array([4, 5, 3, 2, 2, 3, 5, 2, 2, 5, 2, 2, 2, 3, 2, 3, 2, 5, 4, 5, 2, 5, 2,
# 3, 3, 3, 1, 3, 4, 2, 2, 4, 2, 4, 3, 3, 2, 5, 5, 5, 3, 2, 2, 2, 5, 4,
# 2, 4, 2, 2, 5, …Run Code Online (Sandbox Code Playgroud) 对于一组观察:
[a1,a2,a3,a4,a5]
Run Code Online (Sandbox Code Playgroud)
他们的成对距离
d=[[0,a12,a13,a14,a15]
[a21,0,a23,a24,a25]
[a31,a32,0,a34,a35]
[a41,a42,a43,0,a45]
[a51,a52,a53,a54,0]]
Run Code Online (Sandbox Code Playgroud)
以浓缩矩阵形式给出(上面的上三角形,由下式计算 scipy.spatial.distance.pdist):
c=[a12,a13,a14,a15,a23,a24,a25,a34,a35,a45]
Run Code Online (Sandbox Code Playgroud)
问题是,假设我在压缩矩阵中有索引,那么有一个函数(最好是在python中)f可以快速给出哪两个观察结果来计算它们?
f(c,0)=(1,2)
f(c,5)=(2,4)
f(c,9)=(4,5)
...
Run Code Online (Sandbox Code Playgroud)
我尝试了一些解决方案,但没有一个值得一提:(
我有三个矩阵可供比较.每个都是5x6.我最初想要使用层次聚类来聚类矩阵,以便在给定相似性阈值的情况下对最相似的矩阵进行分组.
我在python中找不到任何这样的函数,所以我手工实现了距离测量,(p-norm,其中p = 2).现在我有一个3x3距离矩阵(我相信在这种情况下也是一个相似矩阵).
我现在正在尝试生成树状图.这是我的代码,这就是错误的.我想生成一个图形(如果可能的话,树形图),显示最相似的矩阵的簇.矩阵0,1,2,0和2是相同的并且应该首先聚集在一起,并且1是不同的.
距离矩阵如下所示:
> 0 1 2
0 0.0 2.0 3.85e-16
1 2.0 0.0 2.0
2 3.85e-16 2.0 0.0
Run Code Online (Sandbox Code Playgroud)
码:
from scipy.cluster.hierarchy import dendrogram
import matplotlib.pyplot as plt
import numpy as np
from scipy.cluster.hierarchy import linkage
mat = np.array([[0.0, 2.0, 3.8459253727671276e-16], [2.0, 0.0, 2.0], [3.8459253727671276e-16, 2.0, 0.0]])
dist_mat = mat
linkage_matrix = linkage(dist_mat, "single")
dendrogram(linkage_matrix, color_threshold=1, labels=["0", "1", "2"],show_leaf_counts=True)
plt.title=("test")
plt.show()
Run Code Online (Sandbox Code Playgroud)
联系的意义是什么(dist_mat,'single')?我会假设输出图看起来像这样,其中距离是2.0在0和1之间(例如).

有更好的方法来表示这些数据吗?是否有一个函数可以接受几个矩阵而不是点,比较并形成一个距离矩阵,然后聚类?我对如何可视化这些矩阵之间的差异的其他建议持开放态度.
我使用pdist命令查找存储在矩阵中的x和y坐标之间的距离.
X = [100 100;
0 100;
100 0;
500 400;
300 600;];
D = pdist(X,'euclidean')
Run Code Online (Sandbox Code Playgroud)
返回15个元素向量.:
[0.734979755525412 3.40039811339820 2.93175207511321 1.83879677592575 2.40127440268306 2.75251513299386 2.21488402640753 1.10610649500317 1.81674017301699 0.903207751535635 1.99116952754924 1.05069952386082 1.24122819418333 1.08583377275532 1.38729428638035]
Run Code Online (Sandbox Code Playgroud)
有没有办法将这些距离与它们的坐标相关联,即将它们存储在具有一般行形式的矩阵中:
[Length xcoordinate1 ycoordinate1 xcoordinate2 ycoordinate2]
Run Code Online (Sandbox Code Playgroud)
找到每个长度的行?
提前致谢
我正在尝试计算矩阵中行之间的python中的余弦距离并且有几个问题.所以我正在创建矩阵matr并从列表中填充它,然后将其重新整形以用于分析目的:
s = []
for i in range(len(a)):
for j in range(len(b_list)):
s.append(a[i].count(b_list[j]))
matr = np.array(s)
d = matr.reshape((22, 254))
Run Code Online (Sandbox Code Playgroud)
d的输出给了我像:
array([[0, 0, 0, ..., 0, 0, 0],
[2, 0, 0, ..., 1, 0, 0],
[2, 0, 0, ..., 0, 0, 0],
...,
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[1, 0, 0, ..., 0, 0, 0]])
Run Code Online (Sandbox Code Playgroud)
然后我想使用scipy.spatial.distance.cosine包来计算从第一行到d矩阵中的其他所有的余弦.我该怎么做?它应该是一些循环吗?对矩阵和数组操作没有太多经验.
那么我怎样才能在第二个参数(d [1],d [2]等)中使用for循环,而不是每次都启动它:
from scipy.spatial.distance import cosine
x=cosine (d[0], d[6])
Run Code Online (Sandbox Code Playgroud) 我正在做一个 NLP 项目,我必须比较来自这个数据帧的许多句子 EG 之间的相似性:
我尝试的第一件事是将数据帧与自身连接以获得波纹管格式并逐行比较:
对于大中型/大数据集,我很快就会出现内存不足的问题,例如,对于 10k 行连接,我将获得 100MM 行,而这些行无法放入 ram
我目前的方法是使用以下方式迭代数据帧:
final = pd.DataFrame()
### for each row
for i in range(len(df_sample)):
### select the corresponding vector to compare with
v = df_sample[df_sample.index.isin([i])]["use_vector"].values
### compare all cases agains the selected vector
df_sample.apply(lambda x: cosine_similarity_numba(x.use_vector,v[0]) ,axis=1)
### kept the cases with a similarity over a given th, in this case 0.6
temp = df_sample[df_sample.apply(lambda x: cosine_similarity_numba(x.use_vector,v[0]) ,axis=1) > 0.6]
### filter out the base case
temp = temp[~temp.index.isin([i])]
temp["original_question"] …Run Code Online (Sandbox Code Playgroud) 我想使用 scipy 的树状图。我有以下数据:
我有一个包含七种不同方式的列表。例如:
Y = [71.407452200146807, 0, 33.700136456196823, 1112.3757110973756, 31.594949722819372, 34.823881975554166, 28.36368420190157]
Run Code Online (Sandbox Code Playgroud)
每个平均值是为不同的用户计算的。例如:
X = ["user1", "user2", "user3", "user4", "user5", "user6", "user7"]
Run Code Online (Sandbox Code Playgroud)
我的目标是在树状图的帮助下显示上述数据。
我尝试了以下方法:
Y = [71.407452200146807, 0, 33.700136456196823, 1112.3757110973756, 31.594949722819372, 34.823881975554166, 28.36368420190157]
X = ["user1", "user2", "user3", "user4", "user5", "user6", "user7"]
# Attempt with matrix
#X = np.concatenate((X, Y),)
#Z = linkage(X)
Z = linkage(Y)
# Plot the dendogram with the results above
dendrogram(Z, leaf_rotation=45., leaf_font_size=12. , show_contracted=True)
plt.style.use("seaborn-whitegrid")
plt.title("Dendogram to find clusters")
plt.ylabel("Distance")
plt.show()
Run Code Online (Sandbox Code Playgroud)
但它说:
ValueError:压缩距离矩阵 'y' …
python ×8
scipy ×6
numpy ×4
matrix ×3
dendrogram ×2
algorithm ×1
dictionary ×1
math ×1
matlab ×1
matplotlib ×1
nlp ×1
pandas ×1
pdist ×1
python-2.7 ×1
statistics ×1
trigonometry ×1