Chapter 7: Exercises

  1. (*)高斯函數的計算: 請寫一個函數 gaussian.m,可用來計算高斯函數,其用法如下:
    out = gaussian(data, mu, sigma);
    輸入和輸出變數的說明如下:
    • data:d×n 的資料向量,代表 n 點資料,每一點的維度是 d。
    • mu:維度是 d×1 的平均值向量。
    • sigma:共變異矩陣,維度是 d×d
    • out:1×n 的輸出向量
    若要測試你的函數,可用 gaussianPlot01.m 來畫出一維的高斯函數,或是用 gaussianPlot02.m 來畫出二維的高斯函數。
    (提示:若能夠不使用迴圈來完成,將有加分。)
    解答:請見 Audio Toolbox。
  2. (*)高斯函數的MLE: 請寫一個函數 gaussianMle.m,用法如下
    [mu, sigma] = gaussianMle(data);
    輸入和輸出變數的說明如下:
    • data:d×n 的資料向量,代表 n 點資料,每一點的維度是 d。
    • mu:維度是 d×1 的平均值向量。
    • sigma:共變異矩陣,維度是 d×d
    (提示:若能夠不使用迴圈來完成,將有加分。)
    解答:請見 Audio Toolbox。
  3. (*)高斯函數的MLE的範例一: 利用上述的 gaussian.m 及 gaussianMle.m,完成下列事項:
    1. 假設資料是由下列程式碼產生:
      dataNum=1000; data = randn(1, dataNum);
    2. 使用 gaussianMle.m 找出最好的 mu 和 sigma。
    3. 使用 gaussian.m 畫出所得到的高斯函數曲線。
    4. 使用 hist.m 畫出資料的質方圖(Histogram)。請調整 bin 的數目,使得質方圖和上述所得的高斯曲線越接近越好。請問你的 bin 的數目為何?
    5. 你所得到的高斯函數必須乘上一個常數 k,才可以接近質方圖,請問這個常數如何計算?在這個習題中,你所得到的 k 值是多少?
  4. (*)高斯函數的MLE的範例二: 重複上一題,但是改用二維資料:
    dataNum=1000; x=randn(1, dataNum); y=randn(1, dataNum)/2; data=[x; x+y]; plot(data(1, :), data(2,:), '.');
  5. (**)GMM的計算: 請寫一個函數 gmmEval(),可用來計算高斯函數,其用法如下:
    out = gmmEval(data, mu, sigma, w);
    輸入和輸出變數的說明如下:
    • data:d×n 的資料向量,代表 n 點資料,每一點的維度是 d。
    • mu:維度是 d×m 的平均值向量,代表有 m 個平均值向量。
    • sigma:GMM 的共變異矩陣,維度是 1×m 或 m×1,代表第 i 個 mixture 的共變異矩陣是 sigma(i)*eye(d)。
    • w:每一個 mixture 的權重,維度是 1×m 或 m×1,且其總和要等於 1。
    • out:1×n 的輸出向量
  6. (***)GMM的MLE: 請寫一個函數 gmmTrain(),用法如下
    [mu, sigma, w, logProb] = gmmTrain(data, m)
    輸入和輸出變數的說明如下:
    • data:d×n 的資料向量,代表 n 點資料,每一點的維度是 d。
    • m:mixture 的個數。
    • mu:維度是 d×m 的平均值向量,代表有 m 個平均值向量。
    • sigma:GMM 的共變異矩陣,維度是 1×m 或 m×1,代表第 i 個 mixture 的共變異矩陣是 sigma(i)*eye(d)。
    • w:每一個 mixture 的權重,維度是 1×m 或 m×1,且其總和要等於 1。
  7. (*)GMM的MLE的範例一: 利用上述的 gmmEval 及 gmmTrain,完成下列事項:
    1. 假設資料是由下列程式碼產生:
      dataNum = 1000; data1 = randn(1,2*dataNum); data2 = randn(1,3*dataNum)/2+2; data3 = randn(1,1*dataNum)/3-2; data = [data1, data2, data3]; binNum = 50; hist(data, binNum);
    2. 假設 mixture 的個數是 3,使用 gmmTrain 找出最好的 mu、sigma、w。
    3. 使用 gmmEval 畫出所得到的 GMM 函數曲線。
    4. 使用 hist.m 畫出資料的質方圖(Histogram)。請調整 bin 的數目,使得質方圖和上述所得的高斯曲線越接近越好。請問你的 bin 的數目為何?
  8. (*)高斯函數的MLE的範例二: 重複上一題,但是改用二維資料:
    dataNum = 6000; data0 = randn2(dataNum)'; mag = sqrt(sum(data0.^2)); data = data0(:, mag>0.4 & mag<1.0); plot(data(1, :), data(2,:), '.'); axis square
    同時將 mixture 的個數改為 8。
  9. (**)使用GMM對IRIS資料進行LOO的辨識率估測之一: 請仿造此範例,但改用 2-fold cross validation 的方法來測試辨識率。
  10. (**)使用GMM對IRIS資料進行LOO的辨識率估測之二: 請仿造此範例,但改用 leave-one-out 的方法來測試辨識率。
    (提示:可用 DS=prData('iris') 來取得 IRIS 的所有資料。)
  11. (**)使用GMM對IRIS資料進行LOO的辨識率估測之三: 請仿造此範例,但改用 2-fold cross validation 的方法來測試辨識率,並畫出相關圖形。
  12. (**)使用GMM對IRIS資料進行LOO的辨識率估測之四: 請仿造此範例,但改用 leave-one-out 的方法來測試辨識率,並畫出相關圖形。請注意:
    • 可用 DS=prData('iris') 來取得 IRIS 的所有資料。
    • 畫出的圖形,也應該有兩條曲線,分別代表 Inside test 和 Outside test 的辨識率。
    • 若資料量不足,導致無法完成 k-means 的分群而產生錯誤,可以酌量降低高斯函數的個數,以求能夠跑出結果。
  13. (**)使用GMM對母音資料進行LOO的辨識率估測: 重複上題,但將資料集改為此作業 「計算中文母音MFCC並進行分類」之母音資料。

Data Clustering and Pattern Recognition (資料分群與樣式辨認)