一. 作业题目

收集一些鸢尾花的数据,包括花瓣的长度和宽度(单位cm)。这些花被鉴定为属于setosa,versicolor,virgincia三个品种之一。构造一个机器模型,使用knn算法,从这些已知品种的鸢尾花数据中进行学习,预测新鸢尾花的品种,并计算出成功预测的概率。

二. 算法设计

KNN介绍:K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。KNN是通过测量不同特征值之间的距离进行分类。
思路:如果一个样本在特征空间中的k个最邻近的样本中的大多数属于某一个类别,则该样本也划分为这个类别。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。
  图一是KNN最常见的图,比较容易理解。要确定绿点属于哪个颜色(红色或者蓝色),要做的就是选出距离目标点距离最近的k个点,看这k个点的大多数颜色是什么颜色。当k取3的时候,我们可以看出距离最近的三个,分别是红色、红色、蓝色,因此得到目标点为红色。

设计:

  1. 导入pandas模块,读取存放了大量鸢尾花数据的csv文件,读取到的将是一个矩阵
  2. 将数据划分为训练集和测试集。利用随机数选出15个测试集,剩下的作为是数据集
  3. 使用KNN算法:
    (1) 计算测试数据与训练数据各个点的距离,一般使用到欧几里得公式

    而当点有多个维度时,距离为:

    (2) 将距离按从小到大排序
    (3) 选取距离最小的K个点;
    (4) 确定前K个点所在类别的出现频率;
    (5) 返回前K个点中出现频率最高的类别作为测试数据的预测分类
    4.将真实值与预测结果做对比,得出成功预测的概率

三. 源代码

import numpy as np
import pandas as pd
import operator#得到鸢尾花的数据
def getData():#读取自定义的文件,从中获得鸢尾花数据f = open('iris.csv')iris=pd.read_csv(f)return iris#将鸢尾花的数据分开为测试集与训练集
def Classification(iris):#得到15个随机数,从中选取15个作为随机数index=np.random.permutation(len(iris))index=index[0:15]#将测试集弄出来testSet=iris.take(index)#总的数据集减掉测试集就是训练集trainingSet=iris.drop(index)sets=[testSet,trainingSet]#分成了测试集和训练集print("数据集:\n")print(trainingSet)print("测试集:\n")print(testSet)return sets#K-近邻分析
#trainingSet训练数据,testSet是测试数据
def knn(trainingSet,testSet,trainingResults):#numpy函数shape[0]返回dataSet的行数totalsSize = trainingSet.shape[0]#将测试数据变成和训练数据一样的矩阵,把testSet分成totalSize行,1列的矩阵tests = np.tile(testSet, (totalsSize, 1)) - trainingSet#二维特征相减后平方后开根sqDiffMat =(tests**2)**0.5#sum()所有元素相加sqDistances = sqDiffMat.sum(axis=1)#sum(axis=1)等于1是行的相加,axis=0是列的相加#返回distances中元素从小到大排序后的索引值,即取距离近的sortedDistIndices = sqDistances .argsort()#取出第一个元素的类别voteIlabel = trainingResults[sortedDistIndices[1]]#返回第一个元素的类别return voteIlabeliris=getData()
sets=Classification(iris)
#品种就是数据集中分类的那一列,这里得到了训练集的数据和训练集的真实品种
trainingSet=sets[1].drop(columns=['品种']).values
trainingResults=sets[1]['品种'].values
#测试集
testSets=sets[0].values
#记录成功的次数
true=0
for i in testSets:#花萼的长宽、花瓣的长宽testSet=[i[0],i[1],i[2],i[3]]ret=knn(trainingSet,testSet,trainingResults)#如果返回的答案和测试数据的答案一样ture+1if ret==i[4]:true+=1
successRate=true/len(sets[0])
print('测试的成功率为:\n',successRate)

四. 测试用例设计及调试过程截屏

为了验证可使用性,先做出18个数据集,从中抽取5个做测试集,其余做训练集

结果

多次结果都为1,再增添多点测试集增到10个

以上说明测试是具有一定可信度的

五.截图


图接下

第二次运行

图接下

以上分别为两次运行的结果,稍有不同。

六.总结

1.学习机器学习遇到的第一个算法就是KNN算法。近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。算法的过程也容易理解,易于实现。计算测试数据和训练数据的距离,并选取最小距离的点是重点。
但缺点是KNN对于随机分布的数据集分类效果较差,对于类内间距小,类间间距大的数据集分类效果好,而且对于边界不规则的数据效果好于线性分类器。 KNN对于样本不均衡的数据效果不好,需要进行改进。目前查阅到的资料是事先对样本属性进行约简,删除对分类结果影响较小的属性,快速的得出待分类样本的类别。该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分。

2.代码编写的过程中遇到非常多的python语法知识,因为掌握不牢固导致编写非常困难。特别是关于库的安装,numpy、pandas、sklearn的安装就已经耗费了非常多的时间。还遇到了jupiter打不开的尴尬情况。最后代码还可以进行优化。点的取值k可以为多个,再从中抽取频率较高的作为预测值,但由于python知识不牢固实现有些困难,日后再进行更新。

python机器学习(一)相关推荐

  1. python嵩天课堂笔记_[Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周)

    [Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) [Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) 目录 强化学习 定义 马尔科夫决策过程 基本元素 值函数 最优值 ...

  2. 入行AI,你需要一本Python机器学习入门

    ​ 目前机器学习红遍全球.男女老少都在学机器学习模型,分类器,神经网络和吴恩达.你也想成为一份子,但你该如何开始? 今天小编推荐这本<Python机器学习>教你快速入门. ​ 01什么是机 ...

  3. Python机器学习实践指南pdf (中文版带书签)、原书代码、数据集

    Python机器学习实践指南 目 录  第1章Python机器学习的生态系统 1  1.1 数据科学/机器学习的工作  流程 2  1.1.1 获取 2  1.1.2 检查和探索 2  1.1.3 清 ...

  4. 【转】Python机器学习库

    2019独角兽企业重金招聘Python工程师标准>>> Python 在科学计算领域,有两个重要的扩展模块:Numpy和Scipy.其中Numpy是一个用python实现的科学计算包 ...

  5. 计算机书籍-Python机器学习算法大全

    书名:Python机器学习算法 作者:赵志勇 出版社: 电子工业出版社 ISBN:9787121313196 去当当网了解

  6. python机器学习可视化工具Yellowbrick介绍及平行坐标图实战示例

    python机器学习可视化工具Yellowbrick介绍及平行坐标图实战示例 目录 python机器学习可视化工具Yellowbrick介绍及平行坐标图实战示例 yellowbrick简介及安装

  7. python机器学习可视化工具Yellowbrick绘图获取最佳聚类K值实战示例

    python机器学习可视化工具Yellowbrick绘图获取最佳聚类K值实战示例 目录 机器学习可视化工具Yellowbrick绘图获取最佳聚类K值实战示例

  8. 免费教材丨第55期:Python机器学习实践指南、Tensorflow 实战Google深度学习框架

    小编说  时间过的好快啊,小伙伴们是不是都快进入寒假啦?但是学习可不要落下哦!  本期教材  本期为大家发放的教材为:<Python机器学习实践指南>.<Tensorflow 实战G ...

  9. Python 机器学习库 Top 10,你值得拥有!

    随着人工智能技术的发展与普及,Python 超越了许多其他编程语言,成为了机器学习领域中最热门最常用的编程语言之一.有许多原因致使 Python 在众多开发者中如此受追捧,其中之一便是其拥有大量的与机 ...

  10. Python机器学习入门资料整理

    在python基本语法入门之后,就要准备选一个研究方向了.Web是自己比较感兴趣的方向,可是,导师这边的数据处理肯定不能由我做主了.paper.peper.paper--真的挺愁人的 还有几个月就要进 ...

最新文章

  1. 重读Youtube深度学习推荐系统论文,字字珠玑,惊为神文
  2. 商汤被曝已获准在香港上市,计划筹资逾10亿美元
  3. 3D人脸识别准确率提升,成未来发展趋势
  4. Python 引用全局变量提示:local variable referenced before assignment. 问题解决办法,global使用方法介绍
  5. spring的Autowired和@Resource的区别是什么
  6. linux sock结构体,struct socket结构体详解
  7. 事件触发控制_前端性能优化:事件的节流throttle与防抖debounce
  8. 普通视图和物化视图区别
  9. 反射获取成员变量并使用【应用】
  10. (水题)洛谷 - P1603 - 斯诺登的密码
  11. 新版scipy中的imread,imsave,imresize被弃用解决方法
  12. Underlay网络:如何立住可靠又支持大规模无收敛的“人设”
  13. PyTorch 1.0 中文文档:torchvision.datasets
  14. Proxy server got bad address from remote server
  15. python贴吧评论没有权限怎么回事_女朋友总是问我谁好看,只好用python整个评分来回答灵魂拷问!出事就让百度背锅吧!...
  16. 软件工程 - 个人博客系统 - 可行性分析与需求分析文档
  17. 阿里云ACP认证之云安全知识整理(考题占比 10%)
  18. css中translation,css3 translate属性
  19. python repr
  20. 数据压缩作业:LZW词典编码

热门文章

  1. matlabnbsp;蠓虫分类问题nbsp;amp;n…
  2. 日常安全运营工作的一些思考
  3. NPN求解三极管电路或电容恒流放电详解,三极管工作在放大区,基极控制集电极电流,针对电荷泵电容恒流放电控制,因为电荷泵输出恒定电流给快充手机锂电池充电
  4. 可编程控制器/微机接口及微机应用综合装置
  5. 实验吧-CTF-web-头有点大貌似有点难看起来有点难(学习笔记)
  6. linux下gz和tar.gz、zip压缩解压
  7. 微信公众号开发——关键词自动回复
  8. 【Excel】如何使用RegexString正则表达式
  9. linux上传本地文件
  10. GrabCut图像分割