Python 使用DBSCAN从推文中提取语法信息

Python 使用DBSCAN从推文中提取语法信息,python,scikit-learn,cluster-analysis,dbscan,Python,Scikit Learn,Cluster Analysis,Dbscan,我试图使用DBSCAN的最小编辑距离来提取推文的高出现率语法结构 我标记10k条推文,然后预先计算它们的最小距离,并将其存储在距离矩阵中。然后我将距离矩阵交给DBSCAN。无论我的eps和min_样本大小有多大或多小,我都不会得到超过4个集群(eps=1,min_样本=13)。对于这种大小的数据,语法结构应该产生更多和/或更大的集群 以下是我的工作原理: A的编辑距离为1到B B的编辑距离为1到C C的编辑距离为2到A 尽管A和C的编辑距离为2,但考虑到它们与B的关系,它们被放在同一个簇中

我试图使用DBSCAN的最小编辑距离来提取推文的高出现率语法结构

我标记10k条推文,然后预先计算它们的最小距离,并将其存储在距离矩阵中。然后我将距离矩阵交给DBSCAN。无论我的eps和min_样本大小有多大或多小,我都不会得到超过4个集群(eps=1,min_样本=13)。对于这种大小的数据,语法结构应该产生更多和/或更大的集群

以下是我的工作原理:

  • A的编辑距离为1到B
  • B的编辑距离为1到C
  • C的编辑距离为2到A
  • 尽管A和C的编辑距离为2,但考虑到它们与B的关系,它们被放在同一个簇中
如果您认为我遗漏了什么,或者是否有其他算法可以帮助我完成相同的集群任务,请告诉我

db = DBSCAN(eps=3, min_samples=10, metric='precomputed')
db.fit(df)
print (set(db.labels_))
{0, -1}

我选择DBSCAN,因为我不知道将出现的集群数量

在您的示例中,B需要有12个编辑距离为1的邻居,否则它们都将保持噪波。我并不奇怪参数调整对这些数据来说是困难的,因为编辑距离非常粗糙,但你不能解决这个问题。如果我将编辑距离更改为大于1的任何数字,标签集将变为{0,-1},给出一个大的簇。最长的字符串是33个POS字符,最短的是5,我在50k POS推文中尝试过这一点,但同样的问题依然存在。你可以尝试标准化编辑距离,但我怀疑这会有多大帮助。太粗糙的是数据,而不是方法。