主成分分析(PCA)是一種常用於減少大數據集維數的降維方法,把大變量集轉換為仍包含大變量集中大部分信息的較小變量集。
減少數據集的變量數量,自然是以犧牲精度為代價的,降維的好處是以略低的精度換取簡便。因為較小的數據集更易於探索和可視化,並且使機器學習算法更容易和更快地分析數據,而不需處理無關變量。
總而言之,主成分分析(PCA)的概念很簡單——減少數據集的變量數量,同時保留盡可能多的信息。
使用scikit-learn,可以很容易地對數據進行主成分分析:
# 創建一個隨機的PCA模型,該模型包含兩個組件 randomized_pca = PCA(n_components=2, svd_solver='randomized') # 擬合數據並將其轉換為模型 reduced_data_rpca = randomized_pca.fit_transform(digits.data) # 創建一個常規的PCA模型 pca = PCA(n_components=2) # 擬合數據並將其轉換為模型 reduced_data_pca = pca.fit_transform(digits.data) # 檢查形狀 reduced_data_pca.shape # 打印數據 print(reduced_data_rpca) print(reduced_data_pca)
輸出
[[ -1.25946586 21.27488217] [ 7.95761214 -20.76870381] [ 6.99192224 -9.95598251] ... [ 10.80128338 -6.96025076] [ -4.87209834 12.42395157] [ -0.34439091 6.36555458]] [[ -1.2594653 21.27488157] [ 7.95761471 -20.76871125] [ 6.99191791 -9.95597343] ... [ 10.80128002 -6.96024527] [ -4.87209081 12.42395739] [ -0.34439546 6.36556369]]
隨機的PCA模型在維數較多時性能更好。可以比較常規PCA模型與隨機PCA模型的結果,看看有什么不同。
告訴模型保留兩個組件,是為了確保有二維數據可用來繪圖。
現在可以繪制一個散點圖來可視化數據:
colors = ['black', 'blue', 'purple', 'yellow', 'white', 'red', 'lime', 'cyan', 'orange', 'gray'] # 根據主成分分析結果繪制散點圖 for i in range(len(colors)): x = reduced_data_rpca[:, 0][digits.target == i] y = reduced_data_rpca[:, 1][digits.target == i] plt.scatter(x, y, c=colors[i]) # 設置圖例,0-9用不同顏色表示 plt.legend(digits.target_names, bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.) # 設置坐標標簽 plt.xlabel('First Principal Component') plt.ylabel('Second Principal Component') # 設置標題 plt.title("PCA Scatter Plot") # 顯示圖形 plt.show()
顯示: