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.161270420871972
print(pca.explained_variance_/pca.explained_variance_ratio_) # ได้ [41.02692795 41.02692795]
print(pca.explained_variance_ratio_.sum()) # ได้ 0.8985722151581703
print(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()
ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ