Iris 데이터를 사용하여 Autoencoder를 사용해 보았습니다.

목적



지난번 Autoencoder를 사용해 직선 회귀가 잘 되었기 때문에, 이번은 “모두 사랑해”iris 데이터를 사용해 시험해 보고 싶습니다

내용



Iris 데이터의 Target마다 별도의 특징량 데이터 프레임을 만들고, 각각을 사용해 Autoencoder를 만들고, 입력과 출력의 차분으로부터 Target(즉 같은 종류의 Iris)의 차이를 식별할 수 있는지 확인
이미지로서는 Autoencoder에 의한 고장 검출을 Iris를 사용해 한다는 것입니다

코드



초기 설정

iris_autoencoder.ipynb
import seaborn as sns

from sklearn.datasets import load_iris
from keras.models import Sequential
from keras.layers import Dense
import pandas as pd
import numpy as np

iris=load_iris()

X=pd.DataFrame(iris["data"])
y=iris["target"]
Xa={}
Xa[0]=X.loc[y==0]
Xa[1]=X.loc[y==1]
Xa[2]=X.loc[y==2]

모델 정의 및 시각화 함수

iris_autoencoder.ipynb
def engine(j):
    encode_dim=2
    hidden_dim=50
    model=Sequential()
    model.add(Dense(hidden_dim,input_dim=X.shape[1]))
    model.add(Dense(encode_dim))
    model.add(Dense(hidden_dim))
    model.add(Dense(X.shape[1]))
    model.summary()

    model.compile(optimizer="adam",loss="mean_squared_error")

    model.fit(Xa[j],Xa[j],epochs=500,
              batch_size=150,verbose=0)

    import matplotlib.pyplot as plt
    for label in range(3):
        plt.scatter(Xa[label].iloc[:,0],Xa[label].iloc[:,1],label=label)
    pred=pd.DataFrame(model.predict(X))
    plt.scatter(pred.iloc[:,0],pred.iloc[:,1])
    plt.legend()
    plt.show()
    delta=pred-X
    for label in range(3):
        delta1=delta.loc[y==label]
        plt.scatter(delta1.iloc[:,0],delta1.iloc[:,1],label=label)
    plt.legend()
    plt.vlines([0],ymax=2,ymin=-2)
    plt.hlines([0],xmax=2,xmin=-2)
    plt.savefig("fig_1_"+str(j)+".png")
    plt.show()

    norm=[]
    for i in range(len(X)):
        norm.append(np.linalg.norm(delta.iloc[i,:]))
    norm=pd.DataFrame(norm)

    for i in range(3):
        normd=norm.loc[y==i]
        sns.distplot(normd)
    plt.savefig("fig_2_"+str(j)+".png")
    plt.show()

실행 부분

iris_autoencoder.ipynb
for i in range(len(Xa)):
    engine(i)

실행 결과 및 고찰



아래의 히스토그램은 입력 벡터에서 출력 벡터를 뺀 노름에서 계산한 것입니다(요소 오차 거리의 히스토그램). 보면 알 수 있듯이 타겟만을 학습하고 있기 때문에 타겟은 비교적 0에 가까운 값이 되고, 그 이외의 데이터는 거리가 떨어져 있는 것을 알 수 있습니다.
그래서 이 정도 뚜렷한 특징량의 차이가 있으면 Autoencoder를 사용하여 고장 검지를 할 수 있다고 할 수 있습니다.
이 경우에 말하면 다른 종류의 꽃의 특징량이 섞여 있으면 그것을 지적할 수 있다고 말하게 됩니다


타겟은 파랑

타겟은 오렌지


대상은 녹색

좋은 웹페이지 즐겨찾기