KNN算法
毕达哥拉斯公式计算距离,这种距离指出了两组数字之间的相似程度。
const k1 = [2,2]
const k2 = [2,1]
const k3 = [4,5]
let minSum = 0;
function knn(kFirst, kNext){
let sum = 0
//求平方和
for (let i = 0; i < kFirst.length; i++) {
sum += Math.pow((kFirst[i] - kNext[i]), 2)
}
//平方根
let sumSquare = Math.sqrt(sum)
//取最小值
if(minSum!==0){
minSum = Math.min(minSum, sumSquare)
} else {
minSum = sumSquare
}
return minSum
}
knn(k1,k2)
knn(k1,k3)
knn(k2,k3)
console.log('minSum', minSum);
//minSum 1
打分的平均值就是回归。
KNN算法做两项基本工作:分类和回归
分类就是编组; 回归就是预测结果(如一个数字)。
KNN用于分类和回归,需要考虑最近的邻居。
求得邻近几个距离值的平均值,即回归。
//选取标本个数
let numSquare = 2
let minArr = [];
function knnRegress(kFirst, kNext){
let sum = 0
for (let i = 0; i < kFirst.length; i++) {
sum += Math.pow((kFirst[i] - kNext[i]), 2)
}
let sumSquare = Math.sqrt(sum)
minArr.push(sumSquare)
return minArr
}
knnRegress(k2,k3)
knnRegress(k1,k3)
knnRegress(k1,k2)
//最小值
let minNum = Math.min(...minArr)
//从小到达排列
let sortArr = minArr.sort(sortNum)
//取前四个最小值
let minSquareArr = sortArr.splice(0,numSquare)
let squareNum = 0;
minSquareArr.map((item) => {
squareNum += item
})
let regressNum = squareNum/numSquare
function sortNum(a,b){
return a-b
}
console.log('minNum', minNum);
console.log('regeress number', regressNum);
//minNum 1
//regeress number 2.302775637731995
特征抽取:挑选合适的特征,不偏不倚的特征。需要考虑各种需要考虑的因素。转化为一系列可比较的数字。
能否挑选合适的特征,事关 KNN 的成败。
复杂的 KNN 算法,需要考虑余弦相似度。
OCR
光学字符识别(optical character recognition),自动识别出照片中的文字。
第一步就是查看大量的数字图像并提取特征,这被称为训练。
垃圾邮件过滤器
朴素贝叶斯分类器(Native Bayes classifier)
先使用一些数据对这个分类进行训练。
