算法图解第10章—K最近领算法

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)

先使用一些数据对这个分类进行训练。