統計関数
中心的傾向の測定
関数 | 説明 |
---|---|
mean |
算術平均 |
median |
中央値(中央)の値 |
mode |
最も頻繁な値 |
trimmean |
トリミングされた平均(平均、外れ値を除く) |
geomean |
幾何平均 |
harmean |
調和平均 |
広がり方
関数 | 説明 |
---|---|
range |
値の範囲(最大–最小) |
std |
標準偏差 |
var |
分散 |
mad |
平均絶対偏差 |
iqr |
四分位範囲(75パーセンタイルから25パーセンタイルを引いたもの) |
形の測度
関数 | 説明 |
---|---|
skewness |
歪度(3番目の中心モーメント) |
kurtosis |
尖度(4番目の中心モーメント) |
moment |
任意次数の中心モーメント |
基本統計を計算する
手順は左側の作業ウィンドウにあります。各タスクを1つずつ完了して送信します。
このコードはデータをロードしてプロットします。
load sampleletters.mat
plot(b1.Time,b1.X)
hold on
plot(b2.Time,b2.X)
hold off
plot(b1.Time,b1.Y)
hold on
plot(b2.Time,b2.Y)
hold off
タスク1
aratiob = range(b1.Y)/range(b1.X)
タスク2
medxb = median(b1.X,"omitnan")
medyb = median(b1.Y,"omitnan")
タスク3
devxb = mad(b1.X)
devyb = mad(b1.Y)
タスク4
aratiov = range(v1.Y)/range(v1.X)
medxd = median(d1.X,"omitnan")
medyd = median(d1.Y,"omitnan")
devxm = mad(m1.X)
devym = mad(m1.Y)
さらなる練習
plot(b1.X,b1.Y,b2.X,b2.Y)
axis([-1 1 -1 1])
axis equal
plot(d1.X,d1.Y,d2.X,d2.Y)
axis([-1 1 -1 1])
axis equal
信号のピークを見つける
手順は左側の作業ウィンドウにあります。各タスクを1つずつ完了して送信します。
このコードはデータをロードしてプロットします。
load sampleletters.mat
plot(m1.Time,m1.X)
タスク1
idxmin = islocalmin(m1.X)
idxmax = islocalmax(m1.X)
Visualize the results
plot(m1.Time,m1.X)
hold on
plot(m1.Time(idxmin),m1.X(idxmin),"o")
plot(m1.Time(idxmax),m1.X(idxmax),"s")
hold off
タスク2
[idx,prom] = islocalmin(m1.X);
plot(m1.Time,prom)
タスク3
idxmin = islocalmin(m1.X,"MinProminence",0.1)
idxmax = islocalmax(m1.X,"MinProminence",0.1)
さらなる練習
nnz(idxmin)
sum(idxmin)
デリバティブの計算
手順は左側の作業ウィンドウにあります。各タスクを1つずつ完了して送信します。
このコードはデータをロードしてプロットします。
load sampleletters.mat
plot(m2.Time,m2.X)
grid
タスク1
dX = diff(m2.X);
dT = diff(m2.Time);
タスク2
dXdT = dX./dT;
タスク3
plot(m2.Time(1:end-1),dXdT)
タスク4
maxdx = max(dXdT)
dYdT = diff(m2.Y)./dT;
maxdy = max(dYdT)
タスク5
dYdT = standardizeMissing(dYdT,Inf);
maxdy = max(dYdT)
さらなる練習
dYdT = standardizeMissing(dYdT,[-Inf 0 Inf]);
maxdy = max(dYdT)
相関の計算
手順は左側の作業ウィンドウにあります。各タスクを1つずつ完了して送信します。
このコードはデータをロードしてプロットします。
load sampleletters.mat
plot(v2.X,v2.Y,"o-")
タスク1
C = corr(v2.X,v2.Y)
タスク2
C = corr(v2.X,v2.Y,"Rows","complete")
タスク3
M = [v2.X(1:11) v2.Y(1:11) v2.X(12:22) v2.Y(12:22)]
タスク4
Cmat = corr(M,"Rows","complete")
特徴抽出関数を作成する
手順は左側の作業ウィンドウにあります。各タスクを1つずつ完了して送信します。
このコードはデータを読み込み、1文字のいくつかの特徴を計算します。
load sampleletters.mat
letter = b1;
aratio = range(letter.Y)/range(letter.X)
idxmin = islocalmin(letter.X,"MinProminence",0.1);
numXmin = nnz(idxmin)
idxmax = islocalmax(letter.Y,"MinProminence",0.1);
numYmax = nnz(idxmax)
dT = diff(letter.Time);
dXdT = diff(letter.X)./dT;
dYdT = diff(letter.Y)./dT;
avgdX = mean(dXdT,"omitnan")
avgdY = mean(dYdT,"omitnan")
corrXY = corr(letter.X,letter.Y,"rows","complete")
featurenames = ["AspectRatio","NumMinX","NumMinY","AvgU","AvgV","CorrXY"];
タスク1
feat = table(aratio,numXmin,numYmax,avgdX,avgdY,corrXY)
タスク2
feat = table(aratio,numXmin,numYmax,avgdX,avgdY,corrXY,'VariableNames',featurenames)
タスク3(下記に続く)
featB2 = extract(b2)
タスク3
function feat=extract(letter)
aratio = range(letter.Y)/range(letter.X)
idxmin = islocalmin(letter.X,"MinProminence",0.1);
numXmin = nnz(idxmin)
idxmax = islocalmax(letter.Y,"MinProminence",0.1);
numYmax = nnz(idxmax)
dT = diff(letter.Time);
dXdT = diff(letter.X)./dT;
dYdT = diff(letter.Y)./dT;
avgdX = mean(dXdT,"omitnan")
avgdY = mean(dYdT,"omitnan")
corrXY = corr(letter.X,letter.Y,"rows","complete")
featurenames = ["AspectRatio","NumMinX","NumMinY","AvgU","AvgV","CorrXY"];
feat = table(aratio,numXmin,numYmax,avgdX,avgdY,corrXY,'VariableNames',featurenames)
end
特徴抽出関数を追加する
手順は左側の作業ウィンドウにあります。各タスクを1つずつ完了して送信します。
このコードはデータストアを作成し、変換として前処理関数を追加します。
letterds = datastore("*.txt");
preprocds = transform(letterds,@scale)
タスク1
featds = transform(preprocds,@extract)
タスク2
data = readall(featds)
scatter(data.AspectRatio,data.CorrXY)
タスク3
knownchar = extractBetween(letterds.Files,"_","_")
タスク4
knownchar = categorical(knownchar)
タスク5
data.Character = knownchar
gscatter(data.AspectRatio,data.CorrXY,data.Character)
ローカル関数
function data = scale(data)
% Normalize time [0 1]
data.Time = (data.Time - data.Time(1))/(data.Time(end) - data.Time(1));
% Fix aspect ratio
data.X = 1.5*data.X;
% Center X & Y at (0,0)
data.X = data.X - mean(data.X,"omitnan");
data.Y = data.Y - mean(data.Y,"omitnan");
% Scale to have bounding box area = 1
scl = 1/sqrt(range(data.X)*range(data.Y));
data.X = scl*data.X;
data.Y = scl*data.Y;
end
function feat = extract(letter)
% Aspect ratio
aratio = range(letter.Y)/range(letter.X);
% Local max/mins
idxmin = islocalmin(letter.X,"MinProminence",0.1);
numXmin = nnz(idxmin);
idxmax = islocalmax(letter.Y,"MinProminence",0.1);
numYmax = nnz(idxmax);
% Velocity
dT = diff(letter.Time);
dXdT = diff(letter.X)./dT;
dYdT = diff(letter.Y)./dT;
avgdX = mean(dXdT,"omitnan");
avgdY = mean(dYdT,"omitnan");
% Correlation
corrXY = corr(letter.X,letter.Y,"rows","complete");
% Put it all together into a table
featurenames = ["AspectRatio","NumMinX","NumMinY","AvgU","AvgV","CorrXY"];
feat = table(aratio,numXmin,numYmax,avgdX,avgdY,corrXY,'VariableNames',featurenames);
end