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

如何使用python-weka-wrapper3直接对CSV文件应用SMOTE算法?求代码实现

使用python-weka-wrapper3对CSV数据集应用SMOTE算法

完全可以通过python-weka-wrapper3实现和Weka GUI中一致的SMOTE过采样操作,核心是先将CSV文件转换为Weka的Instances格式,再调用Weka的SMOTE过滤器处理。以下是针对你场景的具体实现:

前置准备

  1. 安装依赖:
    pip install python-weka-wrapper3
    
    确保系统已安装Java 8及以上版本(python-weka-wrapper3依赖JVM运行Weka核心逻辑)。

完整代码实现

from weka.core.jvm import start_jvm, stop_jvm
from weka.core.converters import Loader, Saver
from weka.filters import Filter

# 启动JVM(必须执行,否则无法调用Weka API)
start_jvm()

# 1. 加载CSV数据集
loader = Loader(classname="weka.core.converters.CSVLoader")
# 替换为你的CSV文件路径
dataset = loader.load_file("xxx.csv")
# 指定类别属性位置:假设类别是最后一列,用-1;如果是第k列(从左数),则用k-1(Weka索引从0开始)
dataset.class_is_last()

# 2. 配置SMOTE过滤器
smote_filter = Filter(classname="weka.filters.supervised.instance.SMOTE")
# 参数说明:
# -P: minority类的过采样百分比,默认100(将minority数量提升至与majority相同)
# 你的场景中False是minority(6个),True是majority(12个),设置-P 200可将False数量提升到12个
smote_filter.set_options(["-P", "200"])
# 绑定原始数据集,让过滤器识别数据结构
smote_filter.inputformat(dataset)

# 3. 执行SMOTE过采样
balanced_dataset = smote_filter.filter(dataset)

# 输出处理前后的类别分布对比
print("原始数据集类别分布:")
class_attr = dataset.class_attribute
for idx in range(class_attr.num_values):
    count = dataset.attribute_stats(dataset.class_index).nominal_counts[idx]
    print(f"{class_attr.value(idx)}: {count}")

print("\nSMOTE处理后数据集类别分布:")
balanced_class_attr = balanced_dataset.class_attribute
for idx in range(balanced_class_attr.num_values):
    count = balanced_dataset.attribute_stats(balanced_dataset.class_index).nominal_counts[idx]
    print(f"{balanced_class_attr.value(idx)}: {count}")

# 可选:将平衡后的数据集保存为新CSV
saver = Saver(classname="weka.core.converters.CSVSaver")
saver.save_file(balanced_dataset, "balanced_xxx.csv")

# 停止JVM释放资源
stop_jvm()

关键说明

  • 类别属性必须是标称型(Nominal):如果你的CSV中类别列是布尔值(True/False),Weka会自动识别为标称型;若为其他格式,需手动指定属性类型。
  • SMOTE是有监督过滤器:必须先通过class_is_last()或class_index = X指定类别属性,否则过滤器无法工作。
  • 参数调整:除了-P,还可通过-K指定SMOTE的近邻数(默认5),比如set_options(["-P", "200", "-K", "3"])。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 16:06:27