# PCA explained by Elon Musk

If you clicked on this article, odds are you are either fascinated about machine learning algorithms or like me you are also a big fan of Elon Musk. Either way, I think you are going to enjoy reading this article. As promised you are going to get to see Elon explain PCA. Now like almost everything else Elon says which might sound cryptic or confusing at first, once you understand the basics and first principles of what he’s referring to, it always becomes clearer. So before we get to the part where Elon explains it. Let’s get the basics of Pca down first.

# What is PCA?

Principal Component Analysis, or PCA, is a dimensionality-reduction method that is often used to reduce the dimensionality of large data sets, by transforming a large set of variables into a smaller one that still contains most of the information in the large set. Reducing the number of variables of a data set naturally comes at the expense of accuracy, but the trick in dimensionality reduction is to trade a little accuracy for simplicity. Because smaller data sets are easier to explore and visualize and make analyzing data much easier and faster for machine learning algorithms without extraneous variables to process.
Principal Component Analysis reduces data by geometrically projecting it onto lower dimensions which in turn are called Principal Components(PC). This method’s goal is to find the best summary of our data by using the least amount of principal components by choosing our principal components we minimise our distance between the original data and its projected values on the principal components. As a result of minimising the distance we maximise the variance of the projected points, we similarly do this for all other principal components, while doing so our principal component should not correlate with previous components. By being uncorrelated we ensure that the number of principal components is equal to the number of variables or features of our dataset whichever is smaller.

So to sum up, the idea of PCA is simple — reduce the number of variables of a data set, while preserving as much information as possible.

# WARNING: Maths and Code ahead

Now if you are not comfortable with the maths or the code aspect yet, it’s fine to skip to this part where it’s a more high level of what PCA does.

An Example

Now let’s say that you want to predict what the gross domestic product (GDP) of the United States will be for 2017. You have lots of information available: the U.S. GDP for the first quarter of 2017, the U.S. GDP for the entirety of 2016, 2015, and so on. You have any publicly available economic indicator, like the unemployment rate, inflation rate, and so on. You have U.S. Census data from 2010 estimating how many Americans work in each industry and American Community Survey data updating those estimates in between each census. You know how many members of the House and Senate belong to each political party. You could gather stock price data, the number of IPOs occurring in a year, and how many CEOs seem to be mounting a bid for public office. Despite being an overwhelming number of variables to consider, this just scratches the surface.

The point is you have a lot of variables to consider.

You might ask the question, “How do I take all of the variables I’ve collected and focus on only a few of them?” In technical terms, you want to “reduce the dimension of your feature space.” By reducing the dimension of your feature space, you have fewer relationships between variables to consider and you are less likely to overfit your model. (Note: This doesn’t immediately mean that overfitting, etc. are no longer concerns — but we’re moving in the right direction!)

Somewhat unsurprisingly, reducing the dimension of the feature space is called “dimensionality reduction.” There are many ways to achieve dimensionality reduction, but most of these techniques fall into one of two classes:

• Feature Elimination
• Feature Extraction

Feature elimination is what it sounds like: we reduce the feature space by eliminating features. In the GDP example above, instead of considering every single variable, we might drop all variables except the three we think will best predict what the U.S.’s gross domestic product will look like. Advantages of feature elimination methods include simplicity and maintaining the interpretability of your variables.

As a disadvantage, though, you gain no information from those variables you’ve dropped. If we only use last year’s GDP, the proportion of the population in manufacturing jobs per the most recent American Community Survey numbers, and the unemployment rate to predict this year’s GDP, we’re missing out on whatever the dropped variables could contribute to our model. By eliminating features, we’ve also eliminated any benefits those dropped variables would bring.

Feature extraction, however, doesn’t run into this problem. Say we have ten independent variables. In feature extraction, we create ten “new” independent variables, where each “new” independent variable is a combination of each of the ten “old” independent variables. However, we create these new independent variables in a specific way and order these new variables by how well they predict our dependent variable.

You might say, “Where does the dimensionality reduction come into play?” Well, we keep as many of the new independent variables as we want, but we drop the “least important ones.” Because we ordered the new variables by how well they predict our dependent variable, we know which variable is the most important and least important. But — and here’s the kicker — because these new independent variables are combinations of our old ones, we’re still keeping the most valuable parts of our old variables, even when we drop one or more of these “new” variables!

Principal component analysis is a technique for feature extraction — so it combines our input variables in a specific way, then we can drop the “least important” variables while still retaining the most valuable parts of all of the variables! As an added benefit, each of the “new” variables after PCA are independent of one another. This is a benefit because the assumptions of a linear model require our independent variables to be independent of one another. If we decide to fit a linear regression model with these “new” variables (see “principal component regression” below), this assumption will necessarily be satisfied.

Let’s take a look at the mathematical formulation of this process:

To decrease the dimensionality of our data from n to k with k≤n, we sort our list of axes in order of decreasing dispersion and take the top-kk of them.

We begin by computing the dispersion and the covariance of the initial features. This is usually done with the covariance matrix. According to the covariance definition, the covariance of two features is computed as follows:

cov(Xi,Xj)=E[(Xi−μi)(Xj−μj)]=E[XiXj]−μiμj

where μiμi is the expected value of the ith feature. It is worth noting that the covariance is symmetric, and the covariance of a vector with itself is equal to its dispersion.

Therefore the covariance matrix is symmetric with the dispersion of the corresponding features on the diagonal. Non-diagonal values are the covariances of the corresponding pair of features. In terms of matrices where X is the matrix of observations, the covariance matrix is as follows:

Quick recap: matrices, as linear operators, have eigenvalues and eigenvectors. They are very convenient because they describe parts of our space that do not rotate and only stretch when we apply linear operators on them; eigenvectors remain in the same direction but are stretched by a corresponding eigenvalue. Formally, a matrix MM with eigenvector wiwi and eigenvalue λi satisfy this equation: Mwi=λiwi.

The covariance matrix for a sample X can be written as a product of XTX . According to the Rayleigh quotient, the maximum variation of our sample lies along the eigenvector of this matrix and is consistent with the maximum eigenvalue. Therefore, the principal components we aim to retain from the data are just the eigenvectors corresponding to the top-k largest eigenvalues of the matrix.

The next steps are easier to digest. We multiply the matrix of our data X by these components to get the projection of our data onto the orthogonal basis of the chosen components. If the number of components was smaller than the initial space dimensionality, remember that we will lose some information upon applying this transformation.

Let’s see an example of this in code.

`import numpy as npimport matplotlib.pyplot as pltimport seaborn as sns; sns.set(style='white')%matplotlib inline%config InlineBackend.figure_format = 'retina'from sklearn import decompositionfrom sklearn import datasetsfrom mpl_toolkits.mplot3d import Axes3D# Loading the datasetiris = datasets.load_iris()X = iris.datay = iris.target# Let's create a beautiful 3d-plotfig = plt.figure(1, figsize=(6, 5))plt.clf()ax = Axes3D(fig, rect=[0, 0, .95, 1], elev=48, azim=134)plt.cla()for name, label in [('Setosa', 0), ('Versicolour', 1), ('Virginica', 2)]:    ax.text3D(X[y == label, 0].mean(),              X[y == label, 1].mean() + 1.5,              X[y == label, 2].mean(), name,              horizontalalignment='center',              bbox=dict(alpha=.5, edgecolor='w', facecolor='w'))# Change the order of labels, so that they matchy_clr = np.choose(y, [1, 2, 0]).astype(np.float)ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=y_clr,            cmap=plt.cm.nipy_spectral)ax.w_xaxis.set_ticklabels([])ax.w_yaxis.set_ticklabels([])ax.w_zaxis.set_ticklabels([]);`

Now let’s see how PCA will improve the results of a simple model that is not able to correctly fit all of the training data

`from sklearn.tree import DecisionTreeClassifierfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import accuracy_score, roc_auc_score# Train, test splitsX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.3,stratify=y,random_state=42)# Decision trees with depth = 2clf = DecisionTreeClassifier(max_depth=2, random_state=42)clf.fit(X_train, y_train)preds = clf.predict_proba(X_test)print('Accuracy: {:.5f}'.format(accuracy_score(y_test,                                                 preds.argmax(axis=1))))Accuracy: 0.88889`

Let’s try this again, but, this time, let’s reduce the dimensionality to 2 dimensions:

`# Using PCA from sklearn PCApca = decomposition.PCA(n_components=2)X_centered = X - X.mean(axis=0)pca.fit(X_centered)X_pca = pca.transform(X_centered)# Plotting the results of PCAplt.plot(X_pca[y == 0, 0], X_pca[y == 0, 1], 'bo', label='Setosa')plt.plot(X_pca[y == 1, 0], X_pca[y == 1, 1], 'go', label='Versicolour')plt.plot(X_pca[y == 2, 0], X_pca[y == 2, 1], 'ro', label='Virginica')plt.legend(loc=0);`
`# Test-train split and apply PCAX_train, X_test, y_train, y_test = train_test_split(X_pca, y, test_size=.3,                                                     stratify=y,                                                     random_state=42)clf = DecisionTreeClassifier(max_depth=2, random_state=42)clf.fit(X_train, y_train)preds = clf.predict_proba(X_test)print('Accuracy: {:.5f}'.format(accuracy_score(y_test,                                                 preds.argmax(axis=1))))Accuracy: 0.91111for i, component in enumerate(pca.components_):    print("{} component: {}% of initial variance".format(i + 1,           round(100 * pca.explained_variance_ratio_[i], 2)))    print(" + ".join("%.3f x %s" % (value, name)                     for value, name in zip(component,                                            iris.feature_names)))`

The Exciting part

Now that you are up to speed on what PCA is, let’s talk about how the mind performs PCA or at least a variation of it. Every day our senses take in so much information. Like if we think of our minds as a processing unit, the amount of information we take in every day would be too overwhelming to comprehend if we didn’t have a sort of filter in which to process it. This is why I am convinced the brain performs a sort of dimension reduction technique to enable us to process what it deems useful to us which in turn is a small fraction of the information our senses receive which in a way seems like what the principal component algorithm does.

Time for Elon to Explain in more detail

In the video, Elon explains in this video how artificial neural networks use compression algorithms like PCA to reduce the dimensions of datasets to apply the resulting dataset on a machine learning algorithm which reduces computational time while training the algorithm. He uses as an analogy the process our mind uses in reducing reality to a vector space or a form that is relevant to us for us to perform day-to-day decisions without being bogged down by the other things our senses encounter every day.

AI/ML

Trending AI/ML Article Identified & Digested via Granola by Ramsey Elbasheer; a Machine-Driven RSS Bot