"""
Scikit-learn-compatible visualizations for model validation.
@author: David Diaz Vico
@license: MIT
"""
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
from sklearn.decomposition import PCA
sns.set(style="white", palette="muted", color_codes=True)
[docs]
def classifier_scatter(X, y, fname, pca_n_components=2, **kwargs):
"""Classifier scatter.
Classifier scatter plot.
Parameters
----------
X: array-like, shape (n_samples, features_shape)
The transformed data.
y: numpy array of shape [n_samples]
Target values.
fname: str or file-like object
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.savefig.html
pca_n_components: integer, default=2
Dimension of the PCA projection of X.
**kwargs: optional savefig named args
Returns
-------
None.
"""
names = list(range(X.shape[1]))
if pca_n_components is not None:
names = list(range(pca_n_components))
X = PCA(n_components=pca_n_components).fit_transform(X)
names.append("class")
data = pd.DataFrame(data=np.append(X, np.reshape(y, (len(y), 1)), axis=1), columns=names)
sns.set()
sns.pairplot(data, hue="class", x_vars=names[:-1], y_vars=names[:-1])
plt.savefig(fname, **kwargs)
[docs]
def regressor_scatter(X, y, preds, fname, **kwargs):
"""Regressor scatter.
Regressor scatter plot.
Parameters
----------
X: array-like, shape (n_samples, features_shape)
The transformed data.
y: numpy array of shape [n_samples]
Target values.
preds: numpy array of shape [n_samples]
Predicted values.
fname: str or file-like object
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.savefig.html
**kwargs: optional savefig named args
Returns
-------
None.
"""
X = PCA(n_components=1).fit_transform(X)
names = ("X", "y", "source")
data_y = np.append(X, np.reshape(y, (len(y), 1)), axis=1)
data_y = np.append(data_y, np.reshape([0] * len(y), (len(y), 1)), axis=1)
data_preds = np.append(X, np.reshape(preds, (len(preds), 1)), axis=1)
data_preds = np.append(data_preds, np.reshape([1] * len(preds), (len(preds), 1)), axis=1)
data = pd.DataFrame(data=np.append(data_y, data_preds, axis=0), columns=names)
sns.set()
sns.lmplot(x="X", y="y", hue="source", data=data)
plt.savefig(fname, **kwargs)
[docs]
def keras_history_plot(history, fname, **kwargs):
"""Keras history plot.
Train loss plotted for each training epoch.
Parameters
----------
history: history object
Keras history object.
fname: str or file-like object
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.savefig.html
**kwargs: optional savefig named args
Returns
-------
None.
"""
plt.figure()
plt.xlabel("Epoch")
plt.ylabel("Loss")
for k, v in history.items():
plt.plot(v, label=k)
plt.legend(loc="best")
plt.savefig(fname, **kwargs)