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