from sklearn.decomposition import PCA
from sklearn import datasets
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
np.random.seed(33)
# สร้างข้อมูล
X,_  = datasets.make_blobs(2000,n_features=3,centers=5,center_box=(0,14))
X[:,2] *= 1.6
# วาดภาพข้อมูล ๓ มิติก่อนแปลง
plt.figure(figsize=[6,6],dpi=100)
lim = {xyz+'lim': (X[:,i].max()-(X.max()-X.min()),X[:,i].max()) for i,xyz in enumerate('xyz')} # ขอบเขต
ax = plt.axes([0,0,1,1],projection='3d',**lim)
ax.scatter(*X.T,c='#dd44bb',edgecolor='#225511',alpha=0.5)
# สร้างออบเจ็กต์คลาส PCA เพื่อทำการวิเคราะห์องค์ประกอบ
pca = PCA(2) # กำหนดจำนวนมิติที่เหลือเป็น ๒
pca.fit(X) # ป้อนข้อมูลเพื่อให้ทำการวิเคราะห์
Xi = pca.transform(X) # แปลงข้อมูล
# วาดภาพข้อมูลหลังแปลง ซึ่งเป็น ๒ มิติ
plt.figure(dpi=100)
plt.axes(aspect=1)
plt.grid(ls='--',color='#881122')
plt.scatter(*Xi.T,c='#dd44bb',edgecolor='#225511',alpha=0.5)
plt.show()

| components_ | อาเรย์ค่าน้ำหนักขององค์ประกอบต่างๆ | 
| explained_variance_ | ความบ่งบอกความแปรปรวน | 
| explained_variance_ratio_ | อัตราความบ่งบอกความแปรปรวน | 
| singular_values_ | ค่าเอกฐานที่คำนวณมาได้จาก SVD | 
| mean_ | ค่าเฉลี่ยของข้อมูลเดิมในแต่ละมิติ | 
| n_components_ | จำนวนองค์ประกอบหลัก | 
| noise_variance_ | ค่าความแปรปรวนของคลื่นรบกวนภายในข้อมูล | 
print('components_ =\n%s\n'%pca.components_)
print('explained_variance_ = %s\n'%pca.explained_variance_)
print('explained_variance_ratio_ = %s\n'%pca.explained_variance_ratio_)
print('singular_values_ = %s\n'%pca.singular_values_)
print('mean_ = %s\n'%pca.mean_)
print('n_components_ = %s\n'%pca.n_components_)
print('noise_variance_ = %s'%pca.noise_variance_)components_ =
[[-0.0036404   0.56933295  0.82209898]
[ 0.52655336  0.69999514 -0.48244001]]
explained_variance_ = [25.23336373 11.6322938 ]
explained_variance_ratio_ = [0.61504395 0.28352827]
singular_values_ = [224.59183887 152.48919736]
mean_ = [ 3.11679917 10.08830006  8.19599173]
n_components_ = 2
noise_variance_ = 4.161270420871972print(pca.explained_variance_/pca.explained_variance_ratio_) # ได้ [41.02692795 41.02692795]print(pca.explained_variance_ratio_.sum()) # ได้ 0.8985722151581703print(pca.explained_variance_/pca.singular_values_**2) # ได้ [0.00050025 0.00050025](X-pca.mean_).dot(pca.components_.T) # เท่ากับ pca.transform(X)(Xi).dot(pca.components_)+pca.mean_ # เท่ากับ pca.inverse_transform(Xi)plt.figure(figsize=[6,6],dpi=100)
ax = plt.axes([0,0,1,1],projection='3d',**lim)
ax.scatter(*X.T,c='#dd44bb',edgecolor='#225511',alpha=0.5)
X2 = pca.inverse_transform(Xi)
ax.scatter(*X2.T,c='#44bbdd',edgecolor='#552211',alpha=0.5,marker='v')
ax.view_init(25,69)
plt.show()
np.random.seed(55)
X,_  = datasets.make_blobs(2000,n_features=3,centers=5,center_box=(0,14))
plt.figure(figsize=[6,6],dpi=100)
lim = {xyz+'lim': (X[:,i].max()-(X.max()-X.min()),X[:,i].max()) for i,xyz in enumerate('xyz')} # ขอบเขต
ax = plt.axes([0,0,1,1],projection='3d',**lim)
ax.scatter(*X.T,c='#bbdd44',edgecolor='#223366',alpha=0.5)
Xi =  PCA(2).fit_transform(X) # ป้อนข้อมูลเพื่อให้ทำการวิเคราะห์ และแปลงทันที
plt.figure(dpi=100)
plt.axes(aspect=1)
plt.grid(ls=':',color='#663388')
plt.scatter(*Xi.T,c='#bbdd44',edgecolor='#223366',alpha=0.5)
plt.show() 
 
ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ