机器学习作为人工智能的重要分支,同时也是数据挖掘中不可或缺的算法支撑。本人接触时间不短,但研究尚浅。我计划用python来实现机器学习中较为常见的算法。

看透了自己,便无须小看别人。 (老舍)

机器学习

机器学习是一类算法的总称,可以分为监督学习和无监督学习。半监督学习是结合监督学习与无监督学习的一种机器学习方法,成为近几年的研究热点。这些算法试图从大量历史数据中挖掘出其中隐含的规律,并用于预测或分类。机器学习的目标是使学到的模型能很好地适用于“新样本”,具有泛化能力。此外,监督学习对应分类和回归,而无监督学习对应聚类和密度估计。半监督学习作为我读研期间的主要研究方向,后面会重点介绍个人的一些成果和心得感悟。下面介绍KNN算法,它非常有效且易于掌握。

KNN算法

k-近邻算法采用测量不同特征值之间的距离方法进行分类。

工作原理

1 有一个训练数据集,并且知道其中数据与其对应标签。
2 输入无标签的新数据之后,将新数据的每个特征和样本集中的数据对应的特征进行比较,然后提取样本数据集中最相似(距离最近)数据的分类标签;
3 把前k个数据标签中出现次数最多的分类,作为新数据的分类结果。

Demo代码

from numpy import *
import operator # 运算符模块(排序)
# from os import listdir

def createDataSet(): # 创建数据集和标签
    group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
    labels = ['A','A','B','B']
    return  group, labels

# k近邻算法
def classify(inX, dataSet, labels, k): # 待测坐标,训练集,标签,k
    dataSetSize = dataSet.shape[0] # 行数
    diffMat = tile(inX, (dataSetSize,1)) - dataSet
    sqDiffMat = diffMat**2
    sqDistances = sqDiffMat.sum(axis=1)
    distances = sqDistances**0.5 # 欧式距离
    sortedDistIndicies = distances.argsort() #对距离排序并用索引表示 [1 0 3 2]
    classCount={}
    for i in range(k):
        voteIlabel = labels[sortedDistIndicies[i]]
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1 # 对k近邻的类分别计数
    sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True) #对分类与计数的列表排序('A',2),('B',1)
    print (sortedClassCount[0][0])
if __name__ == '__main__':
    group,labels = createDataSet()
    classify([1,0.5],group,labels,3)


A # 分类结果

说明:本文是从相关博文的分享总结与补充而来,如有疑问,还望各位同仁与前辈指正。