import pandas as pd
import numpy as np
from sklearn.preprocessing import OneHotEncoder,StandardScaler
from sklearn_pandas import DataFrameMapper
from sklearn.ensemble import GradientBoostingClassifier
from sklearn2pmml.pipeline import PMMLPipeline
from sklearn2pmml import sklearn2pmml
from sklearn.metrics import classification_report
from sklearn.metrics import roc_auc_score
from sklearn.model_selection import train_test_split
from sklearn2pmml.decoration import ContinuousDomain
titanic = pd.read_csv('titanic.txt')
titanic=titanic.sample(n=1300)
cat =[]
conts=[]
y = titanic['survived']
X = titanic.drop(['survived',"row.names"], axis = 1)
X.info()
for c in X.columns:
if(titanic.head().dtypes[c]=='object'):
X[c].fillna('NULL', inplace=True)
cat.append(c)
else:
X[c].fillna(-1, inplace=True)
conts.append(c)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,random_state=10)
GBDT = GradientBoostingClassifier(random_state=9,max_depth=5,min_samples_split=10)
dm = DataFrameMapper([
(cat, OneHotEncoder(sparse=False,handle_unknown='ignore',dtype=np.int)),
(conts,[ContinuousDomain(missing_value_replacement=-1),StandardScaler()])
])
estimator=[('mapper', dm), ('classifier', GBDT)]
clf = PMMLPipeline(estimator)
clf.fit(X_train, y_train)
y_predict = clf.predict(X_test)
sklearn2pmml(clf,pmml='GBDTTitan3.pmml', with_repr=True, debug=False)