本学习笔记参考于https://www.runoob.com/python/python-functions.html和https://blog.csdn.net/scott198510/article/details/98198312
https://blog.csdn.net/HCYHanson/article/details/89332207
# TODO :
TODO 自然表示需要做而未做的一些待完成的事项,有助于事后的检索,以及对整体项目做进一步的修改迭代,在 PyCharm 中,使用 Alt + 6 快捷键,可快速调出项目中的全部 TODO 注释,个人理解为就是个标签,代表这里有东西没干,待会想干的时候在搞回来。
iris数据:
Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据样本,分为3类,每类50个数据,每个数据包含4个属性。简单来说就是我们要处理的数据对象。iris的target属性代表花的种类,也就是我们最终要通过花的四个属性为他的taget值分类,0,1,2表示三种不同的花,iris的tager_name可以访问花的真正名字。iris的data是150行的,每行有四个属性的数据域。
train_test_split
格式为train_test_split(test_size, train_size, rondom_state=None, shuffle=True, stratify=None),参数分别为测试集大小,训练集大小,指定随机方式(随机种子),是否人为洗牌,最后一个,如果不是None,则数据集以分层方式拆分,并使用此作为类标签。在代码中,X_train为训练集数据,y_train为训练集标签,X_test为测试集数据,y_test为测试集标签。此模型就是用X_train和y_train对机器进行监督学习,再对X_test和y_test进行检查,最后预测特值。
定义距离函数def euc_dis(instance1, instance2):
python的函数要怎么写呢,首先格式是 def 函数名( 参数列表 ):,与c,java不同的是,类型属于对象,变量是没有类型的,所以参数列表里面某得参数类型,就是一个一个对象,可以理解为把一个数据的名字传了进来,我们再对这个对象进行操作,类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身;类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响。
**运算符和sum函数
**表示乘方运算 例如 2**3=8。
sum函数格式为sum(iterable,start) 返回一个数字序列(非字符串)的和,并加上参数'start'的值,不写start就默认为0
为啥没有main函数
python是一种解释型脚本语言,和C/C++语言不同,C/C++程序从main函数开始执行,python程序从开始到结尾顺序执行。就是一行一行执行的意思,所以呢,在python里面函数要先定义,再使用!
数组
定义就是 数组名=【】 ,可以使用append方法在末尾添加元素,或者将另一个数组作为元素本身添加进去
for循环
格式:for 迭代器名 in 数组名
nlargest()和nsmallest()
在heapq库中,返回最大的几个或最小的几个数字,格式:heapq.nlargest(k,对象名)//返回前k大的数字
全部代码加注释:
1 import heapq 2 import numpy as np 3 from sklearn import datasets 4 from sklearn.model_selection import train_test_split 5 6 #导入数据m 7 iris=datasets.load_iris() 8 x = iris.data 9 y = iris.target 10 x_train,y_train,x_test,y_test=train_test_split(x,y,random_state=2019) 11 12 def dis(instance1, instance2): #参数是向量,在直角坐标系就有两个数据,(x,y) 13 diff=instance1-instance2 #向量相减就是(x1-x2,y1-y2) 14 diff=diff ** 2 15 distnum=sum(diff) ** 0.5 16 return distnum 17 18 def knn_classify(x,y,testinstance,k):#返回testinstance的k个最短邻居的类别 19 dis=[] 20 for i in x: 21 dis.append(dis(i,testinstance)) #此时dis【i】表示第i个向量与testinstance的距离 22 23 24 maxindex = map(dis.index, heapq,nsmallset(k,dis)) # map代表一个映射,选出k个最小距离的值和索引作为映射 25 maxy=[] 26 for i in maxindex: 27 maxy.append(y[i])#这里的y是iris.target的数据集,y【i】表示第i朵花的颜色 28 29 return max(maxy, key=maxy.count) #这里返回的是出现次数最多的那个值,那个值就是标签 30 31 redictions = [knn_classify(x_train,y_train,data,3) for data in x_test] 32 correct = np.count_nonzero((predictions==y_test)==True) 33 print("Accruacy is: %.3f" %(correct/len(x_test)))
心得:
在学的时候有一些些困难,思想虽然会了,但落实到python不知道怎么写,所以我就一行一行查百度,这是啥这又是啥,还好经过无数次百度之后终于大致略懂了函数的格式,但也只是知道格式而已,没有系统性地学一下python,故这周目标就是系统性地学python了,从hello word开始吧,手动滑稽。