고래밥 이야기

비지도 학습 _ 1 본문

데이터 분석/R과 Python

비지도 학습 _ 1

Whale_Rice 2021. 10. 27. 02:35

파이썬 머신러닝 완벽 가이드 6,7 장을 공부하면서,,,

 

목차

1. 차원 축소 (Dimension Reduction)

  • PCA(Principal Component Analysis)
  • LDA(Linear Discriminant Analysis)

2. 군집화 (Clustering)

  • K-평균 클러스터링(K-Means Clustering)
  • GMM(Gaussian Mixture Model)
  • 평균점 이동 클러스터링(Mean-Shift Clustering)
  • DBSCAN(DensityBased Spatial Clustering of Applications with Noise

 

- PCA

https://bkshin.tistory.com/entry/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-9-PCA-Principal-Components-Analysis

 

머신러닝 - 9. 차원 축소와 PCA (Principal Components Analysis)

차원 축소와 PCA 차원 축소는 많은 feature로 구성된 다차원 데이터 세트의 차원을 축소해 새로운 차원의 데이터 세트를 생성하는 것입니다. 일반적으로 차원이 증가할수록, 즉 feature가 많아질수록

bkshin.tistory.com

# 데이터 전처리
from sklearn.datasets import load_iris
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

iris = load_iris()
columns = iris.feature_names
iris_DF = pd.DataFrame(iris.data,columns=columns)
iris_DF["target"] = iris.target
# 2차원 시각화
markers=['^','s','o']
plt.subplot(121)
for i, marker in enumerate(markers):
    x_axis_data =iris_DF["petal length (cm)"][iris_DF["target"]==i]
    y_axis_data =iris_DF["petal width (cm)"][iris_DF["target"]==i]
    plt.scatter(x_axis_data,y_axis_data,marker=markers[i])
plt.subplot(122)
for i, marker in enumerate(markers):
    x_axis_data =iris_DF["sepal length (cm)"][iris_DF["target"]==i]
    y_axis_data =iris_DF["sepal width (cm)"][iris_DF["target"]==i]
    plt.scatter(x_axis_data,y_axis_data,marker=markers[i])    
plt.legend(labels=iris.target_names)

# 데이터 scale
from sklearn.preprocessing import StandardScaler
iris_new = StandardScaler().fit_transform(X=iris_DF.loc[:,iris_DF.columns !="target"])
iris_new = pd.DataFrame(iris_new,columns=iris.feature_names)
iris_new["target"] = iris.target
# PCA적용
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
pca.fit(iris_new)
iris_pca = pca.transform(iris_new)
iris_pca = pd.DataFrame(iris_pca,columns=["first_component","second_component"])
iris_pca["target"] = iris.target
# PCA로 분류
markers=['H','+','x']
for i,marker in enumerate(markers):
    x_axis_data = iris_pca["first_component"][iris_pca["target"]==i]
    y_axis_data = iris_pca["second_component"][iris_pca["target"]==i]
    plt.scatter(x_axis_data,y_axis_data,marker=marker)
plt.legend(labels=iris.target_names)

- LDA

선형판별분석(Linear Discriminant Analysis) · ratsgo's blog

 

선형판별분석(Linear Discriminant Analysis) · ratsgo's blog

이번 포스팅에선 선형판별분석(Linear Discriminant Analysis : LDA)에 대해서 살펴보고자 합니다. LDA는 데이터 분포를 학습해 결정경계(Decision boundary)를 만들어 데이터를 분류(classification)하는 모델입니

ratsgo.github.io

# 데이터 전처리
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_iris

iris = load_iris()
iris_scaled = StandardScaler().fit_transform(iris.data)

lda = LinearDiscriminantAnalysis(n_components=2)
iris_lda = lda.fit_transform(X=iris_scaled,y=iris.target)
iris_lda = pd.DataFrame(iris_lda,columns=["first_lda_component","second_lda_component"])
iris_lda["target"] = iris.target
# 그래프 그리기
markers=['H','+','x']
for i,marker in enumerate(markers):
    x_axis_data = iris_lda["first_lda_component"][iris_pca["target"]==i]
    y_axis_data = iris_lda["second_lda_component"][iris_pca["target"]==i]
    plt.scatter(x_axis_data,y_axis_data,marker=marker)
plt.legend(labels=iris.target_names,loc="upper left")

- K-평균 클러스터링(K-Means Clustering)

# 데이터 전처리
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
%matplotlib inline


iris = load_iris()
kmeans = KMeans(n_clusters=3, init='k-means++', max_iter=300, random_state=0).fit(irisDF)
irisDF = pd.DataFrame(data=iris.data, columns=iris.feature_names)
irisDF["target"] = iris.target
irisDF["cluster"] = kmeans.labels_
irisDF[['target','cluster']].groupby(["target","cluster"]).size()

target  cluster
0       0          50
1       2          50
2       1          49
        2           1
dtype: int64
# 괜찮은 결과가 나왔다.

 

- K-평균 클러스터링(K-Means Clustering) 中 실루엣 평가

https://studying-haeung.tistory.com/10

 

[머신러닝] 클러스터링 평가지표 - 실루엣 계수 (1)

실루엣 계수(Silhouette Coefficient) : 각 데이터 포인트와 주위 데이터 포인트들과의 거리 계산을 통해 값을 구하며, 군집 안에 있는 데이터들은 잘 모여있는지, 군집끼리는 서로 잘 구분되는지 클러

studying-haeung.tistory.com

Selecting the number of clusters with silhouette analysis on KMeans clustering — scikit-learn 1.0.1 documentation

 

Selecting the number of clusters with silhouette analysis on KMeans clustering

Silhouette analysis can be used to study the separation distance between the resulting clusters. The silhouette plot displays a measure of how close each point in one cluster is to points in the ne...

scikit-learn.org

 

- 평균점 이동 클러스터링(Mean-Shift Clustering)

# 데이터 전처리
import numpy as np
import pandas as pd
from sklearn.datasets import make_blobs
from sklearn.cluster import MeanShift, estimate_bandwidth

centers = [[2, 2], [-2, -2], [2, -2]]
X, y = make_blobs(n_samples=200, n_features=2, centers=centers, cluster_std=0.8, random_state=0)
bandwidth = estimate_bandwidth(X, quantile=0.2, n_samples=200)
meanshift = MeanShift(bandwidth=bandwidth)
meanshift_labels = meanshift.fit_predict(X=X,y=y)
DF = pd.DataFrame(data=X,columns=["x_axis","y-axis"])
DF["target"] = y
DF["meanshift_labels"] = meanshift_labels
# 그래프로 결과 비교하기
import matplotlib.pyplot as plt

markers = ["+","^","o"]
colors = np.random.rand(3)
plt.figure(1)
for i in range(3):
    x_axis= DF["x_axis"][DF["meanshift_labels"]==i]
    y_axis= DF["y_axis"][DF["meanshift_labels"]==i]
    plt.scatter(x=x_axis,y=y_axis,marker=markers[i],alpha=0.7)
for i in range(3):
    x_axis= DF["x_axis"][DF["target"]==i]
    y_axis= DF["y_axis"][DF["target"]==i]
    plt.scatter(x=x_axis,y=y_axis,marker=markers[i])
 # 실제 결과와 굉장히 유사하다는 것을 알 수 있다..

다음에 나오는 코드는 굉장히 복잡하기에 설명을 붙여가며 다음에 해보겠다,,

'데이터 분석 > R과 Python' 카테고리의 다른 글

PyTorch를 사용한 딥러닝 - 2. Tensor Basics  (0) 2021.11.10
Comments