Introduction
這篇文章主要是整理網路上一些對於機器學習使用到方法的觀點
網址 :XXX
程式碼:XXX
Dropout
Dropout簡單說就是在每次神經網路向前傳播的時候,讓某個神經元以機率 p 停止運作,這種做法可以讓模型的泛化性更強,換句話說,就是提高各個神經元間的獨立性,使得結果不會嚴重地受某些區域性的特徵影響
而 Dropout 在訓練過程中實際上發生的是訓練神經網路的某個子集,且由於神經元的權重是來自原始的神經網路,訓練最終得出的權重可以被認為是所有子集神經網路權重的平均值。
Upsampling
通常處理不均衡的資料時有幾種作法,Upsampling, Undersampling 跟 Weighting...等,主流作法通常都是第一種,但升採樣的做法通常為群集內插值,這意味著Feature的分佈會影響升採樣的結果(如下圖,黃點升採樣出來的data 都在黃點之間)

Anomaly detection
異常檢測的方式有很多種,以下就看到的文章一一介紹- One-class SVM
這是機器學習中經典的單類別演算法,通常用在positive case幾乎不存在,亦即資料中僅有一個類別的狀況,其算法簡單來說就是透過 kernel function在高維度尋求一個超平面盡可能將所有 sample 包住(如下圖),只是kernel 所需的計算量蠻龐大的,需斟酌使用。 - Example
from sklearn.svm import OneClassSVM
train, test = train_test_split(data, test_size=.2)
train_normal = train[train['y']==0]
train_outliers = train[train['y']==1]
outlier_prop = len (train_outliers) / len(train_normal)
svm = OneClassSVM(kernel='rbf', nu=outlier_prop, gamma=0.000001)
svm.fit(train_normal[['x1','x2',...]])
x = test['x1']
y = test['x2']
plt.scatter(x, y, alpha=0.7, c=test['y'])
plt.xlabel('x1')
plt.ylabel('x2')
y_pred = svm.predict(test[['x1','x4','x5']])
colors = np.array(['#377eb8' , '#ff7f00'])
plt.scatter(x, y, alpha=0.7, c=colors[(y_pred + 1) // 2])
plt.xlabel('x1')
plt.ylabel('x2')
- Isolation forest
隔離森林的構造方式和隨機森林類似,透過隨機抽樣資料集、隨機選定特徵對資料進行分割,直到每個節點只剩下一筆資料或是多筆相同的資料。
其概念在於異常資料相較於正常資料更容易在算法初期被切割出來,透過計算資料在各顆樹木的深度來判斷資料是否為異常值。
但要注意的是由於算法特性,IF不適用於高維度資料與偵測局部的異常值。From https://www.researchgate.net/figure/Overview-of-the-isolation-forest-method-Light-green-circles-represent-common-normal_fig3_341629782
- Robust Random Cut Forest
穩健的隨機森林砍伐算法改良自隔離森林,透過水塘抽樣的概念讓算法得以將時序間的關係納入考量,並計算Streaming data對於樹木複雜度變化來衡量資料是否為異常值。From http://proceedings.mlr.press/v48/guha16.pdf - O...
Robust Random Cut Forest
123
沒有留言:
張貼留言