- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有类似的questions和图书馆,如 ELI5和 LIME .但是我找不到解决我的问题的方法。我有一组文档,我正在尝试使用 scikit-learn 的 DBSCAN 对它们进行聚类。 .首先,我正在使用 TfidfVectorizer对文档进行矢量化。然后,我简单地对数据进行聚类并接收预测的标签。我的问题是:如何解释集群形成的原因?我的意思是,假设有 2 个预测的集群(集群 1 和集群 2)。 哪些特征(因为我们的输入数据是向量化的文档,我们的特征是向量化的“词”)对于创建集群 1(或集群 2)很重要?
您可以在下面找到我目前正在处理的最小示例。这不是我试图实现的最小工作示例(因为我不知道如何实现)。
import numpy as np
import pandas as pd
from sklearn.cluster import DBSCAN
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
categories = ['alt.atheism', 'soc.religion.christian',
'comp.graphics', 'sci.med']
twenty_train = fetch_20newsgroups(
subset='train',
categories=categories,
shuffle=True,
random_state=42,
remove=('headers', 'footers'),
)
visualize_train_data = pd.DataFrame(data=np.c_[twenty_train
['data'], twenty_train
['target']])
print(visualize_train_data.head())
vec = TfidfVectorizer(min_df=3, stop_words='english',
ngram_range=(1, 2))
vectorized_train_data = vec.fit_transform(twenty_train.data)
clustering = DBSCAN(eps=0.6, min_samples=2).fit(vectorized_train_data)
print(f"Unique labels are {np.unique(clustering.labels_)}")
附注:我提供的问题专门针对 k-Means 算法,答案不是很直观(对我而言)。 ELI5 和 LIME 是很棒的库,但它们提供的示例与回归或分类相关(不是聚类),它们的回归器和分类器直接支持“预测”。 DBSCAN 不...
最佳答案
首先,让我们了解您使用的嵌入空间是什么。 TfidfVectorizer
将创建一个非常稀疏的矩阵,其中一个维度对应于句子,另一个维度对应于您的词汇(文本中的所有单词,除了“停用词”和非常不常见 - 参见 min_df
和 stop_words
)。当您要求 DBSCAN 对句子进行聚类时,它会使用单词 tf-idfs 的那些表示,并使用欧几里德距离度量找到彼此接近的句子。因此,希望您的集群应该由具有常用词的句子创建。为了找到特定集群中哪些单词(或“特征”)最重要,只需取属于同一集群(矩阵的行)的句子,并找到列的前 K 个(比如~10)个索引具有最常见的非零值。然后查找这些词在使用什么vec.get_feature_names()
更新
cluster_id = 55 # select some cluster
feat_freq = (vectorized_train_data[(clustering.labels_== cluster_id)] > 0).astype(int).sum(axis=0) # find frequencies of the words
max_idx = np.argwhere(feat_freq == feat_freq.max())[:,1] # select those with maximum frequency
for i in max_idx:
print(i, vec.get_feature_names()[i])
请注意,您在此处获得的集群非常小。集群 55 只有 4 个句子。大多数其他人只有2句话。
关于python - 如何通过特征重要性来解释文本聚类结果? (DBSCAN),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63934291/
环顾四周,我发现可以将预先计算的距离矩阵传递给 SKLearn DBSCAN .不幸的是,我不知道如何通过它进行计算。 假设我有一个包含 100 个元素的一维数组,其中只有节点的名称。然后我有一个 2
有类似的questions和图书馆,如 ELI5和 LIME .但是我找不到解决我的问题的方法。我有一组文档,我正在尝试使用 scikit-learn 的 DBSCAN 对它们进行聚类。 .首先,我正
是否要求DBSCAN及其索引具有相同的距离函数?如果不是,什么情况下需要使用不同的距离函数? Scala 代码如何创建 DBSCAN 和索引: import de.lmu.ifi.dbs.elki.a
我在scikit-learn中的DBSCAN算法上测试了我的图像集 python 模块。相似度计算还有其他选择: # Compute similarities D = distance.squaref
我正在研究学校关于异常值检测的项目。我想我会创建自己的小数据集并使用 DBSCAN 来处理它。我想我会尝试创建一个关于网站上广告点击是否作弊的数据集。以下是我要创建的数据集的详细信息。 数据集名称:作
我使用方法 dbscan::dbscan 来按位置和密度对数据进行聚类。 我的数据如下所示: str(data) 'data.frame': 4872 obs. of 3 variables: $
使用 DBSCAN, (DBSCAN(eps=epsilon, min_samples=10, algorithm='ball_tree', metric='haversine') 我已经聚集了一个纬
我正在尝试在轨迹数据集上运行 DBSCAN (sklearn.cluster)。数据集是数组(点)的数组(轨迹)的数组 数据集_测试= array([[[46.37017059, 30.954216
我正在尝试在这里实现 DBSCAN 的代码:http://en.wikipedia.org/wiki/DBSCAN 我感到困惑的部分是 expandCluster(P, NeighborPts, C,
我有以下内容: 一个数以千计的数据集 一种计算相似度的方法,但数据点本身我无法在欧几里德空间中绘制它们 我知道 DBSCAN 应该支持自定义距离度量,但我不知道如何使用它。 假设我有一个函数 def
根据我对 DBSCAN 的理解,您可以指定 epsilon,例如 100 米,并且 — 因为 DBSCAN 考虑了密度可达性 而不 direct density-reachability 寻找簇时——
我有一个包含纬度和经度对的数据框。 这是我的数据框的样子。 order_lat order_long 0 19.111841 72.910729 1 19.111342 72
有没有什么工具可以计算出 DBSCAN 算法的 minpts 和 eps 的最优值? 目前我使用sklearn库来应用DBSCAN算法 from sklearn.cluster import DBSC
我已经在 R 中实现了 DBSCAN 算法,并且我正在将集群分配与 fpc library 的 DBSCAN 实现相匹配。 .测试是在 fpc 库 dbscan 示例中给出的合成数据上完成的: n <
这个问题已经有答案了: how to do clustering when the shape of data is (x,y,z)? (1 个回答) 已关闭 4 年前。 sklearn 中是否允许通
我正在从事与聚类任务相关的任务。 DBSCAN 拟合程序产生奇怪的结果,我不明白我的错误在哪里。我简化了代码,只留下了重要的部分: clusters = pd.read_csv('cl.csv') d
我想使用聚类算法来找到大有向图的聚类,并且我也想从该图中消除噪声。因此,我正在考虑使用DBSCAN方法,因为我发现我们可以为算法提供一个距离函数来确定两个不同节点之间的距离/相似度。 我的问题是,如何
据说 DBSCAN 在边界点上不一致,取决于它首先将点分配给哪个簇。当 DBSCAN 想要将边界点分配给其中一个簇时,是否有一种变体会考虑每个簇中边界点接近的点数(eps)? 最佳答案 在这种情况下,
我正在尝试对包含超过 100 万个数据点的数据集进行聚类。一列包含文本,另一列包含与其对应的数值。我面临的问题是它被卡住并且永远不会完成。我尝试过处理大约 100,000 个较小的数据集,它运行得相当
我正在尝试将多个核心与sklearn的DBSCAN一起使用,但是当我更改 n_jobs = -1 时,运行时间似乎没有变化(按照文档的建议,使用所有处理器来运行并行作业)。我错过了什么? import
我是一名优秀的程序员,十分优秀!