You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法正确输入node2vec嵌入数据至DBSCAN聚类的问题求助

解决node2vec嵌入数据DBSCAN聚类问题的实操步骤

一、正确读取CSV,提取纯数值矩阵

针对你提到的两种CSV格式,分别处理:

  • 首列为节点名的CSV:
    读取时将第一列设为索引,直接提取数值部分:
    import pandas as pd
    df = pd.read_csv('your_embedding.csv', index_col=0)
    # 替代弃用的as_matrix,二选一即可
    X = df.values  # 或者 df.to_numpy()
    
  • 首行为节点名的CSV:
    直接读取后提取数值(首行自动作为列名,不影响数值矩阵提取):
    df = pd.read_csv('your_embedding.csv')
    X = df.values
    
    注意:如果节点名混入非字符串内容,可能导致pandas将某列识别为object类型,进而让X中混入非数值数据。务必检查df.dtypes,确保所有列都是float64或int64类型。

二、排查并清理非法数值

报错提示的NaN/无穷大是核心问题,必须彻底清理:

import numpy as np

# 先统计异常值数量
print("NaN数量:", np.isnan(X).sum())
print("无穷大数量:", np.isinf(X).sum())

# 清理方案二选一:
# 方案1:将异常值替换为矩阵的均值/极值(适合少量异常)
X_clean = np.nan_to_num(X, nan=np.nanmean(X), posinf=np.nanmax(X), neginf=np.nanmin(X))
# 方案2:删除包含异常值的节点行(适合异常值多且节点可舍弃的场景)
clean_df = df.dropna(axis=0, how='any')
clean_df = clean_df[~clean_df.isin([np.inf, -np.inf]).any(axis=1)]
X_clean = clean_df.values

额外提醒:node2vec嵌入本身不应出现这些异常值,大概率是CSV保存环节出了问题——比如用错分隔符(把逗号写成分号)、保存时数据截断、导出时混入额外注释行。可以用记事本打开CSV,检查是否有空单元格、乱码或不完整的行。

三、替换弃用的as_matrix方法

直接用df.values或df.to_numpy()替代as_matrix(),这两种是sklearn官方推荐的写法,不会触发弃用警告。

四、验证输入合法性

喂给DBSCAN前,先确认数据格式合规:

print("数据类型:", X_clean.dtype)  # 必须为float64
print("数据形状:", X_clean.shape)  # 格式应为(节点数, 嵌入维度)
print("数值范围:", np.min(X_clean), np.max(X_clean))  # 排查是否存在离谱极值
# 如果类型不符,强制转换
X_clean = X_clean.astype(np.float64)

五、DBSCAN调用示例

用清理后的矩阵执行聚类:

from sklearn.cluster import DBSCAN

# eps和min_samples需根据你的嵌入数据调整,比如先试eps=0.5、min_samples=3
dbscan = DBSCAN(eps=0.5, min_samples=3)
cluster_labels = dbscan.fit_predict(X_clean)

# 查看聚类结果
print("每个节点的聚类标签:", cluster_labels)
print("有效聚类数(不含噪声点):", len(set(cluster_labels)) - (1 if -1 in cluster_labels else 0))

内容的提问来源于stack exchange,提问作者Steve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 04:25:16