Python 在一个大的.csv文件上应用DBSCAN会导致光盘使用率超过100%,并挂起我的计算机

Python 在一个大的.csv文件上应用DBSCAN会导致光盘使用率超过100%,并挂起我的计算机,python,csv,scikit-learn,dbscan,Python,Csv,Scikit Learn,Dbscan,所以我的任务是从.csv文件中读取数据并形成集群。我的代码在一个小的.csv文件上运行良好,但当我尝试读取我必须处理的原始文件时,它包含大约24k行,我的计算机挂起,磁盘使用率达到100%,我必须重新启动系统。我已经走到了死胡同,不知道发生了什么事。DBSCAN代码与sklearn站点上的演示相同。然而,我自己编写的读取数据的代码 import csv import numpy as np import matplotlib.pyplot as plt from sklearn.cluster

所以我的任务是从.csv文件中读取数据并形成集群。我的代码在一个小的.csv文件上运行良好,但当我尝试读取我必须处理的原始文件时,它包含大约24k行,我的计算机挂起,磁盘使用率达到100%,我必须重新启动系统。我已经走到了死胡同,不知道发生了什么事。DBSCAN代码与sklearn站点上的演示相同。然而,我自己编写的读取数据的代码

import csv
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
from sklearn import metrics
#from sklearn.datasets.samples_generator import make_blobs
from sklearn.preprocessing import StandardScaler
import csv



def dbFun( _x,_original_vals):
    db = DBSCAN(eps=0.3, min_samples=20).fit(_x)
    core_samples_mask = np.zeros_like(db.labels_, dtype=bool)
    core_samples_mask[db.core_sample_indices_] = True

    labels = db.labels_
    #print(labels)
    n_clusters_ = len(set(labels)) - (1 if -1 else 0)
    print('Estimated number of clusters: %d' % n_clusters_)
    print("Wait plotting clusters.....")
    plotCluster(_x, labels, core_samples_mask, n_clusters_)
    return


def plotCluster( _x, labels, core_samples_mask, n_clusters_):
   unique_labels = set(labels)
   colors = [plt.cm.Spectral(each)
          for each in np.linspace(0, 1, len(unique_labels))]
   for k, col in zip(unique_labels, colors):
      if k == -1:
        # Black used for noise.
         col = [0, 0, 0, 1]

      class_member_mask = (labels == k)

      xy = _x[class_member_mask & core_samples_mask]
      plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col),
             markeredgecolor='k', markersize=14)

      xy = _x[class_member_mask & ~core_samples_mask]
      plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col),
             markeredgecolor='k', markersize=6)

   plt.title('Estimated number of clusters: %d' % n_clusters_)
   plt.show()
   return

_val = []



with open('C:/Users/hp 5th/Desktop/new1.csv', 'rU') as inp:

        rd = csv.reader(inp)
        for row in rd:
            _val.append([row[1],row[2], row[0]])

    #print(_center)
_val = np.asarray(_val)
_val_original = _val
_val_original =_val_original.astype('float32')
_val = StandardScaler().fit_transform(_val_original)

dbFun(_val, _val_original)
    #_len = len(_center)

这称为交换,即内存太少

SKBERN DBSCAN实现是²内存上最糟糕的情况


使用带有索引的ELKI。它需要的内存比sklearn少得多。

是的,我想就是这样。因为代码的其余部分非常简单。我一定会研究ELKI,但是我对java不熟悉。有什么方法可以用python实现这一点吗?此外,这项任务只是我一个更大项目的一部分。我不知道如何将ELKI与它的其余部分集成。您可以只使用子流程模块,并使用CSV文件。