如何解决大熊猫scikit - 学习多维缩放永远运行

时间:2014-09-05 02:04:43

标签: python pandas scikit-learn

修改 它似乎不一定是第64行中的数据的问题。而数字64本身是神奇的并且导致问题。由于我一直在解决这个问题,我编写了一个脚本,从DataFrame中随机抓取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()

这是一个链接,您可以下载我正在使用的文件,如果有帮助的话。https://drive.google.com/file/d/0BxZZOOgLl7vSTUlxc1BmMUFmTVU/edit?usp=sharing

1 个答案:

答案 0 :(得分:1)

这必须与版本有关。在我的计算机(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()

制作此图片:

enter image description here

注意我在尝试64后尝试了128而没有失败,看看发生了什么,更改了引发错误的with ppl.pretty,一切运行正常。这是我的pip freeze

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。