Iris 데이터를 사용하여 Autoencoder를 사용해 보았습니다.
13085 단어 Autoencoder아이리스Kerasscikit-learn
목적
지난번 Autoencoder를 사용해 직선 회귀가 잘 되었기 때문에, 이번은 “모두 사랑해”iris 데이터를 사용해 시험해 보고 싶습니다
내용
Iris 데이터의 Target마다 별도의 특징량 데이터 프레임을 만들고, 각각을 사용해 Autoencoder를 만들고, 입력과 출력의 차분으로부터 Target(즉 같은 종류의 Iris)의 차이를 식별할 수 있는지 확인
이미지로서는 Autoencoder에 의한 고장 검출을 Iris를 사용해 한다는 것입니다
코드
초기 설정
iris_autoencoder.ipynbimport 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.ipynbdef 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.ipynbfor i in range(len(Xa)):
engine(i)
실행 결과 및 고찰
아래의 히스토그램은 입력 벡터에서 출력 벡터를 뺀 노름에서 계산한 것입니다(요소 오차 거리의 히스토그램). 보면 알 수 있듯이 타겟만을 학습하고 있기 때문에 타겟은 비교적 0에 가까운 값이 되고, 그 이외의 데이터는 거리가 떨어져 있는 것을 알 수 있습니다.
그래서 이 정도 뚜렷한 특징량의 차이가 있으면 Autoencoder를 사용하여 고장 검지를 할 수 있다고 할 수 있습니다.
이 경우에 말하면 다른 종류의 꽃의 특징량이 섞여 있으면 그것을 지적할 수 있다고 말하게 됩니다
타겟은 파랑
타겟은 오렌지
대상은 녹색
Reference
이 문제에 관하여(Iris 데이터를 사용하여 Autoencoder를 사용해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/cessna373/items/5906f221aa55bd68bbd6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Iris 데이터의 Target마다 별도의 특징량 데이터 프레임을 만들고, 각각을 사용해 Autoencoder를 만들고, 입력과 출력의 차분으로부터 Target(즉 같은 종류의 Iris)의 차이를 식별할 수 있는지 확인
이미지로서는 Autoencoder에 의한 고장 검출을 Iris를 사용해 한다는 것입니다
코드
초기 설정
iris_autoencoder.ipynbimport 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.ipynbdef 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.ipynbfor i in range(len(Xa)):
engine(i)
실행 결과 및 고찰
아래의 히스토그램은 입력 벡터에서 출력 벡터를 뺀 노름에서 계산한 것입니다(요소 오차 거리의 히스토그램). 보면 알 수 있듯이 타겟만을 학습하고 있기 때문에 타겟은 비교적 0에 가까운 값이 되고, 그 이외의 데이터는 거리가 떨어져 있는 것을 알 수 있습니다.
그래서 이 정도 뚜렷한 특징량의 차이가 있으면 Autoencoder를 사용하여 고장 검지를 할 수 있다고 할 수 있습니다.
이 경우에 말하면 다른 종류의 꽃의 특징량이 섞여 있으면 그것을 지적할 수 있다고 말하게 됩니다
타겟은 파랑
타겟은 오렌지
대상은 녹색
Reference
이 문제에 관하여(Iris 데이터를 사용하여 Autoencoder를 사용해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/cessna373/items/5906f221aa55bd68bbd6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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]
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()
for i in range(len(Xa)):
engine(i)
아래의 히스토그램은 입력 벡터에서 출력 벡터를 뺀 노름에서 계산한 것입니다(요소 오차 거리의 히스토그램). 보면 알 수 있듯이 타겟만을 학습하고 있기 때문에 타겟은 비교적 0에 가까운 값이 되고, 그 이외의 데이터는 거리가 떨어져 있는 것을 알 수 있습니다.
그래서 이 정도 뚜렷한 특징량의 차이가 있으면 Autoencoder를 사용하여 고장 검지를 할 수 있다고 할 수 있습니다.
이 경우에 말하면 다른 종류의 꽃의 특징량이 섞여 있으면 그것을 지적할 수 있다고 말하게 됩니다
타겟은 파랑
타겟은 오렌지
대상은 녹색
Reference
이 문제에 관하여(Iris 데이터를 사용하여 Autoencoder를 사용해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/cessna373/items/5906f221aa55bd68bbd6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)