机器学习–DIY笔记与感悟–①K-临近算法

机器学习–DIY笔记与感悟–①K-临近算法 标签:nump tps .sh 结果 mat pr

机器学习–DIY笔记与感悟–①K-临近算法

标签:numptps.sh结果matprocessfontalt机器

##“计算机出身要紧跟潮流”

机器学习作为如今发展的趋势需要被我们所掌握。而今我也需要开始learn机器学习,并将之后的所作所想记录在此。

今天我开始第一课–K临近算法。

一、k-临近的基础概念理解

学习开始前,我将用最简单的话来解释k-临近算法的思想。

K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

简单来说,当我们有一定数量的训练值后(例如 Y1(a,b),Y2(c,d),Y3(e,f)…..这些数据属于不同的类型)我们就可以把这些点画到二维坐标系中,然后当你拿到一个新的未知数据类型的数据时,你可以把X(x1,x2)放到坐标系上,并测出未知量X与坐标系中所有点的距离,取最近的k个点(这个k是你自己设置的)。之后取这K个值中类型占比最大的那一个作为未知X的类型。

下面是算法的流程总结:

1)计算测试数据与各个训练数据之间的距离;

2)按照距离的递增关系进行排序;

3)选取距离最小的K个点;

4)确定前K个点所在类别的出现频率;

5)返回前K个点中出现频率最高的类别作为测试数据的预测分类。

二、KNN算法设计

这里首先将这个基础的knn算法用python写出来,我这里使用了python-2.7.10的版本。

这里是用了knn算法,测试样例是四个电影,共有两种类型,每种电影均有两个参数(电影中打斗次数与亲吻次数—二维的数据)。

最终实现给出某一部电影的打斗次数+亲吻次数来预测这是什么类型的电影。

#coding:utf-8
import operator
import numpy as np
def createData():
group = np.array([[1,101],[5,89],[108,5],[115,8]])
labels = [‘爱情片‘,‘爱情片‘,‘动作片‘,‘动作片‘]
return group, labels

#—————————–

def classfy(X,dataArray,labels,k):
dataSize = dataArray.shape[0]
#传入dataArray二维数组的行数
diffMat = np.tile(X,(dataSize,1)) – dataArray
#tile函数是将X这个数组以在二维里重复datasize次:https://docs.scipy.org/doc/numpy/reference/generated/numpy.tile.html
squareMat = diffMat**2
#将diffMat平方(为了算距离)

作者: 大白菜装机

为您推荐

返回顶部