異常なデータを見つける
CoddyのMachine Learningジャーニー「教師なし学習」セクションの一部。レッスン 34/51。
この章では、奇妙な行を探します。読み終えるころには、サーバーの異常な分を丸で囲めるようになります。
異常とは、故障、不正、誤植など、ほかとは異なるまれな行のことです。新たな異常はそれぞれ異なるため、事前にラベル付けすることはできません。
z スコアから始めましょう。StandardScaler はすべての列を z スコアに変換するため、次の1行で、3を超える値がある行をすべて検出できます。
z = StandardScaler().fit_transform(X)
odd = (np.abs(z) > 3).sum(axis=1) > 0しかし、各列では普通でも、その組み合わせだけが異常な行があります。列ごとの z スコアでは見つけられません。
チャレンジ
中級あるスーパーマーケットでは、80台の冷凍庫について1日分の平均値を記録しました。どの冷凍庫に技術者が必要でしょうか?プログラムはしきい値を読み込みます。
Xの各列をzスコアに変換します。- 各列について、フラグが付いた冷凍庫の数を出力します。zスコアの0からの距離がしきい値を超えた冷凍庫にフラグを付けます。
- いずれかの列でフラグが付いた冷凍庫を、表の順序で出力します。
別の店舗で、しきい値が3の場合:
temp_c: 1 flagged
power_kw: 2 flagged
door_openings: 0 flagged
defrost_min: 0 flagged
Freezers to check:
F05
F13
F51自分で試してみよう
import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler
# 冷凍ケース1台につき1行:1日分の平均値
freezers = pd.read_csv("freezers.csv")
columns = ["temp_c", "power_kw", "door_openings", "defrost_min"]
X = freezers[columns]
cutoff = float(input())
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師なし学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ