#! /usr/bin/env python3 # def digits_visualize_pca ( ): #*****************************************************************************80 # ## digits_visualize_pca() uses PCA to visualize digit images. # # Licensing: # # This code is distributed under the MIT license. # # Modified: # # 22 September 2023 # # Author: # # Andreas Mueller, Sarah Guido. # This version by John Burkardt. # # Reference: # # Andreas Mueller, Sarah Guido, # Introduction to Machine Learning with Python, # OReilly, 2017, # ISBN: 978-1-449-36941-5 # from sklearn.datasets import load_digits from sklearn.decomposition import PCA import matplotlib.pyplot as plt import mglearn import numpy as np import platform import sklearn print ( '' ) print ( 'digits_visualize_pca():' ) print ( ' Python version: ' + platform.python_version ( ) ) print ( ' scikit-learn version: '+ sklearn.__version__ ) print ( ' Work with data from the digits dataset.' ) print ( ' Use principal component analysis to visualize differences.' ) # # Generate the dataset. # print ( '' ) print ( ' Retrieve the digits dataset:' ) digits = load_digits ( ) # # Display the data. # fig, axes = plt.subplots ( 2, 5, figsize = ( 10, 5 ), subplot_kw = { 'xticks':(), 'yticks':() } ) for ax, img in zip ( axes.ravel(), digits.images ): ax.imshow ( img ) filename = 'digits_data.png' plt.savefig ( filename ) print ( ' Graphics saved as "' + filename + '"' ) # # Create a PCA model of the data. # pca = PCA ( n_components = 2 ) pca.fit ( digits.data ) # # Project the digits data into the two-component PCA basis. # digits_pca = pca.transform ( digits.data ) # # Define colors for a plot. # colors = [ '#476A2A', '#785188', '#BD3430', '#4A2D4E', '#875525', '#A83683', '#4E655E', '#853541', '#3A3120', '#535D8E' ] # # Plot. # plt.figure ( figsize = ( 10, 10 ) ) plt.xlim ( digits_pca[:,0].min(), digits_pca[:,0].max() ) plt.ylim ( digits_pca[:,1].min(), digits_pca[:,1].max() ) for i in range ( len ( digits.data ) ): plt.text ( digits_pca[i,0], digits_pca[i,1], str ( digits.target[i] ), color = colors[digits.target[i] ], fontdict = { 'weight': 'bold', 'size' : 9 } ) plt.xlabel ( 'First principal component' ) plt.ylabel ( 'Second principal component' ) filename = 'digits_pca.png' plt.savefig ( filename ) print ( ' Graphics saved as "' + filename + '"' ) # # Terminate. # print ( '' ) print ( 'digits_visualize_pca():' ) print ( ' Normal end of execution.' ) return def timestamp ( ): #*****************************************************************************80 # ## timestamp() prints the date as a timestamp. # # Licensing: # # This code is distributed under the MIT license. # # Modified: # # 21 August 2019 # # Author: # # John Burkardt # import time t = time.time ( ) print ( time.ctime ( t ) ) return if ( __name__ == '__main__' ): timestamp ( ) digits_visualize_pca ( ) timestamp ( )