강의자료 · 전기공학머신러닝실습

측정 데이터로 시작하는 Machine Learning

학습 목표

온도 측정 기록에서 경보를 만들고, 센서 보정식의 예측 오차를 비교합니다.

측정값과 Alarm Label 비교

시작 조건

시각 [0,5,10,15,20,25] min, 온도 [24,25,29,23,30,26] °C입니다. 경보는 온도가 기준을 초과할 때 켭니다.

진행 방법

  1. 학습 예제를 실행해 경보가 발생한 시각과 온도를 대조하세요.
  2. 기준을 28°C에서 26°C로 바꾸고 경보가 추가된 시각을 찾으세요.
  3. 같은 그래프에 기준선과 경보 지점을 표시하고 기준을 바꾼 영향을 설명하세요.

남길 결과

import numpy as np
import matplotlib.pyplot as plt
minutes=np.array([0,5,10,15,20,25])
temperature=np.array([24.,25.,29.,23.,30.,26.])
threshold=28.
alarm=temperature>threshold
print('alarm times [min]:',minutes[alarm])
print('alarm count:',alarm.sum())
plt.plot(minutes,temperature,'o-',label='measurement')
plt.axhline(threshold,color='gray',linestyle='--',label='threshold')
plt.scatter(minutes[alarm],temperature[alarm],color='red',label='alarm')
plt.xlabel('Time [min]');plt.ylabel('Temperature [deg C]');plt.legend();plt.grid()
# TODO: 26°C 기준의 결과를 비교하세요.

결과 기록·자가 점검

기준 온도:

경보 시각:

경보 개수:

확인할 점

보정식이 오차를 줄이는지 확인하기

시작 조건

센서 입력 x=[20222426]x=\begin{bmatrix}20&22&24&26\end{bmatrix} °C, 기준 온도 y=[22.524.726.829.1]y=\begin{bmatrix}22.5&24.7&26.8&29.1\end{bmatrix} °C입니다. 보정식은 y_hat=1.1*x+0.5입니다.

진행 방법

  1. 입력 그대로의 예측과 보정식의 예측을 각각 계산하세요.
  2. 각 예측과 기준값의 차이, 절댓값 오차의 평균을 구하세요.
  3. 새 입력 28°C, 기준 온도 31.4°C에서도 두 방법의 오차를 비교하세요.

남길 결과

x=np.array([20.,22.,24.,26.]);reference=np.array([22.5,24.7,26.8,29.1])
corrected=1.1*x+.5
print(np.column_stack([x,reference,corrected]))
print('raw MAE:',np.mean(np.abs(x-reference)))
print('corrected MAE:',np.mean(np.abs(corrected-reference)))
# TODO: 새 입력에서의 예측과 두 오차를 계산하세요.

결과 기록·자가 점검

입력 [°C]:

기준 [°C]:

그대로의 오차:

보정 후 오차:

확인할 점

잘못된 측정값을 구분하고 기록하기

시작 조건

같은 시각의 기록 [24,None,29,100,26,28] °C를 사용합니다. 센서의 유효 온도 범위는 15–40°C이며 None은 측정 실패입니다.

진행 방법

  1. 측정 실패와 범위 밖의 값을 구분해 원래 시각과 함께 기록하세요.
  2. 유효한 값으로 평균과 28°C 초과 경보를 계산하세요. ≥ 조건으로 바꾼 경우와 비교하세요.
  3. 그래프에서 빠진 시각을 없애지 말고 측정이 없다는 사실이 드러나게 표시하세요.

남길 결과

records=[24,None,29,100,26,28]
values=np.array([np.nan if v is None else float(v) for v in records])
valid=np.isfinite(values)&(values>=15)&(values<=40)
print('valid times:',minutes[valid])
print('valid mean:',values[valid].mean())
# TODO: 입력 상태·두 경보 조건을 비교하고, 무효 지점을 np.nan으로 표시해 그리세요.

결과 기록·자가 점검

시각:

원래 측정값:

입력 상태:

경보 여부:

확인할 점