243 lines
71 KiB
Plaintext
243 lines
71 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Now that you have seen a bit about how the PCA library works within scikit learn library and fit it to some hand written digits, we should take a closer look at what exactly PCA gives us back to work with and what these different parts mean. Let's pick up where we left off in the last video. Below I read in the libraries we used before, split off the image from the label, and I plotted the first 30 images in the dataset."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x7f0cf357cd68>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"import pandas as pd\n",
|
|
"import numpy as np\n",
|
|
"from sklearn.decomposition import PCA\n",
|
|
"from sklearn.preprocessing import StandardScaler\n",
|
|
"from sklearn.ensemble import RandomForestClassifier\n",
|
|
"from sklearn.model_selection import train_test_split\n",
|
|
"from sklearn.metrics import confusion_matrix, accuracy_score\n",
|
|
"from helper_functions import show_images, show_images_by_digit, fit_random_forest_classifier2 \n",
|
|
"from helper_functions import fit_random_forest_classifier, do_pca, plot_components\n",
|
|
"\n",
|
|
"import matplotlib.image as mpimg\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"import seaborn as sns\n",
|
|
"\n",
|
|
"%matplotlib inline\n",
|
|
"\n",
|
|
"#read in our dataset\n",
|
|
"train = pd.read_csv('./data/train.csv')\n",
|
|
"train.fillna(0, inplace=True)\n",
|
|
"\n",
|
|
"# save the labels to a Pandas series target\n",
|
|
"y = train['label']\n",
|
|
"# Drop the label feature\n",
|
|
"train.fillna(0, inplace=True)\n",
|
|
"X = train.drop(\"label\",axis=1)\n",
|
|
"\n",
|
|
"show_images(30)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Now let's fit PCA with 15 components, and take a look at a few of the main features that live on the pca object we get back."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"pca, X_pca = do_pca(15, X)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"One of the main features to consider is something called the explained_variance_ratio. I created what's known as a scree_plot to show the explained_variance_ratio for each of the 15 components."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x7f0cf4299ba8>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"def scree_plot(pca):\n",
|
|
" '''\n",
|
|
" Creates a scree plot associated with the principal components \n",
|
|
" \n",
|
|
" INPUT: pca - the result of instantian of PCA in scikit learn\n",
|
|
" \n",
|
|
" OUTPUT:\n",
|
|
" None\n",
|
|
" '''\n",
|
|
" num_components = len(pca.explained_variance_ratio_)\n",
|
|
" ind = np.arange(num_components)\n",
|
|
" vals = pca.explained_variance_ratio_\n",
|
|
" \n",
|
|
" plt.figure(figsize=(10, 6))\n",
|
|
" ax = plt.subplot(111)\n",
|
|
" cumvals = np.cumsum(vals)\n",
|
|
" ax.bar(ind, vals)\n",
|
|
" ax.plot(ind, cumvals)\n",
|
|
" for i in range(num_components):\n",
|
|
" ax.annotate(r\"%s%%\" % ((str(vals[i]*100)[:4])), (ind[i]+0.2, vals[i]), va=\"bottom\", ha=\"center\", fontsize=12)\n",
|
|
" \n",
|
|
" ax.xaxis.set_tick_params(width=0)\n",
|
|
" ax.yaxis.set_tick_params(width=2, length=12)\n",
|
|
" \n",
|
|
" ax.set_xlabel(\"Principal Component\")\n",
|
|
" ax.set_ylabel(\"Variance Explained (%)\")\n",
|
|
" plt.title('Explained Variance Per Principal Component')\n",
|
|
" \n",
|
|
"\n",
|
|
"scree_plot(pca)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Each of the bars represents the amount of variability explained by each component. So you can see the first component explains 5.74% of the variability in the image data. The second explains 4.11% of the variability and so on. Often the number of components is chosen based on the total amount of variability explained by the components. You can see that by using 15 components, we capture almost 35% of the total variability in the images.\n",
|
|
"\n",
|
|
"Let's see if we can get a better idea of what aspects of the image the components might be picking up on. To do this we will work with the components_ attribute of the pca object. Looking at the shape of components shows us that each component gives the weights for each pixel."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"(15, 784)"
|
|
]
|
|
},
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"pca.components_.shape"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"I created a function below to plot the weights of each component in the form of the images. The darker portions of the image show"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x7f0d1c7de390>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"\n",
|
|
"def plot_component(pca, comp):\n",
|
|
" '''\n",
|
|
" Plots an image associated with each component to understand how the weighting \n",
|
|
" of the components \n",
|
|
" INPUT: \n",
|
|
" pca - pca object created from PCA in sklearn\n",
|
|
" comp - int - the component you want to see starting at 0\n",
|
|
" OUTPUT\n",
|
|
" None\n",
|
|
" '''\n",
|
|
" if comp <= len(pca.components_):\n",
|
|
" mat_data = np.asmatrix(pca.components_[comp]).reshape(28,28) #reshape images\n",
|
|
" plt.imshow(mat_data); #plot the data\n",
|
|
" plt.xticks([]) #removes numbered labels on x-axis\n",
|
|
" plt.yticks([]) #removes numbered labels on y-axis \n",
|
|
" else:\n",
|
|
" print('That is not the right input, please read the docstring before continuing.')\n",
|
|
" \n",
|
|
"#Plot the first component\n",
|
|
"plot_component(pca, 0)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Looking at this image, it makes sense that only using two components was able to separate zero better than other digits when looking at this image. The highest weights are associated with pixels that look a lot like a zero.\n",
|
|
"\n",
|
|
"Now, it is your turn!"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.6.3"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|