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

Weka中属性合并需求:合并细分医学专业属性以缩减维度

处理Weka中医疗专科属性的标签合并与二进制转换

针对你遇到的问题——将包含70余种标签的medical speciality标称属性转换为合并后的二进制属性(比如把Pediatrics-Endocrinology同时标记到Pediatrics和Endocrinology属性),这里有两种实用的解决方案,分别适合GUI可视化操作和自定义脚本处理:

方法一:用Weka内置过滤器快速实现(无需代码)

这种方法适合不想写脚本的场景,通过两步过滤器完成:

  1. 将标称属性转为字符串属性

    • 加载数据集后,在Weka Explorer的Filter面板选择unsupervised.attribute.NominalToString
    • 配置过滤器,选择medical speciality作为目标属性,点击Apply将其转为字符串类型
  2. 拆分标签生成二进制属性

    • 接着选择unsupervised.attribute.StringToWordVector过滤器
    • 关键配置:
      • 设置outputWordCounts为False(生成二进制值,1表示存在该标签,0表示不存在)
      • 修改delimiters为- (用连字符和空格作为标签拆分的分隔符,适配你的复合标签格式)
      • 可选:设置wordsToKeep指定只保留你需要的标签(比如Pediatrics,Endocrinology),避免生成多余属性
    • 点击Apply后,数据集会自动生成每个单一标签对应的二进制属性,Pediatrics-Endocrinology这类复合标签会同时在Pediatrics和Endocrinology属性上标记为1
  3. 清理多余属性(可选)

    • 如果生成了不需要的标签属性,用unsupervised.attribute.Remove过滤器删除即可,只保留你需要的目标属性

方法二:自定义脚本实现更灵活的控制

如果需要更复杂的标签映射规则(比如某些复合标签需要特殊处理),可以用ScriptedFilter编写Groovy脚本:

  1. 在Weka Explorer的Filter面板选择unsupervised.attribute.ScriptedFilter
  2. 在script配置项中粘贴以下代码(可根据你的目标标签修改):
// 定义你需要保留的目标标签集合
def targetTags = ["Pediatrics", "Endocrinology"]

// 为每个目标标签添加新的二进制属性
targetTags.each { tag ->
    outputAttributes.addAttribute(new Attribute(tag, [0, 1]))
}

// 遍历每个实例处理标签
for (int i = 0; i < inputInstances.numInstances(); i++) {
    def instance = inputInstances.instance(i)
    def originalTag = instance.stringValue(instance.attribute("medical speciality"))
    
    // 生成新属性的取值
    def binaryValues = []
    targetTags.each { tag ->
        // 判断原标签是否包含目标标签,是则设为1,否则0
        binaryValues.add(originalTag.contains(tag) ? 1.0 : 0.0)
    }
    
    // 构建新实例:保留原属性 + 添加新的二进制属性
    def newInstance = new DenseInstance(instance.numAttributes() + targetTags.size())
    // 复制原属性值
    for (int j = 0; j < instance.numAttributes(); j++) {
        newInstance.setValue(j, instance.value(j))
    }
    // 设置新属性值
    for (int j = 0; j < targetTags.size(); j++) {
        newInstance.setValue(instance.numAttributes() + j, binaryValues[j])
    }
    outputInstances.add(newInstance)
}
  1. 点击Apply后,会生成你指定的二进制属性,复合标签会被正确映射到对应的属性上

两种方法都能有效减少爆炸后的属性数量,同时保留你需要的标签关联关系,你可以根据自己的需求选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:35:32