はじめに
この実験では、データポイントの分類に強力なツールである K 近傍法(K-Nearest Neighbors algorithm)を検討します。このアルゴリズムを JavaScript で実装することで、新しいデータポイントを既存のラベル付きデータポイントとの近さに基づいて分類することができます。これは、推薦システムや画像認識など、さまざまなアプリケーションにとって価値のあるツールになります。この実験を通じて、機械学習アルゴリズムがどのように機能するか、また現実世界のシナリオでどのように実装できるかを深く理解することができます。
K 近傍法(K-Nearest Neighbors Algorithm)
K 近傍法を使用するには、次の手順に従います。
- ターミナル/SSH を開き、
nodeと入力します。 - k 近傍法を使用して、ラベル付きデータセットに対するデータポイントを分類します。
Array.prototype.map()を使用して、dataをオブジェクトにマッピングします。各オブジェクトには、Math.hypot()、Object.keys()を使用して計算された、要素からpointまでのユークリッド距離とそのlabelが含まれます。Array.prototype.sort()とArray.prototype.slice()を使用して、pointの最も近いk個の近傍を取得します。Array.prototype.reduce()をObject.keys()とArray.prototype.indexOf()と組み合わせて使用して、それらの中で最も頻繁なlabelを見つけます。
以下は、K 近傍法を実装したコードの例です。
const kNearestNeighbors = (data, labels, point, k = 3) => {
const kNearest = data
.map((el, i) => ({
dist: Math.hypot(...Object.keys(el).map((key) => point[key] - el[key])),
label: labels[i]
}))
.sort((a, b) => a.dist - b.dist)
.slice(0, k);
return kNearest.reduce(
(acc, { label }, i) => {
acc.classCounts[label] =
Object.keys(acc.classCounts).indexOf(label) !== -1
? acc.classCounts[label] + 1
: 1;
if (acc.classCounts[label] > acc.topClassCount) {
acc.topClassCount = acc.classCounts[label];
acc.topClass = label;
}
return acc;
},
{
classCounts: {},
topClass: kNearest[0].label,
topClassCount: 0
}
).topClass;
};
このコードの使い方は以下の通りです。
const data = [
[0, 0],
[0, 1],
[1, 3],
[2, 0]
];
const labels = [0, 1, 1, 0];
kNearestNeighbors(data, labels, [1, 2], 2); // 1
kNearestNeighbors(data, labels, [1, 0], 2); // 0
まとめ
おめでとうございます!あなたは K 近傍法の実験を完了しました。あなたのスキルを向上させるために、LabEx でさらに多くの実験を行って練習することができます。