측정 데이터로 시작하는 Machine Learning
학습 목표
온도 측정 기록에서 경보를 만들고, 센서 보정식의 예측 오차를 비교합니다.
측정값과 Alarm Label 비교
시작 조건
시각 [0,5,10,15,20,25] min, 온도 [24,25,29,23,30,26] °C입니다. 경보는 온도가 기준을 초과할 때 켭니다.
진행 방법
- 학습 예제를 실행해 경보가 발생한 시각과 온도를 대조하세요.
- 기준을 28°C에서 26°C로 바꾸고 경보가 추가된 시각을 찾으세요.
- 같은 그래프에 기준선과 경보 지점을 표시하고 기준을 바꾼 영향을 설명하세요.
남길 결과
- 기준별 경보 시각·개수와 축·단위가 있는 그래프.
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 기준의 결과를 비교하세요.
결과 기록·자가 점검
기준 온도:
경보 시각:
경보 개수:
확인할 점
- 28°C 기준의 경보는 10분·20분, 두 개인가?
- 26°C를 초과하는 조건에서 정확히 26°C인 값은 제외했는가?
보정식이 오차를 줄이는지 확인하기
시작 조건
센서 입력 °C, 기준 온도 °C입니다. 보정식은 y_hat=1.1*x+0.5입니다.
진행 방법
- 입력 그대로의 예측과 보정식의 예측을 각각 계산하세요.
- 각 예측과 기준값의 차이, 절댓값 오차의 평균을 구하세요.
- 새 입력 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]:
그대로의 오차:
보정 후 오차:
확인할 점
- 보정식의 평균 절댓값 오차가 약 .025°C인가?
- 이 실험은 주어진 식의 평가이며 계수를 학습한 결과로 설명하지 않았는가?
잘못된 측정값을 구분하고 기록하기
시작 조건
같은 시각의 기록 [24,None,29,100,26,28] °C를 사용합니다. 센서의 유효 온도 범위는 15–40°C이며 None은 측정 실패입니다.
진행 방법
- 측정 실패와 범위 밖의 값을 구분해 원래 시각과 함께 기록하세요.
- 유효한 값으로 평균과 28°C 초과 경보를 계산하세요. ≥ 조건으로 바꾼 경우와 비교하세요.
- 그래프에서 빠진 시각을 없애지 말고 측정이 없다는 사실이 드러나게 표시하세요.
남길 결과
- 입력 상태 표, 유효 측정값의 평균·경보 수, 결측을 구분한 그래프.
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으로 표시해 그리세요.
결과 기록·자가 점검
시각:
원래 측정값:
입력 상태:
경보 여부:
확인할 점
- 유효한 값은 4개이고 평균은 26.75°C인가?
조건의 경보는 1개, ≥ 조건은 2개인가?
- None과 100°C가 실제 0°C로 바뀌지 않았는가?