Python(流水线)

sklearn-Pipeline

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import preprocessing
from sklearn import datasets
from sklearn.model_selection import train_test_split,GridSearchCV,cross_val_score
from sklearn.feature_selection import SelectKBest,f_regression
from sklearn.ensemble import ExtraTreesClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.pipeline import Pipeline
from sklearn.metrics import accuracy_score

import warnings
warnings.filterwarnings('ignore')

dataset = datasets.load_wine()
x,y = dataset.data,dataset.target

print('----------PIPELINE----------')
encoder = preprocessing.StandardScaler()
selector = SelectKBest(f_regression,k=8)
model = RandomForestClassifier(n_estimators=50,max_depth=4)
pipe = Pipeline([('norm',encoder),('feat',selector),('model',model)])
pipe.fit(x,y)
status = pipe.named_steps['feat'].get_support()
choosen = []
for index,value in enumerate(status):
    if value:
        choosen.append(index)
print('Selected features:',choosen)
predict = pipe.predict(x)
acc = accuracy_score(y,predict)
print('acc = ',round(acc,4))

print('----------EXTRATREECLASSIFIER----------')
nx = preprocessing.StandardScaler().fit_transform(x)

clf = ExtraTreesClassifier(n_estimators=100,criterion='gini',max_depth=4,random_state=1)
clf.fit(nx,y)
index = np.flipud(np.argsort(clf.feature_importances_))
score = clf.feature_importances_[index]
fig,ax = plt.subplots(figsize=(10,5))
plt.bar(range(len(index)),score,align='center')
plt.xticks(range(len(index)),index)
plt.title('importances of features')
plt.show()

sx = nx[:,index[0:7]]
x_train,x_test,y_train,y_test = train_test_split(sx,y,test_size=0.2,random_state=1)

scores = cross_val_score(ExtraTreesClassifier(n_estimators=100,max_depth=4),x_train,y_train,scoring='accuracy',cv=10)
print('Cross validation acc = ',str(100*round(np.mean(scores),2))+'%')

params = {
        'n_estimators':[50,100,200,250,300],
        'max_depth':[3,4,5,6,7,8]
    }
clf = GridSearchCV(ExtraTreesClassifier(random_state=1),params)
clf.fit(x_train,y_train)
print('Best parapmeters:\n',clf.best_params_)

n = clf.best_params_['n_estimators']
depth = clf.best_params_['max_depth']
model = ExtraTreesClassifier(n_estimators=n,max_depth=depth,random_state=1)
model.fit(x_train,y_train)
predict_train = model.predict(x_train)
train_acc = accuracy_score(y_train,predict_train)
predict_test = model.predict(x_test)
test_acc = accuracy_score(y_test,predict_test)
print('Train acc = ',round(train_acc,2),' Test acc = ',round(test_acc,2))

猜你喜欢

转载自blog.csdn.net/qq_42394743/article/details/82937200