1. 程式人生 > >機器學習之旅(九)

機器學習之旅(九)

吳恩達教授的機器學習課程的第九周相關內容:

1、異常檢測(Anomaly Detection)

1.1、問題的動機

異常檢測(Anomaly detection)問題。這是機器學習演算法的一個常見應用。 這種演算法的一個有趣之處在於:它雖然主要用於非監督學習問題,但從某些角度看,它又類似於一些監督學習問題。 在這裡插入圖片描述上圖中,在藍色圈內的資料屬於該組資料的可能性較高,而越是偏遠的資料,其屬於該 組資料的可能性就越低。 這種方法稱為密度估計,表達如下: 在這裡插入圖片描述 模型 p (x ) 為我們其屬於一組資料的可能性, 通過上式 檢測非正常使用者。 小結:異常檢測主要是為了在大部分是正常樣本的情況下檢測出異常樣本。

1.2、高斯分佈

高斯分佈,也稱為正態分佈。通常如果我們認為變數 x 符合高斯分佈 x N ~ ( , )   2 則其概率密度函式為: 在這裡插入圖片描述機器學習中對於方差我們通常只除以 m 而非統計學中的(m-1)。 小結:高斯分佈的概率密度公式及均值方差。

1.3、演算法

異常檢測演算法: 在這裡插入圖片描述一旦我們獲得了平均值和方差的估計值,給定新的一個訓練例項,根據模型計算 p(x) : 在這裡插入圖片描述下面的三維圖表表示的是密度估計函式, z 軸為根據兩個特徵的值所估計 p (x ) 值: 在這裡插入圖片描述我們選擇一個ϵ\epsilon,將p(x)=ϵp\left ( x \right )=\epsilon作為我們的判定邊界,當p(x)>

ϵp\left ( x \right )> \epsilon時預測資料為正常資料,否則則為異常。 小結:用高斯分佈來推出異常檢測演算法。

1.4、開發和評價一個異常檢測系統

異常檢測演算法是一個非監督學習演算法,意味著我們無法根據結果變數 y 的值來告訴我 們資料是否真的是異常的。我們需要另一種方法來幫助檢驗演算法是否有效。 例如:我們有 10000 臺正常引擎的資料,有 20 臺異常引擎的資料。 我們這樣分配數 據: 6000 臺正常引擎的資料作為訓練集 2000 臺正常引擎和 10 臺異常引擎的資料作為交叉檢驗集 2000 臺正常引擎和 10 臺異常引擎的資料作為測試集 具體的評價方法如下:

  1. 根據測試集資料,我們估計特徵的平均值和方差並構建 p(x)函式
  2. 對交叉檢驗集,我們嘗試使用不同的ϵ\epsilon值作為閥值,並預測資料是否異常,根據 F1值或者查準率與查全率的比例來選擇
  3. 選出ϵ\epsilon後,針對測試集進行預測,計算異常檢驗系統的 F1 值,或者查準率與查全率之比 小結:異常檢測系統的大體實現步驟。

1.5、異常檢測與監督學習對比

之前我們構建的異常檢測系統也使用了帶標記的資料,與監督學習有些相似,下面的對 比有助於選擇採用監督學習還是異常檢測:

在這裡插入圖片描述 小結:異常檢測與監督學習的異同。

1.6、選擇特徵

對於異常檢測演算法,我們使用的特徵是至關重要的,下面談談如何選擇特徵: 異常檢測假設特徵符合高斯分佈,如果資料的分佈不是高斯分佈,異常檢測演算法也能夠 工作,但是最好還是將資料轉換成高斯分佈,例如使用對數函式:x=log(x+c),其中 c 為非負常數; 或者x=xcx=x^{c} , c 為 0-1 之間的一個分數,等方法。 在這裡插入圖片描述誤差分析: 一個常見的問題是一些異常的資料可能也會有較高的 p(x)值,因而被演算法認為是正常的。 這種情況下誤差分析能夠幫助我們,我們可以分析那些被演算法錯誤預測為正常的資料,觀察 能否找出一些問題。我們可能能從問題中發現我們需要增加一些新的特徵,增加這些新特徵 後獲得的新演算法能夠幫助我們更好地進行異常檢測。 在這裡插入圖片描述我們通常可以通過將一些相關的特徵進行組合,來獲得一些新的更好的特徵。 小結:將一些特徵組合,形成更好的新特徵。增加這些新特徵後獲得的新演算法能夠幫助我們更好地進行異常檢測。

1.7、多元高斯分佈

圖中是兩個相關特徵, 洋紅色的線(根據 ε 的不同其範圍可大可小) 是一般的高斯分佈模型獲得的判定邊界,很明顯綠色的 x 所代表的資料點很可能是異常值,但是其 p(x)值卻仍然在正常範圍內。多元高斯分佈將建立像圖中藍色曲線所示的判定邊界。 在這裡插入圖片描述在一般的高斯分佈模型中,我們計算 p(x) 的方法是: 通過分別計算每個特徵對應的機率然後將其累乘起來,在多元高斯分佈模型中,我們將構建特徵的協方差矩陣,用所有的特徵一起來計算p(x) 。 我們首先計算所有特徵的平均值,然後再計算協方差矩陣: 在這裡插入圖片描述下面我們來看看協方差矩陣是如何影響模型的: 在這裡插入圖片描述上圖是 5 個不同的模型,從左往右依次分析:

  1. 是一個一般的高斯分佈模型
  2. 通過協方差矩陣,令特徵 1 擁有較小的偏差,同時保持特徵 2 的偏差
  3. 通過協方差矩陣,令特徵 2 擁有較大的偏差,同時保持特徵 1 的偏差
  4. 通過協方差矩陣,在不改變兩個特徵的原有偏差的基礎上,增加兩者之間的正相關性
  5. 通過協方差矩陣,在不改變兩個特徵的原有偏差的基礎上,增加兩者之間的負相關性 原高斯分佈模型和多元高斯分佈模型的比較: 在這裡插入圖片描述在這裡插入圖片描述小結:多元高斯分佈。

1.8、使用多元高斯分佈進行異常檢測

多元高斯分佈和多元正態分佈: 在這裡插入圖片描述我有一組樣本 是一個 n 維向量,我想我的樣本來自一個多元高斯分佈。 我如何嘗試估計我的引數 μ\mu\sum以及標準公式? 在這裡插入圖片描述讓我們以這種方法而只需將其插入到異常檢測演算法。那麼,我們如何把所有這一切共同開發一個異常檢測演算法? 在這裡插入圖片描述首先,我們把我們的訓練集,和我們的擬合模型,我們計算 p(x),要知道,設定 μ\mu描述的一樣\sum在這裡插入圖片描述 如圖, 該分佈在中央最多,越到外面的圈的範圍越小。 其中:協方差矩陣其中:協方差矩陣\sum為: 在這裡插入圖片描述原始模型和多元高斯分佈比較如圖: 在這裡插入圖片描述 小結:多元高斯分佈在異常檢測演算法上的應用。

2、推薦系統

2.1、問題形式化

講推薦系統有兩個原因:第一、 僅僅因為它是機器學習中的一個重要的應用。討論推薦系統地第二個原因是:通過推薦系統,我們將領略一小部分特徵學習的思想。 假使我們是一個電影供應商,我們有 5 部電影和 4 個使用者,我們要求使用者為電影打分 在這裡插入圖片描述 在這裡插入圖片描述 小結:推薦系統的淺顯介紹。

2.2、基於內容的推薦系統

在一個基於內容的推薦系統演算法中,我們假設對於我們希望推薦的東西有一些資料,這些資料是有關這些東西的特徵。 在我們的例子中,我們可以假設每部電影都有兩個特徵,如 x1代表電影的浪漫程度, x2代表電影的動作程度。 在這裡插入圖片描述 則每部電影都有一個特徵向量,如 x(1) 是第一部電影的特徵向量為[0.9 0]。 下面我們要基於這些特徵來構建一個推薦系統演算法。 假設我們採用線性迴歸模型,我們可以針對每一個使用者都訓練一個線性迴歸模型,如θ(1)\theta ^{\left ( 1 \right )}是第一個使用者的模型的引數。 於是,我們有: 在這裡插入圖片描述 上面的代價函式只是針對一個使用者的,為了學習所有使用者,我們將所有使用者的代價函式求和: 在這裡插入圖片描述 小結:在知道相關特徵向量時基於內容的推薦。

2.3、協同過濾

在之前的基於內容的推薦系統中,對於每一部電影,我們都掌握了可用的特徵,使用這些特徵訓練出了每一個使用者的引數。相反地,如果我們擁有使用者的引數,我們可以學習得出電影的特徵。 在這裡插入圖片描述但是如果我們既沒有使用者的引數,也沒有電影的特徵,這兩種方法都不可行了。協同過濾演算法可以同時學習這兩者。 在這裡插入圖片描述 小結:沒有使用者和電影的相關特徵時,使用協同過濾。

2.4、協同過濾演算法

在這裡插入圖片描述 小結:協同過濾演算法的優化目標。

2.5、向量化:低秩矩陣分解

在上幾節視訊中,我們談到了協同過濾演算法,本節視訊中我將會講到有關該演算法的向量化實現,以及說說有關該演算法你可以做的其他事情。 我們有五部電影,以及四位使用者,那麼 這個矩陣 Y 就是一個 5 行 4 列的矩陣,它將這些電影的使用者評分資料都存在矩陣裡: 在這裡插入圖片描述推出評分: 在這裡插入圖片描述找到相關影片: 在這裡插入圖片描述 小結:協同過濾演算法的向量實現及評分和相關內容的推出。

2.6、推行工作上的細節:均值歸一化

讓我們來看下面的使用者評分資料: 在這裡插入圖片描述如果我們新增一個使用者 Eve,並且 Eve 沒有為任何電影評分,那麼我們以什麼為依據為 Eve 推薦電影呢? 我們首先需要對結果 Y 矩陣進行均值歸一化處理,將每一個使用者對某一部電影的評分減去所有 使用者對該電影評分的平均值: 在這裡插入圖片描述然後我們利用這個新的 Y 矩陣來訓練演算法。 如果我們要用新訓練出的演算法來預測評分,則需要將平均值重新加回去,預測 在這裡插入圖片描述 對於 Eve,我們的新模型會認為她給每部電影的評分都是該電影的平均分。 小結:利用均值歸一化為新使用者進行相關預測。

3、第九周程式設計題

1、estimateGaussian.m mu=mean(X)’; sigma2=var(X)’*((m-1)/m); 2、selectThreshold.m

cvPredictions = (pval < epsilon); tp=sum((cvPredictions == 1) &(yval == 1)); fp=sum((cvPredictions == 1) &(yval == 0)); fn=sum((cvPredictions == 0) &(yval == 1)); tn=sum((cvPredictions == 0) &(yval == 0)); prec=tp/(tp+fp); rec=tp/(tp+fn); F1=2precrec/(prec+rec); 3、cofiCostFunc.m

J = 1/2 * sum(sum(((X * Theta’ - Y).^2).*(R == 1))); X_grad=((X * Theta’ - Y).*R)*Theta ; Theta_grad=((X * Theta’ - Y).R)'X; J = J + 0.5lambda(sum(sum(Theta.2))+sum(sum(X.2))); X_grad = X_grad + lambda * X; Theta_grad = Theta_grad + lambda * Theta;