人工智能/模式识别/机器学习精华专题机器学习与数据挖掘

分类算法-k近邻分类器

2018-05-10  本文已影响5人  奋斗青春无悔

前言

此程序基于鸢尾花数据分类实验。

使用k近邻分类器(KNeighborsClassifier)模型实现分类任务。

本程序可以流畅运行于Python3.6环境,但是Python2.x版本需要修正的地方也已经在注释中说明。

requirements: scikit-learn

想查看其他经典算法实现可以关注查看本人其他文集。

实验结果分析

K近邻分类是非常直观的机器学习模型,K近邻算法与其他模型最大的不同在于该模型没有参数训练过程,也就是说,我们并没有通过任何学习算法分析训练数据,只是根据测试样本在训练数据的分布直接做出分类决策,因此,K近邻算法属于无参数模型中非常简单的一种。正因如此,导致其非常高的计算复杂度和内存消耗。因为该模型每处理一个测试样本,都需要对所有预先加载在内存的训练样本进行遍历,逐一计算相似度,排序并且选取K个最近邻训练样本的标记,进而做出分类决策。因此此算法时间复杂度是二次方量级,一旦数据规模稍大,使用者便需要权衡更多计算时间的代价。

程序源码

#import iris data loader and load iris data

from sklearn.datasets import load_iris

iris=load_iris()

#check the scale of iris data

# print(iris.data.shape)

#check data description

# print(iris.DESCR)

#data preprocessing

#notes:you should import cross_valiation instead of model_valiation in python 2.7

#from sklearn.cross_validation import train_test_split #DeprecationWarning

from sklearn.model_selection import train_test_split #use train_test_split module of sklearn.model_valiation to split data

#take 25 percent of data randomly for testing,and others for training

X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.25,random_state=33)

#import data standardizition moudle StandardScaler

from sklearn.preprocessing import StandardScaler

#import KNeighborsClassifier model

from sklearn.neighbors import KNeighborsClassifier

#standardizing data in train set and test set

ss=StandardScaler()

X_train=ss.fit_transform(X_train)

X_test=ss.transform(X_test)

#initializing knn classifier

knc=KNeighborsClassifier()

#trianing model with train sets

knc.fit(X_train,y_train)

#predict the target class of test sets

y_predict=knc.predict(X_test)

#print accuracy of knn classifier by default score function

print('The accuracy of K-Nearest Neighbor Classifier is',knc.score(X_test,y_test))

#import classification report module to compute precision,recall and f1-score performance

from sklearn.metrics import classification_report

print(classification_report(y_test,y_predict,target_names=iris.target_names))

Ubuntu16.04 Python3.6 程序输出结果:

The accuracy of K-Nearest Neighbor Classifier is 0.8947368421052632

            precision    recall  f1-score  support

    setosa      1.00      1.00      1.00        8

versicolor      0.73      1.00      0.85        11

  virginica      1.00      0.79      0.88        19

avg / total      0.92      0.89      0.90        38

[Finished in 0.4s]

第一次运行时由于需要装载到内存中,所以耗时较长,为5.9s,上述结果为第二次运行结果

欢迎指正错误,包括英语和程序错误。有问题也欢迎提问,一起加油一起进步。

本程序完全是本人逐字符输入的劳动结果,转载请注明出处。

上一篇下一篇

猜你喜欢

热点阅读