Einführung
In diesem Lab werden wir den K-Nearest-Neighbors-Algorithmus erkunden, ein leistungsstarkes Tool zur Klassifizierung von Datenpunkten. Indem wir diesen Algorithmus in JavaScript implementieren, werden wir in der Lage sein, neue Datenpunkte zu klassifizieren, basierend auf ihrer Nähe zu vorhandenen markierten Datenpunkten, was ihn zu einem wertvollen Tool für eine Vielzahl von Anwendungen wie Empfehlungssystemen und Bilderkennung macht. Durch dieses Lab werden wir ein tieferes Verständnis dafür gewinnen, wie maschinelle Lernalgorithmen funktionieren und wie sie in realen Szenarien implementiert werden können.
K-Nearest-Neighbors-Algorithmus
Um den K-Nearest-Neighbors-Algorithmus zu verwenden, führen Sie die folgenden Schritte aus:
- Öffnen Sie das Terminal/SSH und geben Sie
nodeein. - Klassifizieren Sie einen Datenpunkt relativ zu einem markierten Datensatz mit dem k-nearest neighbors-Algorithmus.
- Abbilden Sie die
dataauf Objekte mitArray.prototype.map(). Jedes Objekt enthält die euklidische Entfernung des Elements vonpoint, berechnet mitMath.hypot(),Object.keys()und seinemlabel. - Verwenden Sie
Array.prototype.sort()undArray.prototype.slice(), um dieknächsten Nachbarn vonpointzu erhalten. - Verwenden Sie
Array.prototype.reduce()in Kombination mitObject.keys()undArray.prototype.indexOf(), um das am häufigsten vorkommendelabelunter ihnen zu finden.
Hier ist ein Beispielcode, der den K-Nearest-Neighbors-Algorithmus implementiert:
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;
};
So verwenden Sie den Code:
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
Zusammenfassung
Herzlichen Glückwunsch! Sie haben das K-Nearest-Neighbors-Lab abgeschlossen. Sie können in LabEx weitere Labs ausprobieren, um Ihre Fähigkeiten zu verbessern.