What is the worst part of marriage? Well, divorces are expensive ;). So let’s have a look at the divorce predictors dataset by Yöntem et al. (2019) hosted on the UCI machine learning repository.


Contents


Dataset exploration

Social science, psychology, etc. - I’m not going to comment on methods regarding data mining/gathering. I encounter enough bullshit in STEM publications already. Let’ me simply quote something from the paper:

Research data were collected using the face-to-face interview technique and via Google Drive. Divorced participants answered the scale items by considering their marriages. And, of the married participants, only those with happy marriages, without any thought of divorce, were included in the study.

Yöntem et al. (2019)

Well, let’s start off with the feature description:

  1. If one of us apologizes when our discussion deteriorates, the discussion ends.

  2. I know we can ignore our differences, even if things get hard sometimes.

  3. When we need it, we can take our discussions with my spouse from the beginning and correct it.

  4. When I discuss with my spouse, to contact him will eventually work.

  5. The time I spent with my wife is special for us.

  6. We don’t have time at home as partners.

  7. We are like two strangers who share the same environment at home rather than family.

  8. I enjoy our holidays with my wife.

  9. I enjoy traveling with my wife.

  10. Most of our goals are common to my spouse.

  11. I think that one day in the future, when I look back, I see that my spouse and I have been in harmony with each other.

  12. My spouse and I have similar values in terms of personal freedom.

  13. My spouse and I have similar sense of entertainment.

  14. Most of our goals for people (children, friends, etc.) are the same.

  15. Our dreams with my spouse are similar and harmonious.

  16. We’re compatible with my spouse about what love should be.

  17. We share the same views about being happy in our life with my spouse

  18. My spouse and I have similar ideas about how marriage should be

  19. My spouse and I have similar ideas about how roles should be in marriage

  20. My spouse and I have similar values in trust.

  21. I know exactly what my wife likes.

  22. I know how my spouse wants to be taken care of when she/he sick.

  23. I know my spouse’s favorite food.

  24. I can tell you what kind of stress my spouse is facing in her/his life.

  25. I have knowledge of my spouse’s inner world.

  26. I know my spouse’s basic anxieties.

  27. I know what my spouse’s current sources of stress are.

  28. I know my spouse’s hopes and wishes.

  29. I know my spouse very well.

  30. I know my spouse’s friends and their social relationships.

  31. I feel aggressive when I argue with my spouse.

  32. When discussing with my spouse, I usually use expressions such as ‘you always’ or ‘you never’ .

  33. I can use negative statements about my spouse’s personality during our discussions.

  34. I can use offensive expressions during our discussions.

  35. I can insult my spouse during our discussions.

  36. I can be humiliating when we discussions.

  37. My discussion with my spouse is not calm.

  38. I hate my spouse’s way of open a subject.

  39. Our discussions often occur suddenly.

  40. We’re just starting a discussion before I know what’s going on.

  41. When I talk to my spouse about something, my calm suddenly breaks.

  42. When I argue with my spouse, ı only go out and I don’t say a word.

  43. I mostly stay silent to calm the environment a little bit.

  44. Sometimes I think it’s good for me to leave home for a while.

  45. I’d rather stay silent than discuss with my spouse.

  46. Even if I’m right in the discussion, I stay silent to hurt my spouse.

  47. When I discuss with my spouse, I stay silent because I am afraid of not being able to control my anger.

  48. I feel right in our discussions.

  49. I have nothing to do with what I’ve been accused of.

  50. I’m not actually the one who’s guilty about what I’m accused of.

  51. I’m not the one who’s wrong about problems at home.

  52. I wouldn’t hesitate to tell my spouse about her/his inadequacy.

  53. When I discuss, I remind my spouse of her/his inadequacy.

  54. I’m not afraid to tell my spouse about her/his incompetence.

Dataset description

When reading these questions/statements, I wonder if “happily married couples” know each others answers. If so, would it increase divorce rates ;) ?

Further, there is no obvious information on categorical encoding (range 0 o {3,4}) and which class means what. I couldn’t find anything on train-test splitting

Brute Force

import time
import os
import numpy as np
import pandas as pd
pd.options.display.max_columns = None
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import MaxAbsScaler
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
from sklearn.naive_bayes import GaussianNB
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import LinearSVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from skgarden import MondrianForestClassifier
import xgboost

inputData = pd.read_csv("./data/divorce.csv", delimiter=";")
display(inputData.sample(5))
display(inputData.describe())
Atr1 Atr2 Atr3 Atr4 Atr5 Atr6 Atr7 Atr8 Atr9 Atr10 Atr11 Atr12 Atr13 Atr14 Atr15 Atr16 Atr17 Atr18 Atr19 Atr20 Atr21 Atr22 Atr23 Atr24 Atr25 Atr26 Atr27 Atr28 Atr29 Atr30 Atr31 Atr32 Atr33 Atr34 Atr35 Atr36 Atr37 Atr38 Atr39 Atr40 Atr41 Atr42 Atr43 Atr44 Atr45 Atr46 Atr47 Atr48 Atr49 Atr50 Atr51 Atr52 Atr53 Atr54 Class
27 3 3 3 4 3 1 1 3 3 4 3 3 3 3 3 4 3 3 3 3 3 4 3 3 3 3 3 4 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 4 4 4 4 4 4 4 4 4 1
148 0 0 0 0 0 0 0 0 0 2 0 1 1 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 1 0 2 0 0 1 0 0 1 0 2 0 1 3 2 0 1 3 3 2 2 1 1 2 0 0 0
92 1 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 2 0 2 1 0 0 1 1 1 1 1 1 0
26 3 3 4 3 3 1 1 3 4 3 3 3 3 3 4 3 3 3 3 3 4 3 3 3 3 3 4 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 4 4 4 4 4 4 4 4 4 1
131 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 1 1 0 0 2 1 2 2 1 2 2 0 1 3 0 2 2 2 2 0 0 0 0
Atr1 Atr2 Atr3 Atr4 Atr5 Atr6 Atr7 Atr8 Atr9 Atr10 Atr11 Atr12 Atr13 Atr14 Atr15 Atr16 Atr17 Atr18 Atr19 Atr20 Atr21 Atr22 Atr23 Atr24 Atr25 Atr26 Atr27 Atr28 Atr29 Atr30 Atr31 Atr32 Atr33 Atr34 Atr35 Atr36 Atr37 Atr38 Atr39 Atr40 Atr41 Atr42 Atr43 Atr44 Atr45 Atr46 Atr47 Atr48 Atr49 Atr50 Atr51 Atr52 Atr53 Atr54 Class
count 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000 170.000000
mean 1.776471 1.652941 1.764706 1.482353 1.541176 0.747059 0.494118 1.452941 1.458824 1.576471 1.688235 1.652941 1.835294 1.570588 1.570588 1.476471 1.652941 1.517647 1.641176 1.458824 1.388235 1.247059 1.411765 1.511765 1.629412 1.488235 1.400000 1.305882 1.494118 1.494118 2.123529 2.058824 1.805882 1.900000 1.670588 1.605882 2.088235 1.858824 2.088235 1.870588 1.994118 2.158824 2.705882 1.941176 2.458824 2.552941 2.270588 2.741176 2.382353 2.429412 2.476471 2.517647 2.241176 2.011765 0.494118
std 1.627257 1.468654 1.415444 1.504327 1.632169 0.904046 0.898698 1.546371 1.557976 1.421529 1.647082 1.468654 1.478421 1.502765 1.506697 1.504246 1.614512 1.565998 1.641027 1.554173 1.452149 1.446529 1.612041 1.504385 1.530079 1.500447 1.457078 1.467788 1.592315 1.504420 1.646955 1.623445 1.785202 1.630515 1.842228 1.798412 1.716051 1.734802 1.719496 1.796039 1.721761 1.574034 1.348447 1.684267 1.499925 1.371786 1.586841 1.137348 1.511587 1.405090 1.260238 1.476537 1.505634 1.667611 0.501442
min 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
25% 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 2.000000 0.000000 1.000000 2.000000 1.000000 2.000000 1.000000 1.000000 2.000000 1.000000 1.000000 0.000000 0.000000
50% 2.000000 2.000000 2.000000 1.000000 1.000000 0.000000 0.000000 1.000000 1.000000 2.000000 1.000000 1.500000 2.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0.000000 0.000000 1.000000 1.000000 1.000000 1.000000 0.500000 1.000000 1.000000 2.000000 2.000000 1.000000 1.000000 0.500000 0.000000 2.000000 1.000000 2.000000 1.500000 2.000000 2.000000 3.000000 2.000000 3.000000 3.000000 2.000000 3.000000 3.000000 2.000000 3.000000 3.000000 2.000000 2.000000 0.000000
75% 3.000000 3.000000 3.000000 3.000000 3.000000 1.000000 1.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 1.000000
max 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 4.000000 1.000000
plt.figure(figsize=(35,35))
sns.heatmap(inputData.corr(), annot=True, cmap="magma")
plt.show()

bins = np.bincount(inputData["Class"].values)
plt.figure()
plt.bar(["0","1"], bins, color='black')
plt.xticks(["0","1"])
plt.xlabel('Classes')
plt.ylabel('Count')
plt.title('Histogram of target classes')
plt.show()

plt.figure(figsize=(10,7))
for targetClass in inputData["Class"].unique():
    plt.plot(inputData[inputData["Class"] == targetClass].values[0],
             label=targetClass)
plt.xlabel("Feature")
plt.ylabel("Feature value")
plt.title("Per class example")
plt.legend()
plt.show()

y = inputData["Class"].values
X = inputData.copy(deep=True)
X.drop(["Class"], axis=1, inplace=True)
scaler = MaxAbsScaler()
X = scaler.fit_transform(X)
datasets = {}
datasets[0] = {'X_train': X, 
               'X_test' : X,
               'y_train': y, 
               'y_test' : y}
X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.25, random_state=42)
datasets[1] = {'X_train': X_train, 
               'X_test' : X_test,
               'y_train': y_train, 
               'y_test' : y_test}

With and without train-test splitting, we are able to outperform the original paper results or perform at least on the same level. I’m really questioning what people are publishing. The brute-force, as well as the TPOT approach (see below), is already better than something on which people worked.

TPOT

Let’s see if TPOT yields something useful. Again, we will run it twice. The first time without train-test splitting and the second time with train-test-split.

import time
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
import sklearn.metrics
from tpot import TPOTClassifier

inputData = pd.read_csv("./data/divorce.csv", delimiter=";")
y = inputData["Class"].values
X = inputData.copy(deep=True)
X.drop(["Class"], axis=1, inplace=True)
from tpot import TPOTClassifier

tpot = TPOTClassifier(max_time_mins=60,
                      verbosity=1,
                      n_jobs=-1)
tpot.fit(X,y)
print(tpot.score(X,y))
tpot.export('divorce_classification.py')
y_predictions = tpot.predict(X)
acc= sklearn.metrics.accuracy_score(y_true=y,
                                     y_pred=y_predictions)
print("Accuracy:", acc)
60.01016033333334 minutes have elapsed. TPOT will close down.
TPOT closed during evaluation in one generation.
WARNING: TPOT may not provide a good pipeline if TPOT is stopped/interrupted in a early generation.


TPOT closed prematurely. Will use the current best pipeline.
Best pipeline: BernoulliNB(RFE(input_matrix, criterion=gini, max_features=0.1, n_estimators=100, step=0.7500000000000001), alpha=100.0, fit_prior=False)
0.9882352941176471

Accuracy: 0.9882352941176471

Pipeline script:

import numpy as np
import pandas as pd
from sklearn.ensemble import ExtraTreesClassifier
from sklearn.feature_selection import RFE
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import BernoulliNB
from sklearn.pipeline import make_pipeline

# NOTE: Make sure that the class is labeled 'target' in the data file
tpot_data = pd.read_csv('PATH/TO/DATA/FILE', sep='COLUMN_SEPARATOR', dtype=np.float64)
features = tpot_data.drop('target', axis=1).values
training_features, testing_features, training_target, testing_target = \
            train_test_split(features, tpot_data['target'].values, random_state=None)

# Average CV score on the training set was:0.9942857142857143
exported_pipeline = make_pipeline(
    RFE(estimator=ExtraTreesClassifier(criterion="gini", max_features=0.1, n_estimators=100), step=0.7500000000000001),
    BernoulliNB(alpha=100.0, fit_prior=False)
)

exported_pipeline.fit(training_features, training_target)
results = exported_pipeline.predict(testing_features)

Well, bad news. Divorces can be predicted ;). Let’s see how it works with train and test set splitting:

X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.25,random_state=42)

tpot2 = TPOTClassifier(max_time_mins=60,
                      verbosity=2,
                      n_jobs=-1)
tpot2.fit(X_train,y_train)
print(tpot2.score(X_test,y_test))
tpot2.export('divorce_classification_with_cv.py')

y_predictions = tpot2.predict(X_test)
acc= sklearn.metrics.accuracy_score(y_true=y_test,
                                     y_pred=y_predictions)
print("Accuracy:", acc)
Generation 1 - Current best internal CV score: 1.0
Generation 2 - Current best internal CV score: 1.0
Generation 3 - Current best internal CV score: 1.0
Generation 4 - Current best internal CV score: 1.0
Generation 5 - Current best internal CV score: 1.0
Generation 6 - Current best internal CV score: 1.0
Generation 7 - Current best internal CV score: 1.0
Generation 8 - Current best internal CV score: 1.0
Generation 9 - Current best internal CV score: 1.0
Generation 10 - Current best internal CV score: 1.0
Generation 11 - Current best internal CV score: 1.0
Generation 12 - Current best internal CV score: 1.0
Generation 13 - Current best internal CV score: 1.0
Generation 14 - Current best internal CV score: 1.0
Generation 15 - Current best internal CV score: 1.0
Generation 16 - Current best internal CV score: 1.0
Generation 17 - Current best internal CV score: 1.0
Generation 18 - Current best internal CV score: 1.0
Generation 19 - Current best internal CV score: 1.0
Generation 20 - Current best internal CV score: 1.0
Generation 21 - Current best internal CV score: 1.0
Generation 22 - Current best internal CV score: 1.0
Generation 23 - Current best internal CV score: 1.0
Generation 24 - Current best internal CV score: 1.0
Generation 25 - Current best internal CV score: 1.0
Generation 26 - Current best internal CV score: 1.0
Generation 27 - Current best internal CV score: 1.0
Generation 28 - Current best internal CV score: 1.0
Generation 29 - Current best internal CV score: 1.0
Generation 30 - Current best internal CV score: 1.0
Generation 31 - Current best internal CV score: 1.0
Generation 32 - Current best internal CV score: 1.0
Generation 33 - Current best internal CV score: 1.0
Generation 34 - Current best internal CV score: 1.0
Generation 35 - Current best internal CV score: 1.0
Generation 36 - Current best internal CV score: 1.0
Generation 37 - Current best internal CV score: 1.0
Generation 38 - Current best internal CV score: 1.0
Generation 39 - Current best internal CV score: 1.0
Generation 40 - Current best internal CV score: 1.0
Generation 41 - Current best internal CV score: 1.0
Generation 42 - Current best internal CV score: 1.0
Generation 43 - Current best internal CV score: 1.0
Generation 44 - Current best internal CV score: 1.0
Generation 45 - Current best internal CV score: 1.0
Generation 46 - Current best internal CV score: 1.0
Generation 47 - Current best internal CV score: 1.0
Generation 48 - Current best internal CV score: 1.0
Generation 49 - Current best internal CV score: 1.0
Generation 50 - Current best internal CV score: 1.0
Generation 51 - Current best internal CV score: 1.0
Generation 52 - Current best internal CV score: 1.0
Generation 53 - Current best internal CV score: 1.0
Generation 54 - Current best internal CV score: 1.0
Generation 55 - Current best internal CV score: 1.0
Generation 56 - Current best internal CV score: 1.0
Generation 57 - Current best internal CV score: 1.0
Generation 58 - Current best internal CV score: 1.0
Generation 59 - Current best internal CV score: 1.0
Generation 60 - Current best internal CV score: 1.0
Generation 61 - Current best internal CV score: 1.0
Generation 62 - Current best internal CV score: 1.0
Generation 63 - Current best internal CV score: 1.0
Generation 64 - Current best internal CV score: 1.0
Generation 65 - Current best internal CV score: 1.0
Generation 66 - Current best internal CV score: 1.0
Generation 67 - Current best internal CV score: 1.0
Generation 68 - Current best internal CV score: 1.0
Generation 69 - Current best internal CV score: 1.0
Generation 70 - Current best internal CV score: 1.0
Generation 71 - Current best internal CV score: 1.0
Generation 72 - Current best internal CV score: 1.0
Generation 73 - Current best internal CV score: 1.0
Generation 74 - Current best internal CV score: 1.0
Generation 75 - Current best internal CV score: 1.0
Generation 76 - Current best internal CV score: 1.0
Generation 77 - Current best internal CV score: 1.0
Generation 78 - Current best internal CV score: 1.0
Generation 79 - Current best internal CV score: 1.0
Generation 80 - Current best internal CV score: 1.0
Generation 81 - Current best internal CV score: 1.0
Generation 82 - Current best internal CV score: 1.0
Generation 83 - Current best internal CV score: 1.0
Generation 84 - Current best internal CV score: 1.0
Generation 85 - Current best internal CV score: 1.0
Generation 86 - Current best internal CV score: 1.0
Generation 87 - Current best internal CV score: 1.0
Generation 88 - Current best internal CV score: 1.0
Generation 89 - Current best internal CV score: 1.0
Generation 90 - Current best internal CV score: 1.0
Generation 91 - Current best internal CV score: 1.0
Generation 92 - Current best internal CV score: 1.0
Generation 93 - Current best internal CV score: 1.0
Generation 94 - Current best internal CV score: 1.0
Generation 95 - Current best internal CV score: 1.0
Generation 96 - Current best internal CV score: 1.0
Generation 97 - Current best internal CV score: 1.0
Generation 98 - Current best internal CV score: 1.0
Generation 99 - Current best internal CV score: 1.0
Generation 100 - Current best internal CV score: 1.0
Generation 101 - Current best internal CV score: 1.0
Generation 102 - Current best internal CV score: 1.0
Generation 103 - Current best internal CV score: 1.0
Generation 104 - Current best internal CV score: 1.0
Generation 105 - Current best internal CV score: 1.0
Generation 106 - Current best internal CV score: 1.0
Generation 107 - Current best internal CV score: 1.0
Generation 108 - Current best internal CV score: 1.0
Generation 109 - Current best internal CV score: 1.0
Generation 110 - Current best internal CV score: 1.0
Generation 111 - Current best internal CV score: 1.0
Generation 112 - Current best internal CV score: 1.0
Generation 113 - Current best internal CV score: 1.0
Generation 114 - Current best internal CV score: 1.0
Generation 115 - Current best internal CV score: 1.0
Generation 116 - Current best internal CV score: 1.0
Generation 117 - Current best internal CV score: 1.0
Generation 118 - Current best internal CV score: 1.0
Generation 119 - Current best internal CV score: 1.0
Generation 120 - Current best internal CV score: 1.0
Generation 121 - Current best internal CV score: 1.0
Generation 122 - Current best internal CV score: 1.0
Generation 123 - Current best internal CV score: 1.0
Generation 124 - Current best internal CV score: 1.0
Generation 125 - Current best internal CV score: 1.0
Generation 126 - Current best internal CV score: 1.0
Generation 127 - Current best internal CV score: 1.0
Generation 128 - Current best internal CV score: 1.0
Generation 129 - Current best internal CV score: 1.0
Generation 130 - Current best internal CV score: 1.0
Generation 131 - Current best internal CV score: 1.0
Generation 132 - Current best internal CV score: 1.0
Generation 133 - Current best internal CV score: 1.0
Generation 134 - Current best internal CV score: 1.0
Generation 135 - Current best internal CV score: 1.0
Generation 136 - Current best internal CV score: 1.0
Generation 137 - Current best internal CV score: 1.0
Generation 138 - Current best internal CV score: 1.0
Generation 139 - Current best internal CV score: 1.0
Generation 140 - Current best internal CV score: 1.0
Generation 141 - Current best internal CV score: 1.0
Generation 142 - Current best internal CV score: 1.0
Generation 143 - Current best internal CV score: 1.0
Generation 144 - Current best internal CV score: 1.0
Generation 145 - Current best internal CV score: 1.0
Generation 146 - Current best internal CV score: 1.0
Generation 147 - Current best internal CV score: 1.0
Generation 148 - Current best internal CV score: 1.0
Generation 149 - Current best internal CV score: 1.0
Generation 150 - Current best internal CV score: 1.0
Generation 151 - Current best internal CV score: 1.0
Generation 152 - Current best internal CV score: 1.0
Generation 153 - Current best internal CV score: 1.0
Generation 154 - Current best internal CV score: 1.0
Generation 155 - Current best internal CV score: 1.0
Generation 156 - Current best internal CV score: 1.0
Generation 157 - Current best internal CV score: 1.0
Generation 158 - Current best internal CV score: 1.0
Generation 159 - Current best internal CV score: 1.0
Generation 160 - Current best internal CV score: 1.0
Generation 161 - Current best internal CV score: 1.0
Generation 162 - Current best internal CV score: 1.0
Generation 163 - Current best internal CV score: 1.0
Generation 164 - Current best internal CV score: 1.0
Generation 165 - Current best internal CV score: 1.0
Generation 166 - Current best internal CV score: 1.0
Generation 167 - Current best internal CV score: 1.0
Generation 168 - Current best internal CV score: 1.0
Generation 169 - Current best internal CV score: 1.0
Generation 170 - Current best internal CV score: 1.0
Generation 171 - Current best internal CV score: 1.0
Generation 172 - Current best internal CV score: 1.0
Generation 173 - Current best internal CV score: 1.0
Generation 174 - Current best internal CV score: 1.0
Generation 175 - Current best internal CV score: 1.0
Generation 176 - Current best internal CV score: 1.0
Generation 177 - Current best internal CV score: 1.0
Generation 178 - Current best internal CV score: 1.0
Generation 179 - Current best internal CV score: 1.0
Generation 180 - Current best internal CV score: 1.0
Generation 181 - Current best internal CV score: 1.0
Generation 182 - Current best internal CV score: 1.0
Generation 183 - Current best internal CV score: 1.0
Generation 184 - Current best internal CV score: 1.0
Generation 185 - Current best internal CV score: 1.0
Generation 186 - Current best internal CV score: 1.0
Generation 187 - Current best internal CV score: 1.0
Generation 188 - Current best internal CV score: 1.0
Generation 189 - Current best internal CV score: 1.0
Generation 190 - Current best internal CV score: 1.0
Generation 191 - Current best internal CV score: 1.0
Generation 192 - Current best internal CV score: 1.0
Generation 193 - Current best internal CV score: 1.0
Generation 194 - Current best internal CV score: 1.0
Generation 195 - Current best internal CV score: 1.0
Generation 196 - Current best internal CV score: 1.0
Generation 197 - Current best internal CV score: 1.0
Generation 198 - Current best internal CV score: 1.0
Generation 199 - Current best internal CV score: 1.0
Generation 200 - Current best internal CV score: 1.0
Generation 201 - Current best internal CV score: 1.0
Generation 202 - Current best internal CV score: 1.0
Generation 203 - Current best internal CV score: 1.0
Generation 204 - Current best internal CV score: 1.0
Generation 205 - Current best internal CV score: 1.0
Generation 206 - Current best internal CV score: 1.0
Generation 207 - Current best internal CV score: 1.0
Generation 208 - Current best internal CV score: 1.0
Generation 209 - Current best internal CV score: 1.0
Generation 210 - Current best internal CV score: 1.0
Generation 211 - Current best internal CV score: 1.0
Generation 212 - Current best internal CV score: 1.0
Generation 213 - Current best internal CV score: 1.0
Generation 214 - Current best internal CV score: 1.0
Generation 215 - Current best internal CV score: 1.0
Generation 216 - Current best internal CV score: 1.0
Generation 217 - Current best internal CV score: 1.0
Generation 218 - Current best internal CV score: 1.0
Generation 219 - Current best internal CV score: 1.0
Generation 220 - Current best internal CV score: 1.0
Generation 221 - Current best internal CV score: 1.0
Generation 222 - Current best internal CV score: 1.0
Generation 223 - Current best internal CV score: 1.0
Generation 224 - Current best internal CV score: 1.0
Generation 225 - Current best internal CV score: 1.0
Generation 226 - Current best internal CV score: 1.0
Generation 227 - Current best internal CV score: 1.0
Generation 228 - Current best internal CV score: 1.0
Generation 229 - Current best internal CV score: 1.0
Generation 230 - Current best internal CV score: 1.0
Generation 231 - Current best internal CV score: 1.0
Generation 232 - Current best internal CV score: 1.0
Generation 233 - Current best internal CV score: 1.0
Generation 234 - Current best internal CV score: 1.0
Generation 235 - Current best internal CV score: 1.0
Generation 236 - Current best internal CV score: 1.0
Generation 237 - Current best internal CV score: 1.0
Generation 238 - Current best internal CV score: 1.0

60.0084268 minutes have elapsed. TPOT will close down.
TPOT closed during evaluation in one generation.
WARNING: TPOT may not provide a good pipeline if TPOT is stopped/interrupted in a early generation.


TPOT closed prematurely. Will use the current best pipeline.

Best pipeline: DecisionTreeClassifier(PCA(input_matrix, iterated_power=4, svd_solver=randomized), criterion=entropy, max_depth=8, min_samples_leaf=11, min_samples_split=11)
1.0
Accuracy: 1.0

Oh what a surprise ;).