Skip to content
Snippets Groups Projects
PCA.py 1.29 KiB
Newer Older
  • Learn to ignore specific revisions
  • s200431's avatar
    s200431 committed
    from sklearn import decomposition
    from sklearn.preprocessing import StandardScaler
    
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D
    import numpy as np
    
    
    def PCA(X, y, n_components):
        fig = plt.figure(1, figsize=(4, 3))
        plt.clf()
    
        ax = fig.add_subplot(111, projection="3d", elev=48, azim=134)
        ax.set_position([0, 0, 0.95, 1])
    
        # Standardize the data
        scaler = StandardScaler()
        X = scaler.fit_transform(X)
    
        pca = decomposition.PCA(n_components=n_components)
        pca.fit(X)
        X = pca.transform(X)
    
        for name, label in [("CTRL", 0), ("PTSD", 1)]:
            ax.text3D(
                X[y == label, 0].mean(),
                X[y == label, 1].mean(),
                X[y == label, 2].mean(),
                name,
                horizontalalignment="center",
                bbox=dict(alpha=0.5, edgecolor="w", facecolor="w"),
            )
    
        ax.scatter(
            X[:, 0],
            X[:, 1],
            X[:, 2],
            c=y,
            cmap=plt.cm.nipy_spectral,
            edgecolor="k",
        )
    
        ax.xaxis.set_ticklabels([])
        ax.yaxis.set_ticklabels([])
        ax.zaxis.set_ticklabels([])
    
        plt.show()
    
        # Save plot 
        Feature_savepath = "./Figures/"
        plt.savefig(Feature_savepath + "PCA_3D.png", dpi=300)
    
        return "PCA was complete without errors - check the plot in your chosen path"