模型介绍:假设我们有一些携带分类标记的训练样本,分布于特征空间中。蓝色和绿色是已标记,红色是待分类。我们需要寻找与这个待分类的样本在特征空间中距离最近的k个已标记样本作为参考,来帮助我们作出分类决策。假如K=3,则绿色样本2>蓝色样本1,假如K=7,则蓝色样本4>绿色样本3。随着K的不同,我们会获得不同效果的分类器。
读取lris数据集细节资料
from sklearn.datasets import load_iris
#使用加载器读取数据并且存入变量iris
iris=load_iris()
#查验数据规模
iris.data.shape
(150, 4)
#查看数据说明。对于一名机器学习的实践者来讲,这是个好习惯
print(iris.DESCR)
共有150个样本,并且均匀分布在3个不同的亚种,每个数据样本被4个不同的花瓣、花萼的形状特征所描述。
对lris数据集进行分割
from sklearn.cross_validation import train_test_split
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
ss=StandardScaler()
X_train=ss.fit_transform(X_train)
X_test=ss.transform(X_test)
from sklearn.neighbors import KNeighborsClassifier
knc=KNeighborsClassifier()
knc.fit(X_train,y_train)
y_predict=knc.predict(X_test)
对K近邻分类器在鸢尾花(lris)数据上的预测性能进行评估
print('The Accuracy of LinearSVC is',knc.score(X_test,y_test))
The Accuracy of LinearSVC is 0.894736842105
from sklearn.metrics import classification_report
print(classification_report(y_test,y_predict,target_names=iris.target_names))
特点分析
K近邻算法与其他模型最大的不同在于:该模型没有参数训练过程,只要根据测试样本在训练数据的分布直接做出分类决策。因此,K近邻属于无参数模型中非常简单的一种。然而,正是这样的决策算法,导致了其非常高的计算复杂度和内存消耗。因为该模型每处理一个测试样本,都需要对所有预先加载在内存的训练样本进行遍历、逐一计算相似度、排序并且选取K个最近邻训练样本的标记,进而做出分类决策。这是平方级别的算法复杂度,一旦数据规模稍大,使用者便需要权衡更多计算时间的代价。