机器学习和人工智能入门机器学习与数据挖掘机器学习

kNN算法

2018-06-11  本文已影响7人  洛克黄瓜

k-近邻算法(KNN)

输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应特征进行比较,然后提取样本集中特征最相似的分类标签。一般来说,选择样本集中前k个最相似的数据,这k个数据中出现次数最多的分类就是新数据的预测分类。

示例说明

预测电影类型,样本集是一系列的已知分类的电影,有两类:

k-近邻算法函数

import numpy as np
def classify_self(inX, dataSet, labels, k):
    '''
        自己抄一遍KNN的算法函数
        inX: 输入待预测的特征向量
        dataSet: 训练样本的特征值
        labels: 训练样本的目标值
        k: kNN的参数
    '''
    dataSetSize = dataSet.shape[0]
    diffMat = dataSet - np.tile(inX, (dataSetSize, 1))
    sqDiffMat = diffMat**2
    sqDistances = sqDiffMat.sum(axis=1)
    distances = sqDistances**0.5
    sortedDistIndicies = distances.argsort()
    classCount = {}
    for i in range(k):
        voteIlable = labels[sortedDistIndicies[i]]
        classCount[voteIlable] = classCount.get(voteIlable, 0) + 1
    sortedClassCount = sorted(classCount.items(), key= lambda x: x[1], reverse=True)
    return sortedClassCount[0][0]

数值归一化

有些特征的数值本身差异就大,不对数据处理就套用kNN就会放大这个差异大的特征的权重。

import numpy as np
def autoNorm(dataSet):
    minVals = dataSet.min(0)
    maxVals = dataSet.max(0)
    ranges = maxVals - minVals
    normDataSet = np.zeros(shape(dataSet))
    m = dataSet.shape[0]
    normDataSet = dataSet - np.tile(minVals, (m,1))
    normDataSet = normDataSet/tile(ranges, (m,1))   #element wise divide
    return normDataSet, ranges, minVals
上一篇 下一篇

猜你喜欢

热点阅读