Sklearn中的knn算法基本讲解

sklearn扩展包内置数据集

数据是机器学习的关键,在机器学习工作中我们需要花费大量的时间来采集和整理数据,
合理且科学的数据是得到良好机器学习效果的关键。
一般而言,一个分类问题的机器学习过程需要用到四块数据内容,分别是:
    - 训练数据,一般用`train`来表示
    - 训练数据的分类属性,一般用`target`来表示
    - 测试数据,一般用`test`来表示
    - 测试数据的真实分类属性,用于评估分类器性能,一般用`expected`来表示

为了方便学习和测试机器学习中的各种内容,sklearn内置了各种有用的数据集,文本处理、图像识别等具有代表性的问题的数据在sklearn中均有收集(对于初学者来说,不得不说很人性化)。

本文中用的鸢尾花数据集同样可以在sklearn中的`datasets`模块中找到。
复制代码

KNN算法实现

不多说,直接先上代码,后面再进行详解。
复制代码
#-*-coding:utf-8 -*-
from sklearn import datasets 
#导入内置数据集模块 

from sklearn.neighbors import KNeighborsClassifier 
#导入sklearn.neighbors模块中KNN类

import numpy as np 
np.random.seed(0) 
#设置随机种子,不设置的话默认是按`系统时间`作为参数,因此每次调用随机模块时产生的随机数都不一样设置后每次产生的一样

iris=datasets.load_iris() 
#导入鸢尾花的数据集,iris是一个类似于结构体的东西,内部有样本数据,如果是监督学习还有标签数据

iris_x=iris.data 
#样本数据150*4二维数据,代表150个样本,每个样本4个属性分别为花瓣和花萼的长、宽

iris_y=iris.target 
#长150的以为数组,样本数据的标签

indices = np.random.permutation(len(iris_x)) 
#permutation接收一个数作为参数(150),产生一个0-149一维数组,只不过是随机打乱的,当然她也可以接收一个一维数组作为参数,结果是直接对这个数组打乱
iris_x_train = iris_x[indices[:-10]]
 #随机选取140个样本作为训练数据集
iris_y_train = iris_y[indices[:-10]] 
#并且选取这140个样本的标签作为训练数据集的标签
iris_x_test = iris_x[indices[-10:]]
 #剩下的10个样本作为测试数据集
iris_y_test = iris_y[indices[-10:]] 
#并且把剩下10个样本对应标签作为测试数据及的标签

knn = KNeighborsClassifier()  
#初始化一个knn分类器对象

knn.fit(iris_x_train,iris_y_train) 
#调用该对象的训练方法,主要接收两个参数:训练数据集及其样本标签

iris_y_predict = knn.predict(iris_x_test) 
#调用该对象的测试方法,主要接收一个参数:测试数据集

probility=knn.predict_proba(iris_x_test)  
#计算各测试样本基于概率的预测

neighborpoint=knn.kneighbors(iris_x_test[-1],5,False)
#计算与最后一个测试样本距离在最近的5个点,返回的是这些样本的序号组成的数组

score=knn.score(iris_x_test,iris_y_test,sample_weight=None)
#调用该对象的打分方法,计算出准确率

print('iris_y_predict = ')  
print(iris_y_predict)  
#输出测试的结果

print('iris_y_test = ')
print(iris_y_test) 
#输出原始测试数据集的正确标签,以方便对比

print 'Accuracy:',score  
#输出准确率计算结果

print 'neighborpoint of last test sample:',neighborpoint

print 'probility:',probility

#结果输出:
iris_y_predict = 
[1 2 1 0 0 0 2 1 2 0]
iris_y_test = 
[1 1 1 0 0 0 2 1 2 0]
Accuracy: 0.9
neighborpoint of last test sample: [[ 75  41  96  78 123]]
probility: [[ 0.   1.   0. ]
        [ 0.   0.4  0.6]
        [ 0.   1.   0. ]
        [ 1.   0.   0. ]
        [ 1.   0.   0. ]
        [ 1.   0.   0. ]
        [ 0.   0.   1. ]
        [ 0.   1.   0. ]
        [ 0.   0.   1. ]
        [ 1.   0.   0. ]]
复制代码
在KNeighborsClassifier类的初始化的时候,有几个参数可以指定,
n_neighbors=5           
    int 型参数,
    knn算法中指定以最近的几个最近邻样本具有投票权,默认参数为5
    
weights='uniform'       
    str参数,即每个拥有投票权的样本是按什么比重投票,
    'uniform'表示等比重投票,
    'distance'表示按距离反比投票,
    默认参数为‘uniform’
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享