Python 我学东西很慢

Python 我学东西很慢,python,machine-learning,scikit-learn,cluster-analysis,dbscan,Python,Machine Learning,Scikit Learn,Cluster Analysis,Dbscan,我正在尝试对一个数据集进行聚类,该数据集包含100多万个数据点。一列有文本,另一列有与其对应的数值。我面临的问题是,它被卡住了,永远不会完成。我曾尝试使用大约100000个较小的数据集,它工作得相当快,但随着我开始增加数据点,它开始变慢,对于一百万个数据集来说,它永远不会完成并挂起。起初,我认为这可能是因为我有一个文本tfidf矩阵,有100个维度,所以需要很长时间。然后我尝试了基于数量的聚类,这只是每个数据点的一个值,但仍然没有完成。下面是代码片段。知道我做错了什么吗?我见过人们使用更大的数据

我正在尝试对一个数据集进行聚类,该数据集包含100多万个数据点。一列有文本,另一列有与其对应的数值。我面临的问题是,它被卡住了,永远不会完成。我曾尝试使用大约100000个较小的数据集,它工作得相当快,但随着我开始增加数据点,它开始变慢,对于一百万个数据集来说,它永远不会完成并挂起。起初,我认为这可能是因为我有一个文本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)
使用更多的核心。 使用
n_作业
参数将其定义为:
n_jobs=-1
inside
DBSCAN
class.

示例:

Y=data['amount'].values
Y=Y.reshape(-1,1)
dbscan = DBSCAN(eps=0.3, min_samples= 10, algorithm='kd_tree', n_jobs=-1)
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)

很可能你的ε太大了

如果大多数点在大多数其他点的ε范围内,则运行时间为二次O(n²)。因此,从小价值开始


您不能只添加/删除功能而保持epsilon不变。

您实际等待它完成的时间有多长?您所说的“基于数量的聚类”是什么意思,它只是每个数据点的一个值?您是否在
eps
min\u样本上进行了超参数调整
DBScan
对这些参数非常敏感。即使是eps中的一个小小的改变也可能会改变你的模型的行为。@MatiasValdenegro我运行了一夜,它仍然在运行。所以大概8个小时。@Kalsi我的意思是数量只是一个单一的功能,所以我的数据集是100万乘以1个矩阵,而文本在转换成tfidf矩阵后产生了100个用户。那么100万乘100的矩阵。为什么ε/点密度会改变运行时的复杂性?无论如何,必须计算成对距离。