NearMiss实例化传参报错:__init__()仅接受1个位置参数却传入2个
解决imblearn NearMiss实例化时传入0.8出现TypeError的问题
报错原因
直接用NearMiss(0.8)实例化触发TypeError,是因为NearMiss的构造函数不支持直接传位置参数作为采样比例。它的第一个位置参数是version(指定NearMiss版本,必须为整数,默认1),你传入的0.8会被误当作version参数,而构造函数没有额外位置参数定义,因此抛出参数数量不匹配的错误。
解决方法
要设置采样比例,必须显式指定sampling_strategy关键字参数,这是imblearn中控制采样比例的标准参数:
from collections import Counter from imblearn.under_sampling import NearMiss # 显式指定采样比例参数 ns = NearMiss(sampling_strategy=0.8) X_train_ns, y_train_ns = ns.fit_resample(X_train, y_train) print("The number of classes before fit {}".format(Counter(y_train))) print("The number of classes after fit {}".format(Counter(y_train_ns)))
关于sampling_strategy的说明
- 传入浮点数时,代表少数类样本数与多数类样本数的目标比例。比如你原数据中少数类(1类)有348个,设置
sampling_strategy=0.8后,多数类(0类)会被采样到348 / 0.8 = 435个。 - 默认值为
'auto',即把多数类样本数采样到和少数类一致,这也是你不传参数时得到Counter({0: 348, 1: 348})的原因。 - 也可以传入字典指定每个类的目标数量,比如
sampling_strategy={0: 1000, 1: 348},直接定义多数类的保留数量。
内容的提问来源于stack exchange,提问作者Rohit Bale
相关产品推荐
相关产品推荐

