python3机器学习经典算法与应用之K近邻算法

python机器学习算法应用

    • k近邻算法
    • K邻近算法实际应用
    • KNN过程

k近邻算法

优点:算法思想简单、应用数学知识少、可以解释机器学习算法使用过程中的很多细节问题、更完整地刻画机器学习应用的流程。很适合入门。

思想:已经知道的数据点分布在数据空间中。如何判断新加入的数据点的类别呢?
首先选定一个k值(根据经验取得),在空间中寻找所有的点中距离新加入的数据点最近的k个点,以这k个数据点其自己的label进行投票(也就是说权衡这几个数据点的label的值,认为label值最多的那个作为新数据点的label)。

相似性-----两个样本在数据空间中的距离进行描述。
k近邻算法可以用来解决监督式机器学习中的分类问题。k近邻算法其实也可以用来解决线性回归问题。

K邻近算法实际应用

首先准备两组数据,分别对应着每个样本的数据和其标签(类别)。然后创建训练集列表(numpy.array):x_train和y_train。
python3机器学习经典算法与应用之K近邻算法_第1张图片
使用pyplot将两种类别的样本的散点图绘制出来。
python3机器学习经典算法与应用之K近邻算法_第2张图片
先新加入一个数据点,其数据(特征值)为[6.093607318,2.365731514](见下图),假设k==3,然后可以发现最近的三个点都属于第0类别,所以根据KNN算法的思想,该数据点属于第0类别。在图中用蓝色点标记出来。
python3机器学习经典算法与应用之K近邻算法_第3张图片

KNN过程

  1. 创建距离列表,记录每一个点到新数据点的距离。
    欧拉距离公式:在每一个维度上两个点的维度值相减平方再加和开根号。在应用中则是样本a的第一个特征值减去样本b的第一个特征值的平方加上样本a的第二个特征值减去样本b的第二个特征值的平方,以此类推,一直加到样本a的第n个特征值减去样本b的第n个特征值的平方再开根号。
    python3机器学习经典算法与应用之K近邻算法_第4张图片
    python3机器学习经典算法与应用之K近邻算法_第5张图片
  2. 指定K值,然后获取前K个距离新数据点最近的样本点。(可以使用argsort获取前K个值的索引)
  3. 获取前K个距离新数据点最近的样本点的标签值。然后进行投票,也就是统计每一类的样本个数。
  4. 最后将样本数最多的类别的标签最晚最终的预测结果。

代码实现
首先创建distance列表,然后计算距离。上一段的代码可以使用下一段的一条语句替代。
python3机器学习经典算法与应用之K近邻算法_第6张图片
然后使用numpy.argsort()方法统计所有距离的大小并得出distance从小到大排序时元素在原来的数组(distance)中的索引。
python3机器学习经典算法与应用之K近邻算法_第7张图片
设置K值,取前K个距离新数据点最近的样本点的标签。然后我们要将这些标签进行计数,使用collections模块的Counter()函数进行统计。再使用most_common()方法查询出现次数最多的标签。这个标签就是我们最终的预测值
topK_y表示前K个距离新数据点最近的样本点的标签值。Counter()返回的数据结构类似于字典(键值对形式,键表示数据,值表示出现的次数)。括号内的参数表示返回前m个出现次数最多的数据,传递的参数为1,表示只返回一个出现频率最多的。后面再加一个索引[0]表示获取键值对的键,也就是标签值。
python3机器学习经典算法与应用之K近邻算法_第8张图片
python3机器学习经典算法与应用之K近邻算法_第9张图片

你可能感兴趣的:(Machine,Learning)