Python 如何排除故障,了解多维缩放永远运行

Python 如何排除故障,了解多维缩放永远运行,python,pandas,scikit-learn,Python,Pandas,Scikit Learn,编辑 第64行中的数据似乎不一定有问题。相反,数字64本身是神奇的,并导致了问题。在继续解决该问题时,我编写了一个脚本,随机从数据帧中获取63个连续行并绘制它们。它每次都跑得很快。但如果我将其更改为64行,它将永远无法工作和运行。 结束编辑 我正在尝试使用多维缩放来可视化集群中的数据。我创建了一个DataFrame,它的维度为1000行和1964列。当我尝试对数据执行多维缩放时,该过程将永远运行。奇怪的是,我似乎无法通过按ctrl+c来结束这个过程 通过反复试验,我发现了数据集第64行的神奇之处

编辑 第64行中的数据似乎不一定有问题。相反,数字64本身是神奇的,并导致了问题。在继续解决该问题时,我编写了一个脚本,随机从数据帧中获取63个连续行并绘制它们。它每次都跑得很快。但如果我将其更改为64行,它将永远无法工作和运行。 结束编辑

我正在尝试使用多维缩放来可视化集群中的数据。我创建了一个DataFrame,它的维度为1000行和1964列。当我尝试对数据执行多维缩放时,该过程将永远运行。奇怪的是,我似乎无法通过按ctrl+c来结束这个过程

通过反复试验,我发现了数据集第64行的神奇之处。如果我在63行上运行该进程,整个过程将在几秒钟内完成。但是,如果我将其增加到64行,它将永远不会结束

我真的不知道该怎么解决这个问题。我浏览了1964年的专栏,寻找第63行和第64行之间的差异,希望找到一个奇怪的值或其他东西,但什么也没有跳出来。有没有其他办法让我明白为什么64行如此神奇

import pandas as pd
from pandas import DataFrame as df
from sklearn.metrics.pairwise import euclidean_distances
from sklearn.metrics.pairwise import manhattan_distances
from sklearn import manifold
from matplotlib import pyplot as plt
import prettyplotlib as ppl

malware_df = df.from_csv('malware_features.csv')

plottable = malware_df[[c for c in malware_df.columns if c != 'hash']]
plottable = plottable.head(63) # change this to 64 and everything stops working

euc = euclidean_distances(plottable)
mds = manifold.MDS(n_jobs=-1, random_state=1337, dissimilarity='precomputed')
pos_e = mds.fit(euc).embedding_

plottable['xpos'] = pos_e[:,0]
plottable['ypos'] = pos_e[:,1]
with ppl.pretty:
    fig, ax = ppl.subplots(figsize=(6,8))
ppl.scatter(ax, plottable.xpos, plottable.ypos)
plt.show()

这里有一个链接,如果有帮助的话,你可以从中下载我正在使用的文件。

这必须与版本有关。在我的计算机(2003,1个AMD内核,2 Gb RAM)中,此代码运行约3秒钟:

#import pandas as pd
from pandas import DataFrame as df
from sklearn.metrics.pairwise import euclidean_distances
#from sklearn.metrics.pairwise import manhattan_distances
from sklearn import manifold
from matplotlib import pyplot as plt 
import prettyplotlib as ppl 

malware_df = df.from_csv('malware_features.csv')

plottable = malware_df[[c for c in malware_df.columns if c != 'hash']]
plottable = plottable.head(128) # change this to 64 and everything stops working

euc = euclidean_distances(plottable)
mds = manifold.MDS(n_jobs=-1, random_state=1337, dissimilarity='precomputed')
pos_e = mds.fit(euc).embedding_

plottable['xpos'] = pos_e[:,0]
plottable['ypos'] = pos_e[:,1]

fig, ax = ppl.subplots(figsize=(6,8))

ppl.scatter(ax, plottable.xpos, plottable.ypos)
plt.show()
要生成此图形,请执行以下操作:

请注意,在尝试64次之后,我尝试了128次,但没有失败,为了查看发生了什么,我用ppl.pretty更改了
,这会引发错误,并且一切都正常运行。这是我的
pip冻结

brewer2mpl==1.4
matplotlib==1.4.0
numpy==1.9.0
pandas==0.14.1
prettyplotlib==0.1.7
reportlab==3.1.8
scikit-learn==0.15.2
scipy==0.14.0

和python 2.7.3。

如果删除其中一列,64是否仍然具有魔力?我的假设是,您可能会遇到一些内存边界和/或类似的问题@AndyHayden我更正了代码片段以解释pos_e是如何初始化的。这是基于欧几里德距离的点的位置,完全是这样。我没有想到要看看我的包裹是否过期了。我只运行了2000行,运行了7到10秒。