Py 机器基础及其实践 1_第1页
Py 机器基础及其实践 1_第2页
Py 机器基础及其实践 1_第3页
Py 机器基础及其实践 1_第4页
Py 机器基础及其实践 1_第5页
已阅读5页,还剩62页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章机器学习基础1.1认识机器学习1.3人工智能、机器学习、深度学习之间的关系1.2机器学习简史1.4机器学习的相关概念1.5机器学习的任务11.6机器学习的一般步骤1.7机器学习Python基础1.8评估方法与数据集1.1认识机器学习学习基础信息素养高1948年,计算机科学家阿兰•图灵(AlanTuring)在《Mind》上发表的论文“ComputingMachineryandIntelligence”中提出了著名的“图灵测试”。1956年,塞缪尔(ArthurSamuel)设计了一个具有自学习能力的跳棋程序,可以在不断人机对弈的过程中提升自己的棋艺。1959年,他提出了“机器学习”的概念,此研究领域是计算机在不被明确编程的情况下,赋予它学习能力。010203信息素养高2016年3月谷歌的AlphaGo年度围棋挑战赛,AlphaGo以4:1的绝对优势战胜围棋世界冠军李世石九段。041.1.1机器学习的定义机器学习的研究方向主要分为两类:第一类是传统机器学习方法的研究,主要研究学习机制,注重探索模拟人的学习机制;第二类是针对大数据,研究如何有效利用信息,注重从海量数据中获取隐藏的、有效的、可理解的知识。前者侧重于算法理论的研究,后者侧重于数据的处理。机器学习通过数据驱动的模型解决实际问题,其应用几乎渗透到社会的各个领域,涵盖计算机视觉、自然语言处理、推荐系统、自动驾驶、金融科技等。人脸识别011.1.2机器学习的应用手写数字识别垃圾邮件分类020304自动驾驶个性化推荐05房价预测061.2机器学习简史1

萌芽期1943年,心理学家麦W•Mcculloch和数理逻辑学家W•Pitts在发表的论文中提出了MP模型。MP模型是模仿神经元的结构和工作原理,MP模型作为人工神经网络的起源,开创了人工神经网络的新时代。1958年,美国科学家P.Rosenblatt提出了由两层神经元组成的神经网络──Perceptron,即感知机,可解决输入的数据线性二分类问题,从而激发科学家对人工神经网络研究的兴趣,对神经网络的发展起到了里程碑的意义。1.2机器学习简史2发展期1963年,层次聚类算法被提出,这是一种非常符合人的直观思维的算法。1967年,J.B.MacQueen在1967年提出的k均值聚类算法。1983年,著名物理学家J.J.Hopfield提出了神经网络模型,它可模拟人类的记忆,并利用该算法求解“流动推销员问题”这个NP难题。但由于该算法存在容易陷入局部最小值的缺陷,因此并未在当时引起很大的轰动。1983年,TerrenceSejnowski和Hinton等人发明了玻尔兹曼机(BoltzmannMachines),它本质是一种无监督模型,首次提出的多层网络的学习算法,用于对输入数据进行重构以提取数据特征做预测分析。1.2机器学习简史2发展期1986年,人工智能专家J.RossQuinlan提出著名的ID3算法,通过减少树的深度加快算法的运行速度。同年,D.E.Rumelhart等人提出了BP算法,BP算法一直是被应用得最广泛的机器学习算法之一。这期间,决策树的3种典型算法ID3、CART、C4.5陆续被提出。1995年,支持向量机(SVM算法)和AdaBoost算法被提出,SVM以统计学为基础,解决了非线性问题的分类问题。AdaBoost通过将一些简单的弱分类器集成起来使用,构建强分类器,使精度获得很大提升。代表了集成学习算法的胜利。1.2机器学习简史3蓬勃期2006年,GeoffreyHinton团队在《科学》杂志上发表了一篇关于“梯度消失”问题解决方案的论文,提出了深度学习概念,产生了巨大影响。GeoffreyHinton也因此被称为深度学习之父。2016年,由Google基于深度学习开发的AlphaGo以4:1击败世界围棋冠军李世石,随后,该程序与中日韩数十位围棋高手进行快棋对决,连续60局无一败绩。2017年,基于强化学习算法的AlphaGo升级版AlphaGoZero横空出世,无一败绩地轻松击败了之前的AlphaGo。1.3机器学习、人工智能与深度学习的关系1人工智能是一门科学与工程,它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学,研究内容涵盖语音识别、图像识别、自然语言处理、智能搜索和专家系统等。2机器学习是人工智能的一个分支,是实现人工智能的方法之一。机器学习是对人类生活中学习过程的一个模拟,而在这整个过程中,最关键的是数据。kNN、K-means、DecisionTrees、SVM、朴素贝叶斯、感知机、EM算法、逻辑回归及ANN(ArtificialNeuralNetworks,人工神经网络)都是常见的机器学习算法。1.3机器学习、人工智能与深度学习的关系3深度学习是一种机器学习方法,发展于人工智能的联结主义学派,其概念源于人工神经网络,它通过组合低层特征形成更加抽象的高层特征,其动机在于建立、模拟人脑进行分析学习。在2010年之后,各种深度学习框架的发布及在各领域的突出表现,更进一步促进了深度学习算法的发展。1.4机器学习相关概念1数据集(DataSet):数据的集合,每一条单独的数据被称为样本(Sample)。对于每个样本,它通常具有一些属性(Attribute)或者特征(Feature),特征所具体取得值被称为特征值(FeatureValue)。训练集(TrainingSet)和测试集(TestingSet):在建立机器学习模型过程中,通常将数据集分为两部分:训练集和测试集,其中,训练集用于对模型参数进行训练,另一部分用于对训练好的模型进行测试,验证模型的性能好坏,包括准确率、泛化能力。23验证集(ValidationSet):用于在训练过程中检验模型的性能,以调整参超参数。1.4机器学习相关概念4评估:在训练出算法模型后,为了验证算法模型的好坏,需要对该算法在数据集上根据评价指标进行测试,这个测试过程就是算法的评估。模型(Model):模型是一种算法的表达,模型用于在海量数据中查找模式或进行预测。从数据中使用算法得到模型的过程称为学习(Learning)或训练(Training)。过拟合(Overfitting)和欠拟合(Underfitting):过拟合是指模型在训练集上表现很好,但在测试集上却表现很差。欠拟合是模型在训练集上就表现很差,不能获得足够低的误差,无法学到数据背后的规律。561.5机器学习的任务1监督学习。监督学习是从给定的训练数据集中学习出一个模型参数,然后根据这个模型对未知样本进行预测。在监督学习中,样本同时包含特征(输入)和标签(输出)。根据预测结果输出的类别,可分为分类和回归。1.5机器学习的任务2无监督学习。无监督学习也称为非监督学习,输入的样本只包含特征,而不包含标签。学习模型是数据内在结构的推断,并不知道分类结果是否正确。常见的无监督学习算法有k均值聚类、层次聚类、GMM聚类。利用层次聚类算法对西瓜数据集进行聚类的散点图如图所示。1.5机器学习的任务3半监督学习。半监督学习(Semi-supervisedLearning)是一种介于监督和无监督学习之间的学习方式,通过使用带标签数据及大量不带标签的数据进行模型学习。在监督学习中,样本的类别标签是已知的,对于无监督学习,样本是无标签的。4强化学习(ReinforcementLearning,RL)是一种比较复杂的机器学习方法,强调系统与外界不断的交互反馈,通过不断与环境交互、试错,最终完成特定目的或使整体行动的收益最大化。强化学习不需要训练数据的标签,但需要每一步行动需要环境给予反馈,基于反馈不断调整训练对象的行为。AlghaGo、无人驾驶汽车就是强化学习的的训练对象。1.6机器学习的一般步骤机器学习专注于让机器从大量的数据中模拟人类思考和归纳总结的过程,获得计算模型并自动判断和推测相应的输出结果。机器学习的处理流程如图所示。1.7机器学习Python基础学习基础学习认知能力信息素养高Spyder是一款强大的交互式Python语言开发工具,提供高级的代码编辑、交互测试、调试等特性,它主要用于数据科学领域,具有高级编辑、分析、数据可视化和调试等功能,开发界面设计类似于MATLAB。Spyder开发环境如图所示。PyCharm、Anaconda是Python常见的开发环境,其中Anaconda包含了Python常用的库,自带有JupyterNoteBook、Spyder开发工具,且具有强大的版本管理功能,对不同版本的工具包的安装有很好的支持。1.7.1Python开发环境JupyterNotebook以网页的形式呈现,可在网页页面中直接编写代码和运行代码,支持使用LaTeX编写数学性说明。JupterNoteBook开发环境如图所示。PyCharm是由著名的软件开发公司JetBrains专门为Python开发人员打造的一款功能强大的Python集成开发环境,它包含智能提示、语法高亮、程序调试、Project管理、代码跳转、版本控制等功能。Python是一种面向对象的程序设计语言,拥有int、float、byte、bool等基本数据类型,以及list(列表)、tuple(元组)、dict(字典)等功能强大、使用灵活的序列类型。#计算前n个数的和sum=0foriinrange(11):sum+=iprint("sum=",sum)sum=551.7.2Python基本语法(1)range()函数的作用是返回一个迭代对象,其语法格式如下:range(start,stop[,step])(2)in是成员测试运算符,用于测试一个对象是否是另一个对象中的元素。#成员测试flag=5in[1,2,3,4,5]print(flag)foriin(10,11,12,13,14):print(i,end='')True1011121314(3)map()函数根据提供的函数对指定序列进行映射,其语法格式如下:map(function,iterable,...)其中,参数function表示函数,参数iterable表示序列,可以为多个序列。#计算每个数的平方x=[1,2,3,4,5]res=map(lambdai:i**2,x)print(list(res))[1,4,9,16,25]defdiv2(x):#函数定义,将x除以2returnx/2defsum(x,y):#函数定义,求两个数的和returnx+yprint(list(map(div2,[10,20,30,40,50])))#将列表中各元素除以2print(list(map(sum,[1,2,3,4,5],[6,7,8,9,10])))#计算两个列表中对应元素之和[5.0,10.0,15.0,20.0,25.0][7,9,11,13,15]1.列表列表是一种可变序列,用于存储若干元素,其地址空间是连续的,类似于Java、C++中的数组。x=[1,2,'a',"b","abc",23.56,(10,20,30),[60,70,80]]foriinx:print(i)程序运行结果如下:2ababc23.56(10,20,30)[60,70,80]x=[1,2,'a',"b","abc",23.56]foriinrange(len(x)):print(x[i],end='')程序运行结果如下:12ababc23.56x=[1,2,3]x=x+[5]print(x)x.append(10)print(x)x.extend([10,20,30])print(x)x.insert(5,100)print(x)x.remove(20)print(x)print(x.pop())print(x)[1,2,3,5][1,2,3,5,10][1,2,3,5,10,10,20,30][1,2,3,5,10,100,10,20,30][1,2,3,5,10,100,10,30]30[1,2,3,5,10,100,10]Python与Java、C++语言最大的区别就是序列的切片操作,列表、元组、字符串、range对象都支持切片操作。切片由两个冒号分隔的3个数字组成,其语法格式为:[start:stop:step]start表示切片的开始位置,stop表示切片的结束位置,但不包含该结束位置,step表示步长(默认为1),当步长省略时,最后一个冒号也可以省略。例如:m=[10,20,30,40,50,60]print(m[2:len(m)])print(m[::])print(m[::-1])[30,40,50,60][10,20,30,40,50,60][60,50,40,30,20,10]在数据处理过程中,经常会遇到嵌套列表,如果要取嵌套列表中的某一行元素或某一列元素,则需要列表推导式。例如:a=[[1,2,3],[4,5,6]]print(a[0])#取一行#print(a[:,0])#这样写会产生错误TypeError:listindicesmustbeintegersorslices,nottupleb=[x[0]forxina]#取嵌套列表中的第1列元素print(b)程序运行结果如下:[1,2,3][1,4]元组与列表类似,其区别在于元组是不可变的序列。列表支持元素引用,但不支持修改、增加与删除操作。a=(1,2,3,4,5)#创建元组aprint(a)foriina:print(i,end='')程序运行结果如下:(1,2,3,4,5)12345zip()函数可将多个可迭代对象按照相应位置上的元素组合为元组,然后返回由这些元组组成的zip对象。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。a=('name','age','grade','tel')b=('张三',25,'大三'fori,jinzip(a,b):print(i,j,end=';')c=(i*2foriinrange(10))print(tuple(c))name张三;age25;grade大三;te(0,2,4,6,8,10,12,14,16,18)字典是由若干“键-值”对构成的无序序列,字典中每个元素由两部分组成:键和值。其中,键的取值可以是任意不变的数据类型,如整数、浮点数、字符串、元组等,但不能是列表、字典、集合等可变的数据类型。key=['101','102','103','104','105']value=[10,9,8,7,6]dic=dict(zip(key,value))print(dic)print(dic['102'])dic['106']=10dic['101']=5fori,jindic.items():print(i,j,sep=':'){'101':10,'102':9,'103':8,'104':7,'105':6}9101:5102:9103:8104:7105:6106:10集合也是一个无序的可变序列,同一个集合中的对象不能重复出现,这与数学中的集合具有同样的性质。集合运算包括并集、交集、差集和子集等。例如:x=set(range(10))y={-1,-2,-3,5,6}z=x|y#并集print("x=",x)print("y=",y)print("并集操作:",z)z=x&y#交集print("交集操作:",z)z=x-y#差集print("差集操作:",z)z.pop()print(z)z.remove(3)print(z)x={0,1,2,3,4,5,6,7,8,9}y={5,6,-2,-3,-1}并集操作:{0,1,2,3,4,5,6,7,8,9,-1,-3,-2}交集操作:{5,6}差集操作:{0,1,2,3,4,7,8,9}{1,2,3,4,7,8,9}{1,2,4,7,8,9}1.函数Python中的函数定义是以def关键词开头,后面是函数名称和圆括号,圆括号后面要加一个冒号,表示函数声明结束。圆括号内是传递的参数列表。函数体中的语句以缩进格式书写,函数是否有返回值是根据函数体内部是否有return语句决定的,如果有return语句,则表示该函数有返回值,否则表示没有返回值。Accuracy:96.66666666666667%defmax_min_value(mylist):#定义函数

returnmylist.index(max(mylist)),mylist.index(min(mylist))#调用函数mylist=[36,16,33,52,68,100,70,85,6,75]max_min=max_min_value(mylist)print('最大值元素下标和最小值元素下标:',max_min)最大值元素下标和最小值元素下标:(5,8)deffind(table,e):foriinrange(len(table)):iftable[i]==e:returnTrue,ielse:returnFalse,Nonemylist=[36,16,33,52,68,100,70,85,6,75]flag,value=find(mylist,85)print(flag,value)程序运行结果如下:True72.1机器学习Python基础与开发环境2.类Python是一门面向对象程序设计语言,在一个模块功能较多且考虑到系统的可维护性和可复用性,选择类来管理更为合适。#定义一个矩形类classRectangle:def__init__(self,width,height):self.width=widthself.height=heightdefarea(self):returnself.width*self.height创建矩形类对象并调用成员方法area()的方法如下:#创建一个矩形对象并调用它的area()方法rectangle=Rectangle(6,9)print("矩形的面积为:",rectangle.area())运行程序会输出结果:矩形的面积为:54在矩形类定义的基础上,还可以对矩形类进行继承,假如定义一个立方体类,立方体是在矩形类的基础上,增加一个高构成的,类的定义如下:#定义一个立方体类,继承自矩形类classCube(Rectangle):def__init__(self,high):self.high=high#实现立方体类的volume()方法

defvolume(self,rect):returnself.high*rect.area()这样就构造了一个简单的立方体类Cube,其中类名Cube后面括号中的Rectangle就是要继承的类名,作为当前类Cube的父类。#创建一个立方体对象并调用它的volume()方法cube=Cube(10)print("立方体的体积为:",cube.volume(rectangle))程序运行结果如下:立方体的体积为:540同一个列表可存放不同类型的数据,而同一个array数组中存放的数据类型必须全部相同。对于使用列表和array数组存储的矩阵,如果想要取出同一列的元素,对于列表,需要使用列表推导式才能完成;对于array,直接使用切片即可。例如:importnumpyasnpa=np.array([[5,6,7],[8,9,10]])print(a[:,0])如果要获取二维数组中某一行的均值或某一列的均值,可使用means()函数实现,其语法格式如下:numpy.mean(a,axis=None,dtype=None,out=None,keepdims=<novalue>)2.1机器学习Python基础与开发环境a=np.array([[1,2,3],[4,5,6]])print(a)m=np.mean(a)print(m)m=np.mean(a,axis=0)#axis=0,计算每一列的平均值print(m)m=np.mean(a,axis=1)#axis=1,计算每一行的平均值print(m)[[123][456]]3.5[2.53.54.5][2.5.]a=np.array([[1,2,3],[4,5,6],[7,8,9]])b=np.mat(a)print(b)print(np.mean(b)) #对所有元素求平均值print(np.mean(b,0)) #对各列求平均值print(np.mean(b,1)) #对各行求平均值

[[123][456][789]]5.0[[4.5.6.]][[2.][5.][8.]]#矩阵转换为数组mat=np.mat([[1,2,3,4]])print(mat,type(mat))mat_arr=mat.Aprint(mat_arr,type(mat_arr))程序运行结果如下:[[1234]]<class'numpy.matrix'>[[1234]]<class'numpy.ndarray'>DataFrame是由多种类型的列构成的二维标签数据结构,类似于Excel、SQL表、Series对象构成的字典。DataFrame是最常用的Pandas对象,DataFrame支持ndarray、列表、字典、Series字典、DataFrame等多种数据类型的输入。DataFrame还可为数据自动增加index(行标签)和columns(列标签)参数,这样就使生成的DataFrame数据包含行和列索引。利用字典生成DataFrame数据,代码如下:importpandasaspdstu_dict={'姓名':['张晓','许东燕'],'性别':['男','女'],'分数':[86,95]}print(stu_dict)stu_df=pd.DataFrame(stu_dict)print(stu_df)程序运行结果如下:{'姓名':['张晓','许东燕'],'性别':['男','女'],'分数':[86,95]}

姓名性别分数0张晓男861许东燕女95利用Series字典生成DataFrame数据,代码如下:d={'姓名':pd.Series(['吴小倩','刘娜','许友林','李小婷'],index=['A','B','C','D']),'分数':pd.Series([87,90,93],index=['A','B','D'])}df=pd.DataFrame(d)print(df)姓名分数A吴小倩87.0B刘娜90.0C许友林NaND李小婷93.0利用numpy多维数组生成DataFrame数据,代码如下:data=np.zeros((3,),dtype=[('A','i8'),('B','f8'),('C','S8')])df=pd.DataFrame(data)print(df)程序运行结果如下:

ABC000.0b''100.0b''200.0b''创建一个3行4列的随机整数构成的二维数组,然后将其转换为DataFrame格式,代码如下:data=np.random.randint(1,50,size=(3,4))df=pd.DataFrame(data,columns=['A','B','C','D'])print(df)输出结果如下:

ABCD0461335413410722235334若想要在第3列插入一组元素,则代码如下:df.insert(2,'E',[10,20,30])#插入一列print(df)输出结果如下:

ABECD0461310354134102072223530334假设data.xlsx文件中有两个工作表:Sheet1和Sheet2,其内容如图所示。读取data.xlsx文件中的数据代码如下:importpandasaspdx=pd.read_excel('data.xlsx')输出结果如下:序号姓名性别年龄职业01刘艳女26会计12刘娜女27会计23张旭刚男36工程师34吴甜甜女40教师45王刚男32医生假设data.xlsx文件中有两个工作表:Sheet1和Sheet2,其内容如图所示。读取Excel文件时,可以指定要读取的工作表和列号,代码如下:x=pd.read_excel(r'data.xlsx',sheet_name=1,usecols="B,E")print(x)输出结果如下:姓名职称0李闯工程师1赵刚高级工程师2王鹏飞教授级高级工程师importpandasaspdimportnumpyasnp#创建写入器对象writer=pd.ExcelWriter('data.xlsx')start_row=0#指定从第几行开始写入data=np.random.randint(1,50,size=(3,4))data=pd.DataFrame(data,columns=['C1','C2','C3','C4'])data.to_excel(writer,sheet_name='Sheet1',startrow=start_row, header=True,index=False)#丢弃DataFrame对象的行标签#保存数据,关闭文件writer.save()writer.close()1.散点图importmatplotlib.pyplotaspltimportnumpyasnpx=np.linspace(-5,5,50,endpoint=True)y=x**2plt.scatter(x,y,s=20,alpha=1,linewidths=0.1)plt.xlabel('X轴')plt.ylabel('Y轴')plt.title('散点图')plt.rcParams['font.sans-serif']=['SimHei'] #显示中文字体plt.rcParams['axes.unicode_minus']=False #显示负号plt.show()1.散点图#生成数据1,具有两维特征x_Attr1和x_Attr2num=500#数量x_Mean1=4x_Var1=0.5x_Attr1=np.zeros((num,1))x_Attr1=x_Mean1+np.sqrt(x_Var1)*np.random.randn(num,1)x_Mean2=2x_Var2=1x_Attr2=np.zeros((num,1))x_Attr2=x_Mean2+np.sqrt(x_Var2)*np.random.randn(num,1)x=np.c_[x_Attr1,x_Attr2]折线图可以显示随时间而变化的连续数据,适用于显示在相等时间间隔下数据的趋势。x=[1,2,3,4,5,6,7,8]y=[0.62,0.68,0.76,0.81,0.815,0.814,0.816,0.815]plt.plot(x,y)plt.xlim(0,9)plt.ylim(0.6,0.85)plt.title('折线图')plt.xlabel('X')plt.ylabel('Y')plt.rcParams['font.sans-serif']=['SimHei']#如果要显示中文字体,则在此处设为SimHeiplt.rcParams['axes.unicode_minus']=Falseplt.show()通过直方图可绘制连续性的数据,展示一组或多组数据的分布状况x=np.random.standard_normal(100)bins=20n,bins,patches=plt.hist(x,bins,color='#0a6caa',alpha=0.7,rwidth=0.85)plt.grid(axis='y',alpha=0.75)plt.xlabel('区间')plt.ylabel('频率')plt.title('直方图')maxfreq=n.max()plt.ylim(ymax=np.ceil(maxfreq/10)*10ifmaxfreq%10elsemaxfreq+10)plt.show()饼图反映某个部分占整体的比重。labels=['第1季度','第2季度','第2季度','第2季度']#各部分标签percent=[20,45,20,15]#各部分比例color=['red','yellow','green','blue']#各部分颜色plode=[0,0.05,0,0]#各部分突出值plt.pie(percent,explode=plode,colors=color,labels=labels,labeldistance=1.1,autopct="%1.1f%%",shadow=False)plt.axis("equal")#设置横轴和纵轴大小相等,这样饼才是圆的plt.legend()plt.rcParams['font.sans-serif']=['SimHei']#如果要显示中文字体,则在此处设为:SimHeiplt.rcParams['axes.unicode_minus']=False#显示负号plt.show()scikit-learn,也称为sklearn,是针对Python编程语言的免费软件机器学习库,于2007年由Google开发,是目前使用最为广泛的机器学习库。scikit-learn库提供的6个模块介绍如下:分类(classification):目前Scikit-learn已包含的算法:支持向量机(SVM)、最近邻、逻辑回归、随机森林、决策树以及多层感知器(MLP)神经网络等。回归(regression):通过分析相关属性特征与目标之间的关系,给出一组连续的预测值。目前Scikit-learn已包含的算法:支持向量回归(SVR)、Lasso回归、贝叶斯回归、随机森林回归等。聚类(clustering):自动识别具有相似属性的对象,并划分为一类,属于无监督学习范畴,一般可用于辅助决策。目前Scikit-Learn包含的算法:k-均值聚类、谱聚类、均值偏移、层次聚类、DBSCAN聚类等。数据降维(dimensionalityreduction):主成分分析(PCA)、非矩阵分解(NMF)、奇异值分解(SVD)等。模型选择(modelselection):对给定参数和模型的比较、验证和选择,调整模型和参数以提升精度。目前Scikit-learn包括的算法:网格搜索、交叉验证和各种评估函数。数据预处理(preprocessing):数据的离散化、特征提取、归一化、二值化。importseabornassnscolors=sns.color_palette("colorblind")plt.figure()foriinrange(len(y_pred)):ify_pred[i]==0:s1=plt.scatter(X_test[i,1],X_test[i,2],marker='o',color=colors[0])elify_pred[i]==1:s2=plt.scatter(X_test[i,1],X_test[i,2],marker='s',color=colors[1])else:s3=plt.scatter(X_test[i,1],X_test[i,2],marker='*',color=colors[2])plt.xlabel("X")plt.ylabel("Y")plt.title("贝叶斯分类器")plt.rcParams['font.family']=['sans-serif']plt.rcParams['font.sans-serif']=['SimHei']plt.legend((s1,s2,s3),('0','1','2'),loc='best')plt.show()张量(Tensor)就是多维数组(MultidimensionalArray),是深度学习的基础。其作用是为了表达更高维度的矩阵、向量。张量可分为标量、向量、矩阵、3D张量及更高维的张量。importnumpyasnpx=np.array(5)print('x:',x,'x的维度:',x.ndim)x=np.array([1,2,3,4,5,6])print('x:',x,'x的维度:',x.ndim)x=np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]])print('x:',x,'x的维度:',x.ndim)x=np.array([[[1,2,3,4,5],[6,7,8,9,10]],[[11,12,13,14,15],[16,17,18,19,20]]])print('x:',x,'x的维度:',x.ndim)x:5x的维度:0x:[123456]x的维度:1x:[[12345][678910][1112131415][1617181920]]x的维度:2x:[[[12345][678910]][[1112131415][1617181920]]]x的维度:3不同的领域有不同的评估方法,这里注意介绍一些常见的机器学习评估方法:召回率(recall/查全率)、精确率(Precission)、F1-score。混淆矩阵(ConfusionMatrix)。对于二分类来说,其混淆矩阵为二行二列的,如表2-1所示。(1)TP,即True

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论