In [ ]:
각 센서 값들을 기반으로 RUL(잔존수명) 을 도출합니다.¶
In [183]:
import pandas as pd
import numpy as np
from glob import glob
unit_1 = pd.read_csv('FD001_RUL.csv')
%matplotlib inline
sns.set(rc={'figure.figsize':(15,6)})
In [184]:
unit_1.loc[unit_1['RUL'] <= 10, 'LEVEL'] = 'CRITICAL'
unit_1.loc[unit_1['RUL'] > 10, 'LEVEL'] = 'CAUTION'
unit_1.loc[unit_1['RUL'] > 20, 'LEVEL'] = 'NEED_CARE'
unit_1.loc[unit_1['RUL'] > 30, 'LEVEL'] = 'HEALTHY'
In [185]:
import numpy as np
slicing_constant = 10000
cols = list(unit_1.columns)
features = cols[3:-2]
label = 'LEVEL'
train = unit_1[:slicing_constant]
test = unit_1[slicing_constant:]
In [186]:
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
tt_list = [train, test]
for n, d_set in enumerate(tt_list):
target = pd.DataFrame(scaler.fit_transform(tt_list[n][features]), columns=features)
desc = target.describe()
null_cols = []
for cols in desc.columns:
if desc[cols][2] < 0.01:
null_cols.append(cols)
clean = target.drop(columns=null_cols)
clean[clean==np.inf]=np.nan
clean = clean.dropna()
tt_list[n] = clean
X_train, X_test = tt_list[0], tt_list[1]
y_train, y_test = train[label], test[label]
In [187]:
from sklearn.decomposition import PCA
import pandas as pp
pca = PCA(n_components=2)
principalComponents = pca.fit_transform(X_train)
principalDf = pp.DataFrame(principalComponents
, columns = ['principal component 1', 'principal component 2'])
finalDf = pp.concat([principalDf, y_train], axis=1)
import matplotlib.pyplot as plt
import seaborn as sns
ax = sns.scatterplot(x = 'principal component 1',
y = 'principal component 2',
hue = 'LEVEL',
data = finalDf,
palette ='Spectral')
In [206]:
from sklearn.cross_decomposition import PLSRegression
principalComponents, _ = PLSRegression(n_components=2).fit_transform(train[X_train.columns], train['RUL'])
principalDf = pp.DataFrame(principalComponents
, columns = ['PLS component 1', 'PLS component 2'])
finalDf = pp.concat([principalDf, train['RUL']], axis=1)
import matplotlib.pyplot as plt
import seaborn as sns
cutter = []
for i in range(3):
cutter.append(10 ** i)
i = i + 1
finalDf['rul_range'] = pd.cut(finalDf['RUL'], cutter)
ax = sns.scatterplot(x = 'PLS component 1',
y = 'PLS component 2',
hue = 'rul_range',
data = finalDf,
palette ='Spectral')
In [189]:
from sklearn.decomposition import NMF
NMFComponents = NMF(n_components=2).fit_transform(train[X_train.columns])
NMFDf = pp.DataFrame(NMFComponents
, columns = ['NMF component 1', 'NMF component 2'])
finalDf = pp.concat([NMFDf, y_train], axis=1)
import matplotlib.pyplot as plt
import seaborn as sns
ax = sns.scatterplot(x = 'NMF component 1',
y = 'NMF component 2',
hue = 'LEVEL',
data = finalDf,
palette ='Spectral')
In [190]:
from sklearn.decomposition import KernelPCA
KPCAComponents = KernelPCA(n_components=2, kernel='poly', degree=3).fit_transform(train[X_train.columns])
KPCADf = pp.DataFrame(KPCAComponents
, columns = ['KPCA component 1', 'KPCA component 2'])
finalDf = pp.concat([KPCADf, y_train], axis=1)
import matplotlib.pyplot as plt
import seaborn as sns
ax = sns.scatterplot(x = 'KPCA component 1',
y = 'KPCA component 2',
hue = 'LEVEL',
data = finalDf,
palette ='Spectral')
In [191]:
corr_heatmap = train[list(X_train.columns) + ['RUL']].corr().sort_values(by='RUL')
sns.heatmap(corr_heatmap)
Out[191]:
In [208]:
from sklearn.cross_decomposition import PLSRegression
corr = corr_heatmap['RUL'][:-1]
corr = pd.DataFrame(corr)
corr.columns=['corr_coeff']
corr.reset_index()
pca_coeff = pd.DataFrame(pca.components_[0])
pca_coeff.index=X_train.columns
pca_coeff.columns=['PCA_coeff']
pca_coeff.reset_index()
pls2 = PLSRegression(n_components=2)
pls2.fit(train[X_train.columns], train['RUL'])
pls_coeff = pd.DataFrame(pls2.coef_)
pls_coeff.index=X_train.columns
pls_coeff.columns=['pls_coeff']
pls_coeff.reset_index()
coeff_merged = pd.concat([corr, pca_coeff, pls_coeff], axis=1, sort=False)
for col in coeff_merged.columns:
coeff_merged[col] = coeff_merged[col] / np.std(coeff_merged[col])
coeff_merged[col] = coeff_merged[col] - np.min(coeff_merged[col])
coeff_merged[col] = (((coeff_merged[col] / np.max(coeff_merged[col])) * 2) - 1)
In [209]:
sns.lineplot(data=coeff_merged)
Out[209]:
In [ ]:
'[중급] 가볍게 이것저것' 카테고리의 다른 글
고객 장바구니 분석 level_2 (0) | 2019.11.10 |
---|---|
고객 장바구니 분석 level_1 (0) | 2019.11.08 |
신용카드 거래내역 기반 고객 마케팅 적용기법 (0) | 2019.11.06 |
소비자물가지수 정보를 선형회귀분석과 경사하강법으로 알아보기 (0) | 2019.10.16 |
알고리즘 문제풀이_1 (0) | 2019.10.15 |