1. 程式人生 > >Andrew NG 機器學習 練習8-Anomaly Detection and Recommender Systems

Andrew NG 機器學習 練習8-Anomaly Detection and Recommender Systems

1 Anomaly detection

實現一個異常檢測演算法檢測伺服器的異常行為
特徵是 每個伺服器的 吞吐量(throughput)(mb/s) 和 相應延遲(ms)
採集 m=307 臺執行中的伺服器的特徵,{x(1),...,x(m)}
其中大部分是 normal 的伺服器特徵

你將使用 高斯模型 檢測資料集中的異常樣例
從 2D 資料集開始,以便視覺化演算法過程
在那個資料集中你將擬合一個高斯分佈,發現低可能性的值,從而找出異常樣例
之後,你將在一個大的多維資料集中應用異常檢測演算法

首先視覺化資料,如圖:
這裡寫圖片描述

%% ================== Part 1: Load Example Dataset  ===================
% We start this exercise by using a small dataset that is easy to % visualize. % % Our example case consists of 2 network server statistics across % several machines: the latency and throughput of each machine. % This exercise will help us find possibly faulty (or very fast) machines. % fprintf('Visualizing example dataset for outlier detection.\n\n'
); % The following command loads the dataset. You should now have the % variables X, Xval, yval in your environment load('ex8data1.mat'); % Visualize the example dataset plot(X(:, 1), X(:, 2), 'bx'); axis([0 30 0 30]); xlabel('Latency (ms)'); ylabel('Throughput (mb/s)'); fprintf('Program paused. Press enter to continue.\n'
); pause

1.1 Gaussian distribution

為了實施異常檢測,你需要首先 根據資料分佈,擬合一個模型

給一個訓練集 {x(1),...,x(m)},x(i)Rn
需要對每一個特徵 xi 估算 高斯分佈
對於每一個特徵,需要計算引數 μiσ2i

通常如果我們認為變數 x 符合高斯分佈 x~N(μ,σ2) 則其概率密度函式為:
這裡寫圖片描述
μσ2

1.2 Estimating parameters for a Gaussian

通過下列公式計算每個特徵的 μiσ2i
這裡寫圖片描述
這裡寫圖片描述

%% ================== Part 2: Estimate the dataset statistics ===================
%  For this exercise, we assume a Gaussian distribution for the dataset.
%
%  We first estimate the parameters of our assumed Gaussian distribution, 
%  then compute the probabilities for each of the points and then visualize 
%  both the overall distribution and where each of the points falls in 
%  terms of that distribution.
%
fprintf('Visualizing Gaussian fit.\n\n');

%  Estimate my and sigma2
[mu sigma2] = estimateGaussian(X);

%  Returns the density of the multivariate normal at each data point (row) 
%  of X
p = multivariateGaussian(X, mu, sigma2);

%  Visualize the fit
visualizeFit(X,  mu, sigma2);
xlabel('Latency (ms)');
ylabel('Throughput (mb/s)');

fprintf('Program paused. Press enter to continue.\n');
pause;

estimateGaussian.m

function [mu sigma2] = estimateGaussian(X)
%ESTIMATEGAUSSIAN This function estimates the parameters of a 
%Gaussian distribution using the data in X
%   [mu sigma2] = estimateGaussian(X), 
%   The input X is the dataset with each n-dimensional data point in one row
%   The output is an n-dimensional vector mu, the mean of the data set
%   and the variances sigma^2, an n x 1 vector
% 

% Useful variables
[m, n] = size(X);

% You should return these values correctly
mu = zeros(n, 1);
sigma2 = zeros(n, 1);
% ====================== YOUR CODE HERE ======================
% Instructions: Compute the mean of the data and the variances
%               In particular, mu(i) should contain the mean of
%               the data for the i-th feature and sigma2(i)
%               should contain variance of the i-th feature.
%
mu=1/m*sum(X);
sigma2=1/m*sum((X-repmat(mu,m,1)).^2);
% =============================================================
end

這裡寫圖片描述

1.3 Selecting the threshold, ε

現在我們有了高斯引數,我們就可以調查一下那些樣例根據這個分佈有高可能性,那些樣例有非常低的可能性。有低可能性的樣例更有可能是異常的。

決定那些是異常的,一種方法是 根據 交叉驗證集 選擇一個 閾值。

這部分,實現一個演算法選擇 ,在交叉驗證集中使用 F1 值 來選擇 閾值ε。

交叉驗證集 {(x(1)cv,y(1)cv),...,(x(mcv)cv,y(mcv)cv)}
標籤 y=1 表示是異常樣例,y=0 表示是正常樣例

對於每一個交叉驗證集,計算 p(x(i)cv)

所有的 p(x(1)cv),…,p(x(mcv)cv)y(1)cv,...,y(mcv)cv 以向量的形式傳遞到 selectThreshold.m 以計算 閾值 ε,該方法也要返回使用該ε 的 F1值。

這裡寫圖片描述
這裡寫圖片描述

  • tp 是正確的積極判定(true positives)的數量:標籤表明是異常,演算法正確分類為異常
  • fp 是錯誤的積極判定(false positives)的數量:標籤表明是正常,演算法錯誤的分類為異常
  • fn 是錯誤的消極判定(false negatives)的數量:標籤表明是異常,演算法錯誤的分類為正常
%% ================== Part 3: Find Outliers ===================
%  Now you will find a good epsilon threshold using a cross-validation set
%  probabilities given the estimated Gaussian distribution
% 

pval = multivariateGaussian(Xval, mu, sigma2);

[epsilon F1] = selectThreshold(yval, pval);
fprintf('Best epsilon found using cross-validation: %e\n', epsilon);
fprintf('Best F1 on Cross Validation Set:  %f\n', F1);
fprintf('   (you should see a value epsilon of about 8.99e-05)\n');
fprintf('   (you should see a Best F1 value of  0.875000)\n\n');

%  Find the outliers in the training set and plot the
outliers = find(p < epsilon);

%  Draw a red circle around those outliers
hold on
plot(X(outliers, 1), X(outliers, 2), 'ro', 'LineWidth', 2, 'MarkerSize', 10);
hold off

fprintf('Program paused. Press enter to continue.\n');
pause;

selectThreshold.m

function [bestEpsilon bestF1] = selectThreshold(yval, pval)
%SELECTTHRESHOLD Find the best threshold (epsilon) to use for selecting
%outliers
%   [bestEpsilon bestF1] = SELECTTHRESHOLD(yval, pval) finds the best
%   threshold to use for selecting outliers based on the results from a
%   validation set (pval) and the ground truth (yval).
%

bestEpsilon = 0;
bestF1 = 0;
F1 = 0;

stepsize = (max(pval) - min(pval)) / 1000;%計算步長
for epsilon = min(pval):stepsize:max(pval)

    % ====================== YOUR CODE HERE ======================
    % Instructions: Compute the F1 score of choosing epsilon as the
    %               threshold and place the value in F1. The code at the
    %               end of the loop will compare the F1 score for this
    %               choice of epsilon and set it to be the best epsilon if
    %               it is better than the current choice of epsilon.
    %               
    % Note: You can use predictions = (pval < epsilon) to get a binary vector
    %       of 0's and 1's of the outlier predictions

    predictions = (pval < epsilon);%概率小於閾值的數量,即預測為異常的數量
    fp = sum((predictions == 1) & (yval == 0));%演算法錯誤的分類為異常,標籤表明是正常
    fn = sum((predictions == 0) & (yval == 1));%演算法正確分類為正常,標籤表明是異常
    tp = sum((predictions == 1) & (yval == 1));%演算法正確分類為異常,標籤表明是異常

    prec = tp / (tp + fp);%準確率
    rec = tp / (tp + fn);%召回率

    F1 = 2 * prec * rec / (prec + rec);%F1值
    % =============================================================

    if F1 > bestF1
       bestF1 = F1;
       bestEpsilon = epsilon;
    end
end

end

這裡寫圖片描述

1.4 High dimensional dataset

將前面實現的異常檢測演算法應用在一個更現實、更難的資料集。
一個樣例有11個特徵,捕捉了伺服器更多的屬性。

%% ================== Part 4: Multidimensional Outliers ===================
%  We will now use the code from the previous part and apply it to a 
%  harder problem in which more features describe each datapoint and only 
%  some features indicate whether a point is an outlier.
%

%  Loads the second dataset. You should now have the
%  variables X, Xval, yval in your environment
load('ex8data2.mat');

%  Apply the same steps to the larger dataset
[mu sigma2] = estimateGaussian(X);

%  Training set 
p = multivariateGaussian(X, mu, sigma2);

%  Cross-validation set
pval = multivariateGaussian(Xval, mu, sigma2);

%  Find the best threshold
[epsilon F1] = selectThreshold(yval, pval);

fprintf('Best epsilon found using cross-validation: %e\n', epsilon);
fprintf('Best F1 on Cross Validation Set:  %f\n', F1);
fprintf('   (you should see a value epsilon of about 1.38e-18)\n');
fprintf('   (you should see a Best F1 value of 0.615385)\n');
fprintf('# Outliers found: %d\n\n', sum(p < epsilon));
Best epsilon found using cross-validation: 1.377229e-18
Best F1 on Cross Validation Set:  0.615385
   (you should see a value epsilon of about 1.38e-18)
   (you should see a Best F1 value of 0.615385)
# Outliers found: 117

2 Recommender Systems

這部分,你將實現協同過濾學習演算法,並將其應用在一個電影評分資料集中。

評分範圍是1到5。

nu=943 個使用者;nm=1682 個電影。

在練習的下一部分,你將實現 cofiCostFunc.m 方法,計算協同過濾目標函式和梯度。之後使用 vfmincg.m 學習協同過濾的引數。

2.1 Movie ratings dataset

從 ex8 movies.mat 讀取變數 Y 和 R 。

Y矩陣(num_movies × num_users) 儲存 評分 y(i,j) 從 1-5。

R矩陣是一個0-1標記矩陣,R(i,j)=1 表示 使用者 j 給電影 i 評過分;R(i,j)=0 相反。

協同過濾的目標是預測 沒有被評分,(即R(i,j)=0 )位置的評分。這樣就可以推薦預測使用者評分最高的電影給這個使用者了。

通過這部分練習,你將用 X 和 Theta 這兩個矩陣工作:
這裡寫圖片描述

X矩陣的第 i 行 對應 第 i 個電影的特徵向量 x(i)
Theta矩陣的 第 j 行對用 第 j 個使用者的引數向量 θ(j)

x(i)θ(j) 都是 n 維向量。

這個練習中 特徵數 n=100,相應的 X 是一個 n

相關推薦

Andrew NG 機器學習 練習8-Anomaly Detection and Recommender Systems

1 Anomaly detection 實現一個異常檢測演算法檢測伺服器的異常行為 特徵是 每個伺服器的 吞吐量(throughput)(mb/s) 和 相應延遲(ms) 採集 m=307 臺執行中的伺服器的特徵,{x(1),...,x(m)} 其中大部

【原】Coursera—Andrew Ng機器學習—Week 8 習題—聚類 和 降維

【1】無監督演算法 【2】聚類 【3】代價函式 【4】 【5】K的選擇 【6】降維 Answer:本來是 n 維,降維之後變成 k 維(k ≤ n) 【7】 【8】 Answer: 斜率-1 【9】   Answer: x 是一個向

斯坦福NG機器學習課程:Anomaly Detection筆記

Anomaly DetectionVS Supervised Learning  說到這裡我們肯定都有困惑,當我們有資料類標籤,為什麼我們不直接使用監督性學習而使用Anomaly detection,接下來就對兩者進行對比。 首先Anomaly detection 在資料集上特點是:很少量的posit

Coursera-吳恩達-機器學習-第九周-程式設計作業-Anomaly Detection and Recommender Systems

本次文章內容: Coursera吳恩達機器學習課程,第九周程式設計作業。程式語言是Matlab。 本文只是從程式碼結構上做的小筆記。   Anomaly Detection  part 0 Initialization Part 1: Load Example

【原】Coursera—Andrew Ng機器學習—課程筆記 Lecture 15—Anomaly Detection異常檢測

Lecture 15 Anomaly Detection 異常檢測 15.1 異常檢測問題的動機 Problem Motivation 異常檢測(Anomaly detection)問題是機器學習演算法的一個常見應用。這種演算法雖然主要用於無監督學習問題,但從某些角度看,它又類似於一些監督學習問題。舉例:

廣義線性模型 - Andrew Ng機器學習公開課筆記1.6

sans luci art 能夠 tro ron 便是 import grand 在分類問題中我們如果: 他們都是廣義線性模型中的一個樣例,在理解廣義線性模型之前須要先理解指數分布族。 指數分

Andrew Ng機器學習筆記+Weka相關算法實現(四)SVM和原始對偶問題

優化問題 坐標 出了 變量 addclass fun ber 找到 線性 這篇博客主要解說了Ng的課第六、七個視頻,涉及到的內容包含,函數間隔和幾何間隔、最優間隔分類器 ( Optimal Margin Classifier)、原始/對偶問題 ( Pr

Andrew Ng機器學習課程筆記(四)之神經網絡

sca 優化 介紹 www 之間 output 現在 利用 href Andrew Ng機器學習課程筆記(四)之神經網絡 版權聲明:本文為博主原創文章,轉載請指明轉載地址 http://www.cnblogs.com/fydeblog/p/7365730.html 前言

Andrew Ng機器學習第一章——初識機器學習

表現 多次 無監督學習 答案 性能 分類 理想 通過 連續 機器學習的定義   計算機程序從經驗E中學習,解決某一任務T、進行某一性能度量P,通過P測定在T上的表現因E而提高。   簡而言之:程序通過多次執行之後獲得學習經驗,利用這些經驗可以使得程序的輸出結果更為理想,就是

Andrew Ng機器學習第一章——單變量線性回歸

梯度 tex 回歸 同步 常常 最好 可能 機器 http 監督學習算法工作流程      h代表假設函數,h是一個引導x得到y的函數   如何表示h函數是監督學習的關鍵問題   線性回歸:h函數是一個線性函數 代價函數   在線性回歸問題中,常常需要解決最小化問題。代

Andrew Ng機器學習(零):什麽是機器學習

中學 修正 style tar 輸入 color 情況 html 知識 1.什麽是機器學習? 自動化:讓計算機處理繁瑣和重復的工作。 編程:設計一種算法,適用於解決特定的問題。 機器學習:可以解決更廣泛的而不是特定的問題。類比於人類從經驗中學習這種活動,從已有的數據中發現自

Andrew Ng 機器學習筆記 16 :照片OCR

OCR的大概步驟 機器學習流水線(machine learning pipeline) 滑動窗體 上限分析 照片OCR是指照片光學字元識別(photo optical ch

Andrew Ng 機器學習筆記 15 :大資料集梯度下降

隨機梯度下降 隨機梯度下降原理 小批量梯度下降 小批量梯度下降vs隨機梯度下降 隨機梯度下降的收

Andrew Ng 機器學習筆記 14 :異常檢測

異常檢測問題 高斯分佈 高斯分佈中,μ和σ的關係 異常檢測的具體演算法 異常檢測演算法步驟總結 異常檢測 VS 監督學習 對不服從高斯分佈的資料進行

Andrew Ng 機器學習筆記 13 :降維(dimensionality reduction)

資料壓縮 二維降到一維 三維降到二維 視覺化資料 主成分分析(PCA) PCA的執行過程2D -&

Andrew Ng 機器學習筆記 12 :聚類

K均值 (K-means)演算法 K-Means的規範化描述 異常情況 K均值的代價函式 隨機初始化 肘部法則 (Elbow Method)

Andrew Ng 機器學習筆記 11 :支援向量機(Support Vector Machine)

構建支援向量機 1.替換邏輯迴歸函式 2.去除多餘的常數項 1/m 3.正則化項係數的處理 大間距分類器 SVM決

Andrew Ng 機器學習筆記 10 :評價學習演算法

評估假設函式 模型選擇 正則化引數λ對假設函式的影響 λ 在訓練集上的變化 λ在交叉驗證集上的變化 學習曲線(Lear

Andrew Ng 機器學習筆記 09 :神經網路

非線性假設 神經網路邏輯單元 激勵函式 輸入層,輸出層,隱藏層 前向傳播(forward propagation)的向量化實現 AND、OR、NOT、XNOR的實

Andrew Ng 機器學習筆記 07 :Octave/Matlab 使用說明

數學運算 邏輯運算 賦值運算 矩陣的表示 繪製直方圖 獲取矩陣的尺寸 載入檔案 清空變數 擷取矩陣部分元素