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