zoukankan      html  css  js  c++  java
  • 一行一行学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开始吧,手动滑稽。

     

     

     

     

     

     

      

     

     

     

  • 相关阅读:
    QML控件设置style样式
    QML:ListElement: cannot use script for property value
    内存更换乌龙事件
    服务器的寿命到底有多长
    这些年渠道管理系统上发生的那些事
    IT囧事之误删测试环境的生产库
    旁观一个软件产品的终结
    一根网线引发的血案
    论代码规范命名的重要性
    服务器故障之内存损坏
  • 原文地址:https://www.cnblogs.com/qq2210446939/p/11865408.html
Copyright © 2011-2022 走看看