首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sklearn Voting与使用不同功能的模型集成,并使用k折交叉验证进行测试

Sklearn Voting与使用不同功能的模型集成,并使用k折交叉验证进行测试
EN

Stack Overflow用户
提问于 2020-05-28 21:00:36
回答 1查看 931关注 0票数 0

我有一个包含4组不同特征的数据框。

我需要用这四个不同的特征组创建4个不同的模型,并将它们与集成投票分类器结合起来。此外,我需要使用k-折交叉验证来测试分类器。

然而,我发现很难将不同的特征集、投票分类器和k-折交叉验证与sklearn中提供的功能结合起来。以下是我到目前为止所拥有的代码。

代码语言:javascript
复制
y = df1.index
x = preprocessing.scale(df1)

SVM = svm.SVC(kernel='rbf', C=1)
rf=RandomForestClassifier(n_estimators=200)
ann = MLPClassifier(solver='lbfgs', alpha=1e-5, hidden_layer_sizes=(25, 2), random_state=1)
neigh = KNeighborsClassifier(n_neighbors=10)

models = list()
models.append(('facial', SVM))
models.append(('posture', rf))
models.append(('computer', ann))
models.append(('physio', neigh))

ens = VotingClassifier(estimators=models)

cv = KFold(n_splits=10, random_state=None, shuffle=True)
scores = cross_val_score(ens, x, y, cv=cv, scoring='accuracy')

如您所见,此程序对所有4个型号都使用相同的功能。我如何改进此计划以实现我的目标?

EN

回答 1

Stack Overflow用户

发布于 2020-05-29 14:35:39

我确实使用管道实现了这一点,

代码语言:javascript
复制
y = df1.index
x = preprocessing.scale(df1)

phy_features = ['A', 'B', 'C']
phy_transformer = Pipeline(steps=[('imputer', SimpleImputer(strategy='median')), ('scaler', StandardScaler())])
phy_processer = ColumnTransformer(transformers=[('phy', phy_transformer, phy_features)])

fa_features = ['D', 'E', 'F']
fa_transformer = Pipeline(steps=[('imputer', SimpleImputer(strategy='median')), ('scaler', StandardScaler())])
fa_processer = ColumnTransformer(transformers=[('fa', fa_transformer, fa_features)])


pipe_phy = Pipeline(steps=[('preprocessor', phy_processer ),('classifier', SVM)])
pipe_fa = Pipeline(steps=[('preprocessor', fa_processer ),('classifier', SVM)])

ens = VotingClassifier(estimators=[pipe_phy, pipe_fa])

cv = KFold(n_splits=10, random_state=None, shuffle=True)
for train_index, test_index in cv.split(x):
    x_train, x_test = x[train_index], x[test_index]
    y_train, y_test = y[train_index], y[test_index]
    ens.fit(x_train,y_train)
    print(ens.score(x_test, y_test))

如果您在使用ColumnTransforms时收到TypeError,请参阅sklearn Pipeline: argument of type 'ColumnTransformer' is not iterable

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62065365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档