K近邻(KNN)

作者: HeartGo | 来源:发表于2017-03-06 21:51 被阅读186次

    KNN概念

    kNN算法又称为k最近邻(k-nearest neighbor classification)分类算法。所谓的k最近邻,就是指最接近的k个邻居(数据),即每个样本都可以由它的K个邻居来表达。
    kNN算法的核心思想是,在一个含未知样本的空间,可以根据离这个样本最邻近的k个样本的数据类型来确定样本的数据类型。

    该算法涉及3个主要因素:训练集、距离与相似的衡量、k的大小;

    算法步骤:

    算法步骤:

    step.1---初始化距离为最大值

    step.2---计算未知样本和每个训练样本的距离dist

    step.3---得到目前K个最临近样本中的最大距离maxdist

    step.4---如果dist小于maxdist,则将该训练样本作为K-最近邻样本

    step.5---重复步骤2、3、4,直到未知样本和所有训练样本的距离都算完

    step.6---统计K-最近邻样本中每个类标号出现的次数

    step.7---选择出现频率最大的类标号作为未知样本的类标号

    KNN的实现

    选用“鸢尾”数据集来实现KNN算法

    #从sklearn.datasets导入iris导入数据
    from sklearn.datasets import load_iris
    #使用加载器i读取数据并且存入变量中
    iris=load_iris()
    #查看数据规模
    print(iris.data.shape)
    #查看数据说明
    print(iris.DESCR)
    #数据分割25%用于测试
    #导入 train_test_split用于数据分割
    from sklearn.cross_validation import train_test_split
    #从使用train_test_split,利用随机种子random_state采样25%的数据作为测试集
    X_train,X_test,Y_train,Y_test=train_test_split(iris.data,iris.target,test_size=0.25,random_state=33)
    from sklearn.preprocessing import StandardScaler
    from  sklearn.neighbors import KNeighborsClassifier
    #对数据进行标准化处理
    ss=StandardScaler()
    X_train=ss.fit_transform(X_train)
    X_test=ss.transform(X_test)
    #使用K近邻分类器对测试数据进行类别预测,预测结果储存在变量y_predict中
    knc=KNeighborsClassifier()
    knc.fit(X_train,Y_train)
    y_predict=knc.predict(X_test)
    #使用模型自带的评估函数进行准确性评测
    print('The accuracy of K-nearest Neighbor Classifier is ',knc.score(X_test,Y_test))
    #对预测结果进行分析
    from sklearn.metrics import classification_report
    print(classification_report(Y_test,y_predict,target_names=iris.target_names))
    

    数据说明如下:

    鸢尾数据说明

    结果如下:

    预测性能评估

    注:部分资料参考自范淼 李超《Python机器学习及实践》清华大学出版社 ,感谢!

    相关文章

      网友评论

        本文标题:K近邻(KNN)

        本文链接:https://www.haomeiwen.com/subject/tezugttx.html