๐ PCA
๐ปPCA ๊ฐ๋ ์๊ธฐ
→ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์์ ์ถ์ ๊ธฐ๋ฒ ์ค ํ๋, ์ ๋ฐ์ดํฐ์ ๋ถํฌ๋ฅผ ์ต๋ํ ๋ณด์กดํ๋ฉด์ ๊ณ ์ฐจ์ ๊ณต๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฐจ์ ๊ณต๊ฐ์ผ๋ก ๋ณํ→ ๊ธฐ์กด์ ๋ณ์๋ฅผ ์กฐํฉ, ์ฃผ์ฑ๋ถ์ ๋ง๋ค์ด ๋ธ๋ค.
๐ป๋ฐ์ดํฐ ์ ์ผ๋ก ์งํ ํด๋ณด๊ธฐ
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
iris_pd = pd.DataFrame(iris.data, columns=iris.feature_names)
iris_pd['species'] = iris.target
iris_pd.head(6)
sns.pairplot(iris_pd, hue='species', height=3,
x_vars=['sepal length (cm)', 'petal width (cm)'],
y_vars=['petal length (cm)', 'sepal width (cm)']);
๐ปStandardScaler ํ์ฉ
from sklearn.preprocessing import StandardScaler
iris_ss = StandardScaler().fit_transform(iris.data)
iris_ss[:3]
>>>>
array([[-0.90068117, 1.01900435, -1.34022653, -1.3154443 ],
[-1.14301691, -0.13197948, -1.34022653, -1.3154443 ],
[-1.38535265, 0.32841405, -1.39706395, -1.3154443 ]])
๐ปPCA ์ ์ฉ
→ Parameter : n_components (๋ณ์์ ๊ฐ์)
→ pca.fit
from sklearn.decomposition import PCA
# pca ๊ฒฐ๊ณผ ๋ฐํ ํจ์ ์ง์
# StandardScaler ์ ์ฉ๋ ๋ฐ์ดํฐ์
์ n_components ๊ฐ ๋์
# pca ๋ณ์ ์ง์
# pca ํจ์์ ๋ฐ์ดํฐ ์
์ fit
# pca ๊ฒฐ๊ณผ return
def get_pca_data(ss_data, n_components=2):
pca = PCA(n_components=n_components)
pca.fit(ss_data)
return pca.transform(ss_data), pca
iris_pca, pca = get_pca_data(iris_ss, 2)
iris_pca.shape
>>>>
(150, 2)
๐ปPCA ์ ์ฉ ๋ ๋ฐ์ดํฐ๋ฅผ DataFrame ํ
→ ํ์ธ ํด๋ณด๋ฉด, 4๊ฐ์๋ ๊ธฐ์กด์ ๋ณ์์์ 2๊ฐ์ ๋ณ์๋ก ์ถ์ ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค
def get_pd_from_pca(pca_data, cols=['PC1', 'PC2']):
return pd.DataFrame(pca_data, columns=cols)
iris_pd_pca = get_pd_from_pca(iris_pca)
iris_pd_pca['species'] = iris.target
iris_pd_pca.head()
๐ป๊ฒฐ๊ณผ ๊ฐ ํ์ธ 1
→ ์๋ณธ ๋ฐ์ดํฐ์ ๋นํด์ ์ฝ 94%์ ๋น์ค์ ์ฐจ์งํ๋ค→ ์ฐจ์์ ์ถ์ํ๋ฉด์ ์ฝ ์๋ณธ์ ๋นํด 6%๊ฐ ์ค์๋ค๋ ๊ฒ
pca.explained_variance_ratio_
>>>>
array([0.72962445, 0.22850762])
๐ป๊ฒฐ๊ณผ ๊ฐ ํ์ธ 2
→ RandomForest ์ ์ฉํด๋ณด๊ธฐ→ ์๋ณธ ๋ฐ์ดํฐ์ PCA๋ฅผ ์ ์ฉํ ๋ฐ์ดํฐ์ ์ฐจ์ด๊ฐ 0.06์ ์ ๋ ์ฐจ์ด๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
def rf_scores(X, y, cv=5):
rf = RandomForestClassifier(random_state=13, n_estimators=100)
score_rf = cross_val_score(rf, X, y, scoring='accuracy', cv=cv)
print('Score : ', np.mean(score_rf))
rf_scores(iris_ss, iris.target)
>>>>
Score : 0.96
pca_X = iris_pd_pca[['PC1', 'PC2']]
pca_X
rf_scores(pca_X, iris.target)
>>>>
Score : 0.9066666666666666
'Study_note(zb_data) > Machine Learning' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํฐ๋๋ ธํธ (HAR Data_PCA) (0) | 2023.10.06 |
---|---|
์คํฐ๋๋ ธํธ (TF-IDF ํ์ฉ) (0) | 2023.10.06 |
์คํฐ๋๋ ธํธ (๋ฌธ์ฅ์ ์ ์ฌ๋ vectorize ํ์ฉํ๊ธฐ) (0) | 2023.10.06 |
์คํฐ๋๋ ธํธ (๋์ด๋ธ ๋ฒ ์ด์ฆ ๋ถ๋ฅ) (1) | 2023.10.04 |
์คํฐ๋๋ ธํธ (๋ฒ๋ น ๊ด๋ จ ๋ถ์) (1) | 2023.10.04 |