음성 인식 예
“test data에 대해서도 1hat incoding을 해줍니다. 그다음에 이 부분이 저희가 모델을 만드는 부분이에요. 그래서 모델을 만드는데 이 Sequential이라는 KERAS에 있는 함수를 사용을 할 거고요 그래서 첫 번째 줄에 model sequnha을 하면 모델에 이런 sequnh한 model을 넣겠다. 근데 지금은 비어 있는 상태가 되고 여기서는 그냥 모델을 sqn셜한 모델로 생성을 한 거고요 여기에 저희가 implayer hidnaye 아웃플레이어를 add를 해주게 되면 됩니다. 그래서 첫 번째로 저희가 해주는 걸 보면 model add에서 여기서 inforter dense라는 layer를 넣어요.”
import pandas as pd
import numpy as np
라이브러리 불러오는 과정
# 데이터 생성하기, 결과를 보기 용이하도록 sort
df = pd.DataFrame({'uniform': np.sort(np.random.uniform(0,10,10)),
'normal': np.sort(np.random.normal(5,1,10)),
'gamma': np.sort(np.random.gamma(2, size=10))})
데이터 프레임 생성후에 3가지 열 생성. 10가지 랜덤값 제공
# 데이터 확인하기
df.plot(kind='hist', bins=15, alpha=0.5)
df.describe()
# cut(), qcut() 기본 동작 확인
col = 'uniform'
num_bins = 5
df_binned = pd.DataFrame()
df_binned[col] = df[col].sort_values() # 원 데이터
'uniform' 열에서 데이터를 가져와 정렬한 후, 이를 df_binned라는 새로운 DataFrame에 'uniform' 열로 추가
df_binned['eq_dist_auto'] = pd.cut(df_binned[col], num_bins) # 동일 간격으로 나누기
cut() 함수를 사용하여 데이터를 동일한 간격으로 나눠서 'eq_dist_auto' 열에 추가
cut() 함수는 연속형 데이터를 구간으로 나눌 때 사용, num_bins에 지정된 개수만큼의 동일한 간격으로 나눔
df_binned['eq_dist_fixed'] = pd.cut(df_binned[col], bins=[0,2,4,6,8,10])
cut() 함수를 다시 사용하여 지정된 구간으로 데이터를 나눔, bins 매개변수에는 사용자가 지정한 구간의 경계값을 리스트로 전달
# 지정된 구간으로 나누기
df_binned['eq_freq_auto'] = pd.qcut(df_binned[col], num_bins) # 동일 빈도로 나누기
df_binned
qcut() 함수를 사용하여 동일한 빈도로 데이터를 나누어 'eq_freq_auto' 열에 추가
qcut() 함수는 데이터의 분포를 기반으로 동일한 빈도로 나누어주는 함수
num_bins에 지정된 개수만큼 나눔
# 구간화하여 평균값 대체하기
cols = ['uniform', 'normal', 'gamma']
열들을 리스트로 정의
# 동일 간격 구간화
df_ew = df.copy()
for col in cols:
df_ew[col+'_eq_dist'] = pd.cut(df_ew[col], 3) # 구간으로 나누기
means = df_ew.groupby(col+'_eq_dist')[col].mean() # 구간별 평균값 계산
df_ew.replace({col+'_eq_dist': means}, inplace=True) # 평균값으로 대체
display(df_ew)
df_ew라는 새로운 데이터프레임을 생성
주어진 열들을 동일한 간격으로 구간화하여 해당 열의 이름에 '_eq_dist'를 추가한 새로운 열을 만듬
groupby를 사용하여 각 구간별로 해당 열의 평균값을 계산
replace를 사용하여 원본 데이터프레임에서 해당 구간을 그 구간의 평균값으로 대체
# 동일 빈도 구간화
df_ef = df.copy()
for col in cols:
df_ef[col+'_eq_freq'] = pd.qcut(df_ef[col], 3) # 구간으로 나누기
means = df_ef.groupby(col+'_eq_freq')[col].mean() # 구간별 평균값 계산
df_ef.replace({col+'_eq_freq': means}, inplace=True) # 평균값으로 대체
display(df_ef)
qcut() 함수를 사용하여 동일한 빈도로 구간화하고, 평균값을 계산하여 대체
# 시각화
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 2, figsize=(10,5))
df_ew.astype(float).plot(ax=axes[0])
df_ef.astype(float).plot(ax=axes[1])
plt.show()
import warnings
# hide warnings
warnings.filterwarnings("ignore")
from sklearn.preprocessing import KBinsDiscretizer
경고 메시지를 무시하기 위해 warnings 모듈을 사용
filterwarnings 함수로 모든 경고를 무시하도록 설정
sklearn.preprocessing 모듈에서 KBinsDiscretizer 클래스를 가져옴
연속형 데이터를 구간화하는 데 사용
# 동일 간격 구간화
ed_binner = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform', subsample=None)
df_ed = ed_binner.fit_transform(df)
동일한 간격으로 구간화를 수행
KBinsDiscretizer 객체를 생성하고, fit_transform 메서드를 사용하여 주어진 데이터프레임 df를 동일한 간격으로 구간화
df_ed라는 새로운 배열로 저장
# 동일 빈도 구간화
ef_binner = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='quantile', subsample=None)
df_ef = ef_binner.fit_transform(df)
동일한 빈도로 구간화를 수행
KBinsDiscretizer 객체를 생성하고, fit_transform 메서드를 사용하여 주어진 데이터프레임 df를 동일한 빈도로 구간화
df_ef라는 새로운 배열로 저장
# K-means 구간화
km_binner = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='kmeans', subsample=None)
df_km = km_binner.fit_transform(df)
K-means 알고리즘을 기반으로 한 구간화를 수행
KBinsDiscretizer 객체를 생성하고, fit_transform 메서드를 사용하여 주어진 데이터프레임 df를 K-means 알고리즘을 사용하여 구간화
df_km라는 새로운 배열로 저장
# 결과 확인
df_ed = pd.DataFrame(df_ed, columns=df.columns+'_eq_dist')
df_ef = pd.DataFrame(df_ef, columns=df.columns+'_eq_freq')
df_km = pd.DataFrame(df_km, columns=df.columns+'_km')
df_bin = pd.concat([df, df_ed, df_ef, df_km], axis=1)
df_bin
구간화된 결과를 데이터프레임으로 변환하고, 이를 기존의 데이터프레임 df와 합치는 작업을 수행
pd.concat 함수를 사용하여 각 구간화 결과를 새로운 열로 추가한 df_bin라는 새로운 데이터프레임을 생성
# 구간화하여 평균값 대체하기
for bin_col in df_bin.columns:
col = bin_col.split('_')[0]
df_bin에 대해 각 구간 별로 해당 열의 평균값으로 대체하는 작업을 수행
df_bin의 각 열에 대해 반복문을 실행
bin_col은 현재 반복 중인 열을 나타남
해당 열의 이름에서 '_eq_dist', '_eq_freq', '_km'와 같은 부분을 제외하고 실제 열 이름을 가져옴
얻은 열 이름은 col에 저장
means = df_bin.groupby(by=bin_col)[col].mean() # 구간별 평균값 계산
groupby 메서드를 사용하여 현재 반복 중인 열(bin_col)을 기준으로 그룹을 만듦
그룹에 속하는 해당 열의 값들의 평균을 계산
means 변수에 저장
df_bin.replace({bin_col: means}, inplace=True) # 평균값으로 대체
df_bin
replace 메서드를 사용하여 원본 데이터프레임 df_bin에서 현재 반복 중인 열(bin_col)의 값을 means에 저장된 평균값으로 대체
inplace=True 옵션은 원본 데이터프레임을 직접 수정하도록 지정
# 시각화
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 3, figsize=(15,5))
pd.concat([df_bin.iloc[:,:3], df_bin.iloc[:,3:6]], axis=1).astype(float).plot(ax=axes[0])
pd.concat([df_bin.iloc[:,:3], df_bin.iloc[:,6:9]], axis=1).astype(float).plot(ax=axes[1])
pd.concat([df_bin.iloc[:,:3], df_bin.iloc[:,9:]], axis=1).astype(float).plot(ax=axes[2])
plt.show()
matplotlib의 pyplot 모듈을 가져옴
1행 3열의 subplot을 가진 Figure 객체를 생성
각 subplot은 axes 변수에 저장
figsize 매개변수를 사용하여 전체 그림의 크기를 지정
subplot에 대해, 원본 데이터프레임에서 0부터 2열까지의 열과, 구간화된 데이터프레임에서 3부터 5열까지의 열을 선택하여 이를 하나의 데이터프레임으로 합친 후, astype(float)를 사용하여 모든 값을 실수형으로 변환한 뒤, plot 메서드를 사용하여 그림
그리고 이를 첫 번째 subplot (axes[0])에 플로팅
import pandas as pd
import numpy as np
from sklearn.preprocessing import KBinsDiscretizer
# 데이터 생성하기
np.random.seed(42)
data = pd.DataFrame({
'feature1': np.random.rand(100) * 10, # Uniformly distributed between 0 and 10
'feature2': np.random.randn(100) * 2 + 5, # Normally distributed with mean 5 and standard deviation 2
})
# 데이터 확인하기
data.plot(kind='scatter', x='feature1', y='feature2')
plt.title('Original Data')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()
# 데이터 구간화 및 대체
features = ['feature1', 'feature2']
n_bins = 5
# KBinsDiscretizer를 사용하여 동일 간격으로 구간화
binner = KBinsDiscretizer(n_bins=n_bins, encode='ordinal', strategy='uniform')
data_binned = pd.DataFrame(binner.fit_transform(data[features]), columns=features)
# 각 구간의 중간값으로 대체
for feature in features:
bin_col = feature + '_bin'
bin_centers = binner.bin_edges_[features.index(feature)][:-1] + np.diff(binner.bin_edges_[features.index(feature)])/2
data_binned[feature] = bin_centers[data_binned[feature].astype(int)]
# 시각화
data_binned.plot(kind='scatter', x='feature1', y='feature2')
plt.title('Binned and Replaced Data')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()