고래밥 이야기
비지도 학습 _ 1 본문
파이썬 머신러닝 완벽 가이드 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
머신러닝 - 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
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 |
---|