Maltab-Machine Learning-Engineeringの機能

統計関数

中心的傾向の測定

関数 説明
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

 

おすすめ

転載: blog.csdn.net/seek97/article/details/108401821