mathhunの日記

Haskellと機械学習の勉強日記。PRML読みます。

解いてみる(3)「機械学習基礎」簡単な問題を 解いて理解しよう!後篇

「機械学習基礎」簡単な問題を解いて理解しよう!後篇|【Tech総研】

後編

問題
  • 異常(外れ値)検出で、選んではいけない玉を見つけ出せ!
    • 100個の玉のうち、貴重な石でできた玉がどれなのか教えてほしい。
    • 判定が微妙なものがあれば、怪しい玉も含めて3つぐらい教えてほしい。
解説(引用)
与えられたデータ集合の中から、異常(外れ値)を検出する問題です。
外れ値検出は、ノイズや異常動作、故障の予兆などの検知に用いられるほか、未知の事象を発見したりするのにも有用です。
外れ値検出の主な手法としては、One-class Support Vector Machine(OC-SVM)やLocal Outlier Factor(LOF)があります。

解いてみると言ってもこれは分からなかったので答えを見た。
丸写しだから意味ないけど書いておこう

# 3次元プロット
install.packages("rgl")
library(rgl)
plot3d(hundred)

# 異常値検出
install.packages("DMwR")
library(DMwR)
hundred <- read.table("hundred.txt")
outlier.scores <- lofactor(hundred, k=3)
outliers <- order(outlier.scores, decreasing=T)[1:3]
outliers
hundred[outliers,]

結果

> hundred[outliers,]
        V1      V2     V3
87  84.406 129.347 50.527
16  76.911 127.382 51.565
100 89.907 131.723 52.932