机器学习(五)

机器学习(五)

3.1 KNN算法

**

  • KNN算法又称为最近邻算法,主要基于测量不同特征值之间的距离方法进行分类,KNN算法可以对数据进行分类和回归处理。

**
机器学习(五)

3.2 KNN算法核心三要素

**

  1. 距离度量
  2. k取值
  3. 分类规则

**

3.2.1 邻近度度量

考虑的是两个点之间的距离,越相似,代表两个点距离越近。

1. 单个属性的度量
采用相似度度量,相似度s在0和1 之间取值,0代表不相似,1代表完全相似。另外还可以用相异度度量,方法同理,有时也在0和之间取值。
2. 二元数据的相似性度量
两个仅包含二元属性的对象之间的相似性度量也称为相似系数,并且通常在0和1之间取值,方法同理。

3. 对于两个n维向量
如果是直接物理量,可以用欧式距离、曼哈顿距离、闵可夫斯基距离方法等计算两个n维向量之间的距离。
机器学习(五)
机器学习(五)
机器学习(五)

4.对于文本分类而言,一般可以采用余弦定理计算两个n维向量之间的夹角确定相似度

3.2.2 如何选择k值

**

  • k值较小,相当于用较小邻域中的训练实例进行预测。

**

  • 应用中,一般选择较小的k值并且k取奇数,通常采用交叉验证的方法选取最合适的k值。

3.2.3 分类决策规则

KNN算法可以进行回归和分类预测,处理过程类似,区别主要是决策规则不同。

  • 做回归时:一般选择平均法,即最近的k个样本的样本输出的平均值作为回归预测值;
  • 做分类预测时:通常采用多数表决法,即训练集里和预测的样本特征最近的k个样本,决策类别时,预测为有最多类别数的类别。

3.3 Python实现KNN算法

from numpy import *
import operator
# 定义创建数据集函数
def createDataSet():
    # 数据存储到数组变量group中
    group = array([[1.0, 2.0], [1.2, 0.1], [0.1, 1.4], [0.3, 3.5]])
    # 定义标签变量
    labels = ['A', 'A', 'B', 'B']
    return group,labels

# 通过使用KNN算法进行分类
def classify(input,dataSet,label,k):
    # 定义存储数据集数组第一维度的长度的变量
    dataSize = dataSet.shape[0]
    # 计算欧氏距离,tile(A,rep)的功能是重复A的各个维度
    diff = tile(input,(dataSize,1)) - dataSet
    sqdiff = diff ** 2
    # 行向量分别相加,从而得到一个新的行向量
    squareDist = sum(sqdiff,axis=1)
    # 得到欧氏距离
    dist = squareDist ** 0.5
    # 对距离进行排序,argsort()根据元素的值排序,返回下标
    sortedDistIndex = argsort(dist)
    print(sortedDistIndex)
    # 定义空字典
    classCount={}
    for i in range(k):
        # 返回距离最近的k个点对应的标签值
        voteLabel = label[sortedDistIndex[i]]
        # 存放到字典当中
        classCount[voteLabel] = classCount.get(voteLabel,0)+1
    maxCount = 0
    for key,value in classCount.items():
        if value > maxCount:
            maxCount = value
            classes = key
    return classes

编写测试程序,验证一下效果:

import KNN
from numpy import *
dataSet,labels = KNN.createDataSet()
input = array([1.1,0.3])
k = 3
output = KNN.classify(input,dataSet,labels,k)
print("测试数据为:",input,"分类结果为:",output)

机器学习(五)

上一篇:Python创建自己的训练测试两用数据集Dataset类


下一篇:(完全解决)Dataset not found. You can use download=True to download it