php机器学习算法之KNearestNeighbors的一个简单的例子

时间:2017-12-15 14:50:33 阅读:607次
php机器学习算法之KNearestNeighbors

K -近邻算法(KNN:k-Nearest Neighbors)

算法基本思想:物以类聚,人以群分

存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最相邻)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不大于20的整数。最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类(可理解为:k个邻居对未知标签数据分类进行一个投票选择)。

算法举例:

根据电影中出现的接吻镜头和打斗镜头的次数来判断一个未知电影是爱情片还是动作片。


名称打斗次数接吻次数电影类型
电影1
3104
爱情片
电影22100爱情片
电影3181爱情片
电影410110动作片
电影5995动作片
电影6982动作片
未知电影18
90??

然后,计算未知电影与样本集中其他电影的距离(这里,可以采用欧式距离):

电影名称与未知电影的距离
电影1225+196取根=20.518
电影2256+100取根=18.867
电影3289+81取根=19.235
电影46889+6400取根=115.277
电影56561+7225取根=117.413
电影66400+7744取根=118.928

假定k=3,则选择例未知电影最近的3个电影(电影1,电影2,电影3)

最后,我们统计邻居中的分类结果(邻居进行投票选择),并将最多的分类结果定为未知电影的分类结果。上述的3部电影均属于爱情片,因此未知电影被判断为一部爱情片。


算法的优缺点及适用范围:

优点:精度高、对异常值不敏感、无数据输入假定;

缺点:计算复杂度高、空间复杂度高。(PS:上述例子仅为最为简单二分类,所以是二维问题,一旦分类数目增加,相应的空间复杂度也会骤增;此外,对未知量进行分类,需要对其与所有训练样本的距离进行求解,对于大规模问题,计算复杂度高);

适应数据范围:数值型和标称型。


#电影类型 1爱情片 2动作片
use Phpml\Classification\KNearestNeighbors;
$samples = [[3, 104], [2, 100], [1, 81], [101, 10], [99, 5], [98, 2]];
$labels = ['1', '1', '1', '2', '2', '2'];

$classifier = new KNearestNeighbors();
$classifier->train($samples, $labels);

echo $classifier->predict([18, 90]);
//运行结果1 为爱情片

扫描二维码关注程序员爱笔记,接收更多资讯

评论

快速评论