使用Scikit简单实现KNN Classification

浏览: 1246

image.png

在没有接触机器学习之前,我就听说过CNN,KNN。本以为这两者是孪生兄弟来着,然后我就打算先了解CNN,谁知智商限制了我的想象,刚开始的我对CNN完成不能理解,导致我对KNN也存在一种畏惧感。

其实KNN是很通俗易懂。

想象你把所有的样本散开在一个空间内。如下图分为两类:白色和橙色。

现在有一个新来的蓝色数据,请问它属于白色类呢?还是橙色类呢?

image.png

一般性的,如果蓝色和白色相似性高,那就是白色类,相反地,那就是橙色组。

这里的相似性,可以用距离来衡量。距离越近,那相似性越高。

这是我对KNN的理解,如果有什么不对的,请大家指出。

下面我们用scikit来实现knn分类。

这里的数据来源University of California, Irvine机器学习数据资源

我使用的是很常见的Breast Cancer Data Set

image.png

其实scikit learn 里面也有自带这个数据,可以通过

from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()

步骤一:下载数据

步骤二:给数据加上列名称,因为下载的数据没有列名呢。

id
clump_thickness
unif_cell_size
unif_cell_shape
marg_adhession
single_epith_cell
bare_nuclei
bland_chrom
norm_nucleoli
mitoses
class

步骤三:开始代码之旅

from sklearn import neighbors,cross_validation,preprocessing 
import pandas as pd
import numpy as np

#用pandas读取数据
df = pd.read_csv('breast-cancer-wisconsin.data.txt')

#因为有数据缺失的情况,并且是用"?"代替,所以我这里用-99999来替代"?"
df.replace('?',-99999,inplace= True)

#因为id对分类结果没有任务关系,所以这里我删掉了id列
df.drop('id',axis=1,inplace =True)

#将特征放入到X,分类结果放入到y
X = np.array(df.drop('class',axis = 1))
y = np.array(df['class'])

X_train,X_test,y_train,y_test = cross_validation.train_test_split(X,y,test_size = 0.2)

clf = neighbors.KNeighborsClassifier()
clf.fit(X_train,y_train)

#打印出模型的准确率
print(clf.score(X_test,y_test))

步骤四:运行代码

步骤五:使用模型预测分类结果

example = np.array([7,7,7,6,4,10,4,1,2])
example = example.reshape(1,-1)
result= clf.predict(example)
print (result)

感谢scikit,让我们可以直接使用这个黑盒子,但是为了更好地理解KNN,接下来我会分享如何自己从零开始写KNN算法。

推荐 0
本文由 生活缺乏心跳 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册