Python-机器学习(二)-K近邻算法的原理与鸢尾花数据集实现详解

如上图所示,其中蓝色小方块红色三角形分别代表两种不同的样本数据,而带有问好的绿色小圆圈则表示待分类数据,我们如何来给这个绿色小圆圈进行分类正是我们的目的

  • 如果K=3,绿色圆点的最邻近的3个点是2个红色小三角形和1个蓝色小正方形,**少数从属于多数,**基于统计的方法,判定绿色的这个待分类点应该归属于红色的三角形一类。

  • 如果K=5,绿色圆点的最邻近的5个邻居是2个红色三角形和3个蓝色的正方形,**少数从属于多数,**基于统计的方法,判定绿色的这个待分类点应该归属于蓝色的正方形一类。

  • 是不是比较容易理解那?下面我们来进行各总结:

  • 该算法的核心思想:不标记样本的类别,由距离其最近的K个邻居投票来决定,所以K值的选择比较关键

  • 该算法的原理:计算待标记的数据样本和数据集中每个样本的距离,取距离最近的k个样本。待标记的数据样本所属的类别,就由这k个距离最近的样本投票产生。

  • 但在实际运用中,我们应该如何判断K的取值那?

make_blobs这个函数是用来生成数据的

font = {‘family’:“SimHei”,‘size’:20}

plt.rc(‘font’,**font)

##正常显示负号

plt.rcParams[‘axes.unicode_minus’]=False

from sklearn.datasets import make_blobs

#设置中心点

centers = [[-2,2],[2,2],[0,4]]

#n_samples的意思是要生成多少个样本数量

centers的意思是围绕着哪些点生成, cluster_std表示标准差生成的点离着多远

x,y=make_blobs(n_samples=50,centers=centers,cluster_std=0.6)

plt.figure(figsize=(16,10))

c=np.array(centers)

plt.scatter(x[:,0],x[:,1],c=y,s=100,cmap=‘cool’)

#中心点绘制

plt.scatter(c[:,0],c[:,1],s=100,marker=‘*’,c=‘black’)

plt.show()

如图可以看到 三个维度的数据及其中心点,使用KNeighborsClassifier 对算法进行训练

from sklearn.neighbors import KNeighborsClassifier

k=5

#对模型训练

clf = KNeighborsClassifier(n_neighbors=k)

clf.fit(x,y)

#对样本进行预测

x_sample = [[0,2]]

neighbors = clf.kneighbors(x_sample)

neighbors[1]

plt.figure(figsize=(16,10))

plt.scatter(x[:,0],x[:,1], c=y, s=100, cmap=‘cool’)

中心点画一下

plt.scatter(c[:,0],c[:,1], s= 100, marker=“^”, c=‘black’)

#画出待预测的点

plt.scatter(x_sample[0][0],x_sample[0][1],marker=‘*’,s=200,cmap=‘cool’)

把预测点与距离最近的5个样本连成线

for i in neighbors[1][0]:

plt.plot([x[i][0], x_sample[0][0]], [x[i][1],x_sample[0][1]], ‘k–’, linewidth=0.6)

plt.show()

鸢尾花数据集


  • Iris 鸢尾花数据集内包含 3 类分别为山鸢尾、虹膜锦葵、变色鸢尾,共 150 条记录,每类各 50 个数据,每条记录都有 4 项特征:萼片长度、萼片宽度、花瓣长度、花瓣宽度,可以通过这4个特征预测鸢尾花卉属于哪一品种。

rom sklearn.datasets import load_iris

iris=load_iris()

iris_data=iris.data

iris_data

#获取样本标记值

iris_target = iris.target

iris_target

##target是一个数组,存储了data中每条记录属于哪一类鸢尾植物,

##所以数组的长度是150

##划分训练集和测试集

x_train,x_test,y_train,y_test= train_test_split(iris_data,iris_target,test_size=0.25)

训一下

knn = KNeighborsClassifier(n_neighbors=5)

knn.fit(x_train,y_train)

y_predict = knn.predict(x_test)

##展示一下预测结果

labels=[‘山鸢尾’,‘虹膜锦葵’,‘变色鸢尾’]

for i in range(len(y_predict)):

print(“第%d次测试:真实值是%s,预测值是%s” % ((i+1),labels[y_predict[i]],labels[y_test[i]]))


学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值