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)
先使用一些数据对这个分类进行训练。