python - DBSCAN sklearn 很慢
问题描述
我正在尝试对具有超过 100 万个数据点的数据集进行聚类。一列有文本,另一列有与之对应的数值。我面临的问题是它被卡住并且永远不会完成。我尝试使用大约 100,000 个较小的数据集,它运行得相当快,但是随着我开始增加数据点,它开始变慢,并且对于一百万它永远不会完成并挂起。最初,我认为这可能是因为我有一个用于文本的 tfidf 矩阵,并且有 100 个维度,所以需要很长时间。然后我尝试根据每个数据点的单个值的数量进行聚类,但仍然没有完成。下面是代码片段。知道我可能做错了什么吗?我见过人们使用更大的数据集并且没有问题。
Y=data['amount'].values
Y=Y.reshape(-1,1)
dbscan = DBSCAN(eps=0.3, min_samples= 10, algorithm='kd_tree')
dbscan.fit_predict(Y)
labels = dbscan.labels_
print(labels.size)
clusters = labels.tolist()
#printing the value and its label
for a, b in zip(labels, Y):
print(a, b)
解决方案
很可能您的 epsilon 太大。
如果大多数点在大多数其他点的 epsilon 内,则运行时间将是二次 O(n²)。所以从小的值开始!
您不能只添加/删除功能并保持 epsilon 不变。
推荐阅读
- firebase - 在颤振飞镖应用程序中从 firebase 检索数据时遇到问题。无法获取 DocumentSnapshotPlatform 上不存在的字段
- javascript - 通过将对象键与值匹配来映射两个单独的数组
- reactjs - 将 .ts 扩展名添加到 react-create-script
- elasticsearch - Elastic Search 是只读 Api 的良好数据存储吗?
- c# - 如何让 .Net Framework SignalR 客户端连接到 .Net Core SignalR Server?
- css - How to change SVG color when I reach the bottom of the page
- apache-spark - 在 Spark sql 中使用 expr 中的参数值
- angular - ngOnInit 中的两个不同订阅返回 undefined
- html - 如何使用 html 将图像居中显示在幻灯片上?(w3 模板)
- python - 教程:爬取 0 页(以 0 页/分钟),抓取 0 项(以 0 项/分钟)