R 資料探勘演算法/分類/異常值
異常值檢測是資料分析中最重要的一項任務。在這種方法中,專家可以探索一組關聯規則,以找出這些規則的興趣度量在資料庫的不同子集中的平均值相差多少。數值上劃分異常資料和非異常資料的閾值往往是重要決策的基礎。大多數單變數異常值檢測方法都是基於(魯棒)位置和分散度的估計或資料的分位數。一個主要缺點是這些規則獨立於樣本大小。樣本大小的依賴性是可取的,以允許根據樣本大小擬合閾值。此外,即使對於“乾淨”資料,也會識別出異常值,或者至少沒有區分異常值和分佈的極端值。
從背景知識的角度來看,發現有趣的異常規則的方法可以分為兩種方法
- 在定向方法中,首先為方法提供背景知識,通常以規則的形式,然後方法獲得每個都偏離這些規則的異常規則;
- 另一方面,在非定向方法中,沒有提供背景知識。
這個問題可以總結為尋找一組規則對,每組規則對都包含一個與強規則關聯的異常規則。假設一個強規則用if Y then x"表示,其中Y = y1 ^ y2 ^ ... ^ yn 是原子和x 是單個原子的合取。設Z = z1 ^ z2 ^ ... ^ zn 是原子和x' 是單個原子的合取,它具有相同的屬性但與原子x 不同的值,那麼異常規則用if Y and Z then x"表示。例如,考慮規則“使用安全帶對兒童來說有風險”,它表示對眾所周知的“使用安全帶是安全的”事實的例外。
- 步驟 1:如果您已經在系統中安裝了 R 包,請跳到步驟 2。要安裝 R 包,您可以使用系統的 apt-get 功能,只需輸入以下命令
$ sudo apt-get install r-base-core
如果您的系統沒有 apt-get 功能,不要放棄!您可以透過訪問異常值包 網站下載該包。
- 步驟 2:有必要安裝 mvoutlier 包。為了安裝 mvoutlier 包,您首先需要執行 R。這可以透過以下命令完成
$ R
然後在 R 環境中輸入以下命令
> install.packages("mvoutlier")
安裝完成。
現在有必要載入該包
> library(mvoutlier)
為了展示如何視覺化 mvoutlier 包的結果,我們將使用一個實際的例子。資料集及其在 mvoutlier 中的使用將在下面介紹。
瑞士 是一個數據庫,它包含大約 1888 年瑞士 47 個法語省份的標準化生育率測量值和社會經濟指標。
格式
一個包含 47 個觀測值的 6 個變數資料框,每個變數都以百分比表示。
| 生育率 | Ig,‘常見的標準化生育率測量值’ |
|---|---|
| 農業 | % 從事農業的男性 |
| 考試 | % 參加軍隊考試獲得最高分數的應徵者 |
| 教育 | % 超過小學教育的應徵者。 |
| 天主教 | % “天主教”(與“新教”相對)。 |
| 嬰兒死亡率 | 活產嬰兒在 1 年內死亡的比例。 |
除了“生育率”之外的所有變數都給出人口比例。
要查詢此資料集的異常值,只需鍵入以下兩個命令
> data(swiss) > uni.plot(swiss)
以上命令將生成以下圖形
透過分析由列表示的每個特徵之間的相關性來找到異常值。例如,如果單獨分析,0 旁邊的紅點不會是異常值,但是,由於考慮了相關性,這些點是異常值。另外,需要注意的是,一列中的異常值在其他列中也是相同的。
y 軸表示基於 mcd 估計量的穩健馬氏距離。零點表示值的統計平均值。
可以透過以下命令獲得更詳細的輸出
> data(swiss) > uni.plot(swiss, symb=TRUE)
在第一張圖片中,只有兩種顏色,沒有使用任何特殊符號。異常值用紅色標記。
在第二張圖片中,我們將引數 symbol 設定為 TRUE。在這種情況下,根據基於 mcd 估計量的穩健馬氏 距離使用不同的符號(十字表示大值,圓圈表示小值),並且根據觀測值的歐幾里得距離使用不同的顏色(紅色表示大值,藍色表示小值)。
除了突出顯示圖形中的異常值之外,還會生成一個表格來識別哪些元素對應於突出顯示的異常值。在此表中,標記為 TRUE 的元素是異常值。此表示例顯示在部分#案例研究 中。
假設您想購買一輛古董車,因為您是一位著名的收藏家。您有一張包含每輛車的許多特徵的列表。
一輛與眾不同的汽車會是一個好主意,但一輛“與眾不同”的汽車可能非常棒也可能非常糟糕。那麼應該買哪輛車呢?
我們將在本案例研究中使用的資料集稱為mtcars,它提取自 1974 年的《汽車趨勢》美國雜誌,包含 32 輛汽車(1973-1974 年車型)的燃油消耗量以及汽車設計和效能的 10 個方面。
一個包含 32 個觀測值的 11 個變數資料框。
| mpg | 英里/(美國)加侖 |
|---|---|
| cyl | 氣缸數 |
| disp | 排量(立方英寸) |
| hp | 總馬力 |
| drat | 後橋速比 |
| wt | 重量(磅/1000) |
| qsec | 1/4 英里時間 |
| vs | V/S |
| am | 變速箱(0 = 自動,1 = 手動) |
| gear | 前進檔數 |
| carb | 化油器數量 |
作為一名收藏家,您只對三個特徵感興趣:mpg、qseq 和 hp。因此,需要對資料集進行過濾。此外,您只對列表中的前 15 輛車感興趣,因為您已經擁有其他的了 :)。
載入資料集
> data(mtcars)
過濾資料集
> cars = mtcars[1:15, c("mpg", "qsec", "hp")]
檢視我們過濾的內容
> cars
找出突出顯示的汽車
> uni.plot(log(cars))
上面的命令中的“log”用於將 y 軸置於對數刻度。
mvoutlier 圖形:
mvoutlier 表格
第一張圖顯示我們有兩個異常值,即兩輛突出的汽車。在圖中,這些汽車用紅點表示。列中的異常值在其他列中也是相同的。
值得注意的是,透過分析汽車每個特徵之間的相關性來發現異常值。例如,如果單獨分析 qsec 列中值 0 旁邊的紅點,它就不是異常值,但考慮到相關性,該點就是一個異常值。
為了找出突出的汽車,我們分析了第二張圖。我們可以清楚地看到標記為 TRUE 的異常值。因此,異常值是 Merc 230 和 Cadillac Fleetwood。現在收藏家的生活更容易了。剩下的只是確定收藏家感興趣的哪種“突出”。檢視#過濾後的資料集,我們可以注意到 Merc 230 非常經濟,但速度較慢,功率較低,我們也可以看到 Cadillac Fleetwood 速度非常快,功率很大,但油耗過高。作為一名優秀的收藏家,他很可能會選擇 Cadillac Fleetwood,因為它可能是最受歡迎的汽車。
恭喜!您剛剛購買了這輛令人驚歎的汽車!





