Python机器学习项目化教程(微课视频版)课件 第2章 机器学习基础及Python常用库_第1页
Python机器学习项目化教程(微课视频版)课件 第2章 机器学习基础及Python常用库_第2页
Python机器学习项目化教程(微课视频版)课件 第2章 机器学习基础及Python常用库_第3页
Python机器学习项目化教程(微课视频版)课件 第2章 机器学习基础及Python常用库_第4页
Python机器学习项目化教程(微课视频版)课件 第2章 机器学习基础及Python常用库_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

第2章机器学习基础及Python常用库目录CONTENTS2.1机器学习Python基础与开发环境2.2机器学习基础2.3本章小结2.1机器学习Python基础与开发环境学习基础学习认知能力信息素养高2.1.1Python开发环境简介Spyder是一款强大的交互式Python语言开发工具,提供高级的代码编辑、交互测试、调试等特性,它主要用于数据科学领域,具有高级编辑、分析、数据可视化和调试等功能,开发界面设计类似于MATLAB。Spyder开发环境如图2-1所示。PyCharm、Anaconda是Python常见的开发环境,其中Anaconda包含了Python常用的库,自带有JupyterNoteBook、Spyder开发工具,且具有强大的版本管理功能,对不同版本的工具包的安装有很好的支持。2.1机器学习Python基础与开发环境JupyterNotebook以网页的形式呈现,可在网页页面中直接编写代码和运行代码,支持使用LaTeX编写数学性说明。JupterNoteBook开发环境如图2-2所示。2.1机器学习Python基础与开发环境近邻算法原理PyCharm是由著名的软件开发公司JetBrains专门为Python开发人员打造的一款功能强大的Python集成开发环境,它包含智能提示、语法高亮、程序调试、Project管理、代码跳转、版本控制等功能。2.1机器学习Python基础与开发环境Python是一种面向对象的程序设计语言,拥有int、float、byte、bool等基本数据类型,以及list(列表)、tuple(元组)、dict(字典)等功能强大、使用灵活的序列类型。#计算前n个数的和sum=0foriinrange(11):sum+=iprint("sum=",sum)sum=552.1机器学习Python基础与开发环境(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='')True10111213142.1机器学习Python基础与开发环境(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]2.1机器学习Python基础与开发环境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]2.1机器学习Python基础与开发环境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]2.1机器学习Python基础与开发环境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]2.1机器学习Python基础与开发环境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]2.1机器学习Python基础与开发环境在数据处理过程中,经常会遇到嵌套列表,如果要取嵌套列表中的某一行元素或某一列元素,则需要列表推导式。例如: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]2.1机器学习Python基础与开发环境元组与列表类似,其区别在于元组是不可变的序列。列表支持元素引用,但不支持修改、增加与删除操作。a=(1,2,3,4,5)#创建元组aprint(a)foriina:print(i,end='')程序运行结果如下:(1,2,3,4,5)123452.1机器学习Python基础与开发环境zip()函数可将多个可迭代对象按照相应位置上的元素组合为元组,然后返回由这些元组组成的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)2.1机器学习Python基础与开发环境字典是由若干“键-值”对构成的无序序列,字典中每个元素由两部分组成:键和值。其中,键的取值可以是任意不变的数据类型,如整数、浮点数、字符串、元组等,但不能是列表、字典、集合等可变的数据类型。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:102.1机器学习Python基础与开发环境集合也是一个无序的可变序列,同一个集合中的对象不能重复出现,这与数学中的集合具有同样的性质。集合运算包括并集、交集、差集和子集等。例如: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}2.1机器学习Python基础与开发环境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)2.1机器学习Python基础与开发环境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.height2.1机器学习Python基础与开发环境创建矩形类对象并调用成员方法area()的方法如下:#创建一个矩形对象并调用它的area()方法rectangle=Rectangle(6,9)print("矩形的面积为:",rectangle.area())运行程序会输出结果:矩形的面积为:542.1机器学习Python基础与开发环境在矩形类定义的基础上,还可以对矩形类进行继承,假如定义一个立方体类,立方体是在矩形类的基础上,增加一个高构成的,类的定义如下:#定义一个立方体类,继承自矩形类classCube(Rectangle):def__init__(self,high):self.high=high#实现立方体类的volume()方法

defvolume(self,rect):returnself.high*rect.area()2.1机器学习Python基础与开发环境这样就构造了一个简单的立方体类Cube,其中类名Cube后面括号中的Rectangle就是要继承的类名,作为当前类Cube的父类。#创建一个立方体对象并调用它的volume()方法cube=Cube(10)print("立方体的体积为:",cube.volume(rectangle))程序运行结果如下:立方体的体积为:5402.1机器学习Python基础与开发环境同一个列表可存放不同类型的数据,而同一个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.]2.1机器学习Python基础与开发环境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.]]2.1机器学习Python基础与开发环境#矩阵转换为数组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'>2.1机器学习Python基础与开发环境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许东燕女952.1机器学习Python基础与开发环境利用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.02.1机器学习Python基础与开发环境利用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''2.1机器学习Python基础与开发环境创建一个3行4列的随机整数构成的二维数组,然后将其转换为DataFrame格式,代码如下:data=np.random.randint(1,50,size=(3,4))df=pd.DataFrame(data,columns=['A','B','C','D'])print(df)输出结果如下:

ABCD04613354134107222353342.1机器学习Python基础与开发环境若想要在第3列插入一组元素,则代码如下:df.insert(2,'E',[10,20,30])#插入一列print(df)输出结果如下:

ABECD04613103541341020722235303342.1机器学习Python基础与开发环境假设data.xlsx文件中有两个工作表:Sheet1和Sheet2,其内容如图2-4所示。读取data.xlsx文件中的数据代码如下:importpandasaspdx=pd.read_excel('data.xlsx')输出结果如下:序号姓名性别年龄职业01刘艳女26会计12刘娜女27会计23张旭刚男36工程师34吴甜甜女40教师45王刚男32医生2.1机器学习Python基础与开发环境假设data.xlsx文件中有两个工作表:Sheet1和Sheet2,其内容如图2-4所示。读取Excel文件时,可以指定要读取的工作表和列号,代码如下:x=pd.read_excel(r'data.xlsx',sheet_name=1,usecols="B,E")print(x)输出结果如下:姓名职称0李闯工程师1赵刚高级工程师2王鹏飞教授级高级工程师2.1机器学习Python基础与开发环境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()2.1机器学习Python基础与开发环境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()2.1机器学习Python基础与开发环境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]2.1机器学习Python基础与开发环境折线图可以显示随时间而变化的连续数据,适用于显示在相等时间间隔下数据的趋势。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()2.1机器学习Python基础与开发环境通过直方图可绘制连续性的数据,展示一组或多组数据的分布状况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()2.1机器学习Python基础与开发环境饼图反映某个部分占整体的比重。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()2.1机器学习Python基础与开发环境scikit-learn,也称为sklearn,是针对Python编程语言的免费软件机器学习库,于2007年由Google开发,是目前使用最为广泛的机器学习库。2.1机器学习Python基础与开发环境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):数据的离散化、特征提取、归一化、二值化。2.1机器学习Python基础与开发环境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()2.2机器学习基础张量(Tensor)就是多维数组(MultidimensionalArray),是深度学习的基础。其作用是为了表达更高维度的矩阵、向量。张量可分为标量、向量、矩阵、3D张量及更高维的张量。2.2机器学习基础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的维度:32.2机器学习基础所谓梯度,是一个矢量,表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(梯度的方向)变化最快,变化率最大。梯度可以理解为函数的导数,导数是增长的方向,所以梯度其实是增长的方向,那么,梯度的反方向就是下降的方向。2.2机器学习基础梯度下降可用数学公式去表述,如果是凸函数,表示山的形状,那么梯度下降公式可以表示为这里的表示当前的坐标位置,是学习因子,表示每次向上走一步的步长,x是更新后的坐标位置,就是走一步后的位置。2.2机器学习基础不同的领域有不同的评估方法,这里注意介绍一些常见的机器学习评估方法:召回率(recall/查全率)、精确率(Precission)、F1-score。混淆矩阵(ConfusionMatrix)。对于二分类来说,其混淆矩阵为二行二列的,如表2-1所示。(1)TP,即TruePostive,为真正例,样本的真实类别是正例,且模型预测的结果也是正例。(2)FP,即FalsePositive,为假正例,样本的真实类别是负例,但模型预测的结果为正例。(3)FN,即FalseNegative,为假负例,样本的真实类别是正例,但模型预测的结果为负例。(4)TN,即TrueNegative,为真负例,样本的真实类别是负例,且模型预测的结果也是负例。2.2机器学习基础精确率是指分类正确的正样本占预测为正的样本个数的比例,在信息检索领域称为查准率。计算方法为:召回率是指分类正确的正样本占真正的正样本个数的比例,在信息检索领域称为查全

温馨提示

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

评论

0/150

提交评论