分类算法-k近邻分类器
前言
此程序基于鸢尾花数据分类实验。
使用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,上述结果为第二次运行结果
欢迎指正错误,包括英语和程序错误。有问题也欢迎提问,一起加油一起进步。
本程序完全是本人逐字符输入的劳动结果,转载请注明出处。