2.1.1.4K近邻分类


模型介绍:假设我们有一些携带分类标记的训练样本,分布于特征空间中。蓝色和绿色是已标记,红色是待分类。我们需要寻找与这个待分类的样本在特征空间中距离最近的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个最近邻训练样本的标记,进而做出分类决策。这是平方级别的算法复杂度,一旦数据规模稍大,使用者便需要权衡更多计算时间的代价。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容