Matlabマシンラーニング3(Machine Learning Onramp)

エンジニアリング機能

統計的性質を計算する(文字の形を定量化する)

文字の形状に関する情報を提供できる統計は何ですか?文字が異なれば、点の分布も異なります。

% 导入数据
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

% 计算字母b的比例
aratiob = range(b1.Y)/range(b1.X)
% 计算中值,使用omitnan参数消除NaN值的影响
medxb = median(b1.X,"omitnan")
medyb = median(b1.Y,"omitnan")

文字は、平均値が0になるように前処理されます(XおよびY)。異常値に対する中央値の感度は平均よりも低くなります。平均と中央値を比較することで、分布がどの程度非対称であるかを知ることができます。

% 平均绝对偏差(mean absolute deviation, MAD)
devxb = mad(b1.X)	% mad函数自动忽略NaNs
devyb = mad(b1.Y)

値の広がりの程度は、平均絶対偏差、標準偏差、および分散で測定できます。これらはそれぞれ、平均から逸脱するように計算されます。

次に、他の文字サンプルに対して統計的特性の計算が繰り返されます。次の図は、8文字のサンプルのここに写真の説明を挿入
文字bとdのアスペクト比と平均絶対偏差をプロットしています。実際、これらの統計的特性は、文字の形状の違いを反映している可能性があります。
ここに写真の説明を挿入
ここに写真の説明を挿入

ピークを見つける

極小値と極大値は通常、信号の重要な特性です。islocalminislocalmax機能は、ピーク値を見つけるの機能を実現することができます。

load sampleletters.mat
% islocalmin和islocalmax会返回一个与输入数据等长的向量,峰值处置1。
idxmin = islocalmin(m1.X)
idxmax = islocalmax(m1.X)

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

ここに写真の説明を挿入
局所的な最小値と最大値は、信号の各値のプロミネンスを計算することによって定義されます。顕著な値は、値と他の周囲の値との比較の尺度です。islocalminまたはislocalmaxから2番目の出力を取得することにより、信号の各ポイントの顕著な値を取得できます。

[idx,prom] = islocalmin(m1.X);
plot(m1.Time,prom)

ここに写真の説明を挿入

% 通过参数指定大于多少才是峰值
idxmin = islocalmin(m1.X,"MinProminence",0.1)
idxmax = islocalmax(m1.X,"MinProminence",0.1)

導関数を計算する

タブレットに書かれた文字を検出する重要な側面は、文字を書くプロセスで役立つ情報です。つまり、水平位置と垂直位置の傾きは時間とともに変化します。
離散データポイントの場合、推定速度は有限差v =Δx/Δtを使用して概算されます。

load sampleletters.mat
plot(m2.Time,m2.X)
grid
dX = diff(m2.X);
dT = diff(m2.Time);
dXdT = dX./dT;

diff関数は、2つの隣接する要素間の差を計算します。したがって、出力は入力より1要素少なくなります。描くときは注意が必要です。
ここに写真の説明を挿入
ここに写真の説明を挿入

% 观察dXdT和dYdT的最大值
maxdx = max(dXdT)
dYdT = diff(m2.Y)./dT;
maxdy = max(dYdT)
% 结果maxdx=4.2971; maxdy=Inf

データ収集プロセスの解像度の制限により、データにはいくつかの繰り返し値が含まれています。位置と時間が繰り返される場合、差は0であり、0/0 = NaNです。ただし、位置の値がごくわずかに異なる場合、導関数はInf(ゼロ以外を0で割った値)になります。

Infはどの有限値よりも大きいため、maxはNaNを無視しますが、Infは無視しないことに注意してください。ただし、このアプリケーションでは、NaNとInfの両方が繰り返しデータを表すため、無視できます。standardizeMissing関数を使用して、一連の値をNaNに変換できます

dYdT = standardizeMissing(dYdT,Inf);
maxdy = max(dYdT)

計算相関(相関)

ここに写真の説明を挿入
左側の信号のペアは、右側の信号のペアとは大幅に異なる形状をしています。しかし、2組の信号の関係は似ています。青い領域では、上の信号が増加し、下の信号が減少し、黄色の領域は反対です。相関は、信号の形状に関係なく、この類似性を測定しようとします。

文字Vの前半では、水平位置と垂直位置に強い線形負の相関があり、水平位置が増加し、垂直位置が比例して減少します。同様に、後半も正の相関が強く、水平位置が大きくなると垂直位置も比例して大きくなります。

% corr函数计算变量之间的线性相关。
load sampleletters.mat
plot(v2.X,v2.Y,"o-")
C = corr(v2.X,v2.Y)	% corr函数计算变量之间的线性相关。

両方の変数に欠落しているデータが含まれているため、CはNaNです。「行」オプションを使用して、値の欠落を回避する方法を指定できます。

C = corr(v2.X,v2.Y,"Rows","complete")

相関係数は常に-1から+1の間です。係数-1は完全に負の線形相関を示し、係数+1は完全に正の線形相関を示し、係数0は線形相関がないことを示します。この場合、計算は信号全体に対して実行されているため、中程度の相関しかありません。信号の2つの半分を別々に検討する方が便利な場合があります。

% 要计算每一对变量之间的相关性,可以向corr函数传递一个矩阵,其中每个变量是矩阵的一列。
M = [v2.X(1:11) v2.Y(1:11) v2.X(12:22) v2.Y(12:22)]
Cmat = corr(M,"Rows","complete")

自動化された特徴抽出

必要な特徴の抽出を決定したら、各サンプルのデータセットに適切な計算を適用する必要があります。このプロセスを自動化する最初のステップは、カスタム関数関数のデータを入力として受け取り、配列を出力として返すことです。

現在、スクリプトは特定の文字(変数文字に格納されている)の6つの特性を計算します。これらの6つの特性は、6つの別々の変数に格納されます。
table関数を使用して、個々の変数を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"];

デフォルトでは、table関数で作成されたテーブルにはデフォルトの変数名があります。テーブルにもっと便利な名前を付けるには、「VariableNames」オプションを使用します。

T = table(x、y、z、 'VariableNames'、["X"、 "Y"、 "Z"]);

通常、一重引用符または二重引用符を使用してオプション名を指定できます。ただし、文字列はテーブル内のデータを表すことができるため、「VariableNames」オプションを指定する場合は一重引用符が必要です。

feat = table(aratio,numXmin,numYmax,avgdX,avgdY,corrXY,'VariableNames',featurenames)

特徴の抽出を自動化するには、データが読み取られるたびに抽出機能を適用するためのデータストレージが必要です。前処理と同様に、変換されたデータストアを使用してこれを実行できます。
ここに写真の説明を挿入
生データの場合、通常、前処理機能と特徴抽出機能を同時に適用する必要があります。transform()関数を繰り返し適用して、元のデータストアに任意の数の変換を追加できます。

%.txt的文件存一个datastore
letterds = datastore("*.txt");
% 通过函数scale(),把datastore1预处理成另一个datastore2
preprocds = transform(letterds,@scale);
% 通过函数extract(),把datastore2中的特征值提取成另一个datastore3
featds = transform(preprocds,@extract);

data1 = readall(letterds)
data2 = readall(preprocds)
data3 = readall(featds)
scatter(data3.AspectRatio,data3.CorrXY)

extractBetween()関数を使用して、特定の文字列間のテキストを抽出できます。

% 提取原始datastore中的.Files字段数据。
knownchar = extractBetween(letterds.Files,"_","_")

ここに写真の説明を挿入
分類の問題の場合、通常、既知のラベルをカテゴリ変数として表すことが望ましいです。categorical()関数を使用して、配列をカテゴリ型に変換できます。

knownchar = categorical(knownchar)

ここに写真の説明を挿入
既知のクラスをトレーニングデータに関連付けると便利です。
gscatter()関数を使用して、x軸にAspectRatio、y軸にCorrXYのグループ化された分散プロットを作成し、文字ごとにグループ化します。

data.Character = knownchar
gscatter(data.AspectRatio,data.CorrXY,data.Character)

ここに写真の説明を挿入

分類モデル

機械学習モデルをトレーニングして使用し、予測を行います。

トレーニングモデル

letterdata.matには、2906文字のサンプルの機能データが含まれています。統計的測定、相関、ペンの最大/最小位置、速度、圧力など、25の機能があります。

load letterdata.mat
traindata

histogram(traindata.Character) % 画一下26个字母的直方图

ここに写真の説明を挿入
ボックスプロットは、複数の分布を視覚化する簡単な方法です。
boxplot(x、c)
これによりグラフが作成されます。グラフ内のボックスは、cの各クラスのx値の分布を表します。あるクラスのx値が別のクラスのx値と大幅に異なる場合、xはこれらのクラスを区別できる特性です。さまざまなクラスを区別できる機能が多ければ多いほど、完全なデータセットから正確な分類モデルを構築する可能性が高くなります。

boxplot(traindata.MADX,traindata.Character)

ここに写真の説明を挿入

分類モデルを使用して予測を行う

load letterdata.mat
traindata
knnmodel = fitcknn(traindata,"Character","NumNeighbors",5,"Standardize",true,"DistanceWeight","squaredinverse");
testdata

predLetter = predict(knnmodel,testdata)
misclassrate = sum(predLetter ~= testdata.Character)/numel(predLetter)

応答クラスは、トレーニングデータまたはテストデータで常に均等に分散されているとは限りません。損失は​​誤分類のより公正な尺度であり、各カテゴリの確率が含まれます(データの分布に基づく)。

testloss = loss(knnmodel,testdata)

既知の正しいクラスの任意のデータセットの損失を計算できます。元のトレーニングデータ(traindata)の損失を特定してみてください。これは、いわゆる再置換損失(モデルに「再置換」されるトレーニングデータの損失)です。knnmodelを使用して、交換損失を直接計算できます。

誤分類の調査(一般的な誤分類の特定)

予測結果と実際の結果の関係から、機械学習モデルの予測は4つのカテゴリーに分類でき、ここに写真の説明を挿入
これを混同行列呼びます。

誤分類の調査(機能の調査)

おすすめ

転載: blog.csdn.net/Explore_OuO/article/details/108890705