使用变量传递特征触发ValueError,直接传入则正常的问题排查
PartialDependenceDisplay调用时的ValueError问题解决方法
错误原因
你代码里的features = [ftrs]会将传入的特征列表再嵌套一层,形成二维列表。而PartialDependenceDisplay.from_estimator对features参数的要求是:每个元素要么是单个特征(字符串名称或整数索引),要么是最多包含2个特征的可迭代对象(用于绘制二维偏依赖图)。你传入的嵌套列表中,每个元素是包含8个特征的长列表,违反了参数限制,因此触发ValueError。
解决方案
直接将传入的ftrs赋值给features,不需要额外嵌套:
a=['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude'] def modell(data, metka, ftrs): X = data.drop([metka], axis=1) y = data[metka] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 0) model = XGBRegressor() model.fit(X_train, y_train) y_pred = model.predict(X) print('OK') # 移除多余的嵌套,直接使用传入的特征列表 features = ftrs disp = PartialDependenceDisplay.from_estimator(model, X, features=features, kind='average') return 'NICE'
补充说明
当你直接在代码中写特征列表(比如features=['MedInc', ...])时,这是一维列表,每个元素都是单个字符串特征,完全符合参数要求;但用[ftrs]会把它包装成二维列表,导致每个元素是一个长列表,触发参数校验错误。
内容的提问来源于stack exchange,提问作者Антон Конов
相关产品推荐
相关产品推荐

