一行一行学python&一行一行敲KNN

本学习笔记参考于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)))
View Code

 心得:

  在学的时候有一些些困难,思想虽然会了,但落实到python不知道怎么写,所以我就一行一行查百度,这是啥这又是啥,还好经过无数次百度之后终于大致略懂了函数的格式,但也只是知道格式而已,没有系统性地学一下python,故这周目标就是系统性地学python了,从hello word开始吧,手动滑稽。

 

 

 

 

 

 

  

 

 

 

猜你喜欢

转载自www.cnblogs.com/qq2210446939/p/11865408.html