我已经创建了一个包含svc
、LogisticRegression
、LinearDiscriminantAnalysis
等多种模型的集成模型。
但是当我对数据进行缩放时,mlp
分类器的表现会更好,而其他模型如LogisticRegression
在数据缩放后准确率反而会降低。所以我想只对一个模型进行数据缩放。
from sklearn import preprocessingscaler = preprocessing.StandardScaler()scaler.fit(X_train)X_train_ = scaler.transform(X_train)X_val_ = scaler.transform(X_val)mlp = MLPClassifier(solver='lbfgs', alpha=1e-5, hidden_layer_sizes=(5,2), random_state=1)mlp.fit(X_train_, y_train)y_pred = mlp.predict(X_val_)
现在当我创建我的投票分类器时,我不知道如何仅对一个模型使用缩放后的数据。
votingC = VotingClassifier(estimators=[('logistic_regression', lr),('SVC',svc), ('Catboost', cat),('ExtraTrees', et), ('LinearDiscriminantAnalysis', lda), ('perceptron', p),('randomforest', r), ('nusvc', nusvc), ('knn', knn), ('SGDClassifier', pac), ('bag', bag),('bnb', nc)], voting='hard', n_jobs=6, weights = [1.5,1.5,1,1,1,1,1,1,1,1,1,1])votingC = votingC.fit(X_train, y_train)
非常感谢您的帮助!
回答:
对于需要缩放的模型,您可以构建一个管道,然后将其放入投票分类器中。以下是缩放和未缩放的支持向量分类器的示例:
from sklearn.ensemble import VotingClassifierfrom sklearn.preprocessing import StandardScalerfrom sklearn.svm import SVCfrom sklearn.datasets import make_classificationfrom sklearn.pipeline import make_pipelineX,y = make_classification(random_state=123)scaled_svc = make_pipeline(StandardScaler(), SVC())voting = VotingClassifier(estimators=[ ('scaled_svc', scaled_svc), ('unscaled_svc', SVC())])v = voting.fit(X,y)v.predict(X)array([0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0])