Skip to content

Instantly share code, notes, and snippets.

@XavierTolza
Created May 21, 2018 10:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save XavierTolza/a22c5d392782ec2a1e4b8abffba5684d to your computer and use it in GitHub Desktop.
Save XavierTolza/a22c5d392782ec2a1e4b8abffba5684d to your computer and use it in GitHub Desktop.
from sklearn import datasets
from sklearn.decomposition import PCA
from sklearn.preprocessing import scale
from pandas import DataFrame
iris = datasets.load_iris()
iris = data1 = DataFrame(data= np.c_[iris['data'], iris['target']],
columns= iris['feature_names'] + ['class'])
def plot_pca(data,classes, classes_label=None):
fig, (axe_2d,axe_info) = plt.subplots(1,2)
data_scaled = scale(data)
classes_unique = np.unique(classes)
if classes_label is None:
classes_label = ["Class %i" % i for i in classes_unique]
n_axis = np.shape(data)[1]
pca = PCA()
x_reduced = pca.fit_transform(data_scaled)
var = pca.explained_variance_ratio_
cumul_prop = np.cumsum(var)
# Plot 2D
for class_value, class_label in zip(classes_unique,classes_label):
selector = classes==class_value
axe_2d.scatter(x_reduced[selector,0],x_reduced[selector,1], label=class_label)
axe_2d.set_title("2D plot")
axe_2d.set_xlabel("Component 1")
axe_2d.set_xlabel("Component 2")
axe_2d.legend()
# Plot bar
axe_info.bar(range(n_axis),cumul_prop)
axe_info.set_title("Components cumulative proportion")
axe_info.set_xlabel("Components")
axe_info.set_xlabel("Cumulative proportion")
for axe in (axe_2d, axe_info):
axe.grid()
plot_pca(iris.values[:,:-1],iris.values[:,-1])
plt.show()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment