机器学习与Python实践PPT完整全套教学课件_第1页
机器学习与Python实践PPT完整全套教学课件_第2页
机器学习与Python实践PPT完整全套教学课件_第3页
机器学习与Python实践PPT完整全套教学课件_第4页
机器学习与Python实践PPT完整全套教学课件_第5页
已阅读5页,还剩874页未读 继续免费阅读

下载本文档

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

文档简介

1机器学习与Python实践

第一章

绪论全套PPT课件课程安排先修课程《概率论与数理统计》《数据库原理及应用》《人工智能导论》《Python数据处理基础》课程考核平时成绩期末考试学以致用考核方式成绩构成考核项目考核依据与方法占平时成绩的比重占总评成绩的比重平时成绩课程思政实践基于机器学习及前沿课题研讨等,考查学生对我国相关先进技术的了解情况以及核心价值观状况5%-10%40%课堂讨论通过问题驱动的分组讨论环节,根据提交的研究报告或者演讲展示情况计分10%-40%课堂表现通过课堂小测、练习、回答问题等环节进行计分20%-40%课后作业布置若干探索性质的编程实践作业,并进行课堂展示;根据参与情况与结果计分;不少于3次50%-60%期末考试闭卷考试考试成绩

60%总分

100课程介绍4,抖音推荐2,虚拟人1,ChatGPT对话机器人3,LOL实时字幕课程介绍课程介绍课程介绍课程介绍公众号/网站公众号/网站2本章目录机器学习概述机器学习的类型机器学习的背景知识机器学习的开发流程31.

机器学习概述1.机器学习概述2.机器学习的类型3.机器学习的背景知识4.机器学习的开发流程概念机器学习的理论:设计和分析一些算法让计算机可以自动“学习”机器学习算法:从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法概念:机器学习与人工智能、深度学习的关系人工智能:机器展现的人类智能机器学习:计算机利用已有的数据(经验),得出了某种模型,并利用此模型预测未来的一种方法。深度学习:实现机器学习的一种技术5杨立昆(Yann

LeCun)杰弗里·欣顿(Geoffrey

Hinton)本吉奥(

Bengio

)共同获得了2018年计算机科学的最高奖项——ACM图灵奖。机器学习界的执牛耳者Andrew

Ng中文名吴恩达,斯坦福大学副教授,前“百度大脑”的负责人与百度首席科学家。6李航,

现任字节跳动科技有限公司人工智能实验室总监,北京大学、南京大学客座教授,IEEE

会士,ACM

杰出科学家,CCF

高级会员。代表作:《统计学习方法》机器学习界的国内泰斗周志华,南京大学计算机科学与技术系主任 、人工智能学院院长。代表作:《机器学习》(西瓜书)7陈天奇,陈天奇是机器学习领域著名的青年华人学者之一,本科毕业于上海交通大学ACM班,博士毕业于华盛顿大学计算机系。主要贡献:设计了XGBoost算法。机器学习界的青年才俊何恺明,本科就读于清华大学,博士毕业于香港中文大学多媒体实验室。2016年,加入Facebook

AIResearch(FAIR)担任研究科学家。主要贡献:设计了ResNets8机器学习的范围9给定数据的预测问题数据清洗/特征选择确定算法模型/参数优化结果预测不能解决什么大数据存储/并行计算做一个机器人机器学习可以解决什么问题102.

机器学习的类型机器学习概述机器学习的类型机器学习的背景知识机器学习的开发流程112.

机器学习的类型12分类(Classification)身高1.65m,体重100kg的男人肥胖吗?根据肿瘤的体积、患者的年龄来判断良性或恶性?回归(Regression、Prediction)如何预测上海浦东的房价?未来的股票市场走向?2.

机器学习的类型-监督学习13聚类(Clustering)如何将教室里的学生按爱好、身高划分为5类?降维(

Dimensionality

Reduction

)如何将将原高维空间中的数据点映射到低维度的空间中?2.

机器学习的类型-无监督学习14强化学习(Reinforcement

Learning)用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题

。2.

机器学习的类型-强化学习153.

机器学习的背景知识机器学习概述机器学习的类型机器学习的背景知识机器学习的开发流程163.

机器学习的背景知识-希腊字母大写小写英文注音国际音标注音中文注音Ααalphaalfa阿耳法Ββbetabeta贝塔Γγgammagamma伽马Δδdetadelta德耳塔Εεepsilonepsilon艾普西隆Ζζzetazeta截塔Ηηetaeta艾塔Θθthetaθita西塔Ιιiotaiota约塔Κκkappakappa卡帕∧λlambdalambda兰姆达Μμmumiu缪Ννnuniu纽Ξξxiksi可塞Οοomicronomikron奥密可戎∏πpipai派Ρρrhorou柔∑σsigmasigma西格马Ττtautau套Υυupsilonjupsilon衣普西隆Φφphifai斐Χχchikhai喜Ψψpsipsai普西Ωωomegaomiga欧米173.

机器学习的背景知识-数学基础高等数学导数、微分、泰勒公式……线性代数向量、矩阵、行列式、秩、线性方程组、特征值和特征向量……概率论与数理统计随机事件和概率、概率的基本性质和公式、常见分布、期望、协方差……18高等数学-函数的连续性设函数

y

=

𝑓(𝑥)在点𝑥0的某邻域内有定义,如果当自变量的改变量𝛥𝑥趋近于零时,相应函数的改变量𝛥y也趋近于零,则称y

=

𝑓(𝑥)在点

𝑥0处连续。19函数 在点 处连续,需要满足的条件:存在函数在该点处有定义函数在该点处极限极限值等于函数值高等数学-函数的连续性20,如果平均变化率的极限存在则称此极限为函数在点 处的导数,高等数学-导数21(1)

𝑦

=

𝑐(常数)则:

𝑦′=0(2)𝑦

=

𝑥𝛼(𝛼为实数) 则:

𝑦′=𝛼𝑥𝛼−1(3)𝑦

=

𝑎𝑥则:𝑦′

=

𝑎𝑥lna特例:

(e𝑥)′

=

e𝑥(4)𝑦=log𝑥则:𝑦′

=1𝑥lna,特例

(ln𝑥)′

=

(5)𝑦=

sin𝑥则:𝑦′

=

cos𝑥(6)𝑦=

cos𝑥则:𝑦′

=

−sin𝑥cos2𝑥(7)𝑦=tan𝑥则:

𝑦′

=

1 =

sec2𝑥sin2𝑥(8)𝑦=cot𝑥则:𝑦′=

1 =

−csc2𝑥(9)𝑦=sec𝑥则:𝑦′=

sec𝑥tan𝑥(10)𝑦

=

csc𝑥 则:𝑦′

=

−csc𝑥cotx(11)𝑦=arcsin𝑥则:𝑦′

=11−𝑥2(12)𝑦=

arccos𝑥则:𝑦′

=

−11−𝑥2(13)𝑦=

arctan𝑥则:𝑦′

=11+𝑥2(14)𝑦=

arccot𝑥则:𝑦′=−

1 1+𝑥2(15)𝑦=sℎ𝑥则:𝑦′=cℎ𝑥(16)𝑦=cℎ𝑥则:𝑦′=

sℎ𝑥高等数学-基本导数与微分表1x22(1) 𝑢

±

𝑣 ′=𝑢′±

𝑣′(2)(𝑢𝑣)′=𝑢𝑣′+

𝑣𝑢′𝑑(𝑢𝑣)=𝑢𝑑𝑣+

𝑣𝑑𝑢(3)

(u/v)′

=𝑣𝑢′−𝑢𝑣′𝑣2(𝑣

0) 𝑑( u/v)

=𝑣𝑑𝑢−𝑢𝑑𝑣𝑣2四则运算法则设函数𝑢

=

𝑢(𝑥),𝑣

=

𝑣(𝑥)在点𝑥可导,则:高等数学-四则运算法则232!𝑓(𝑥)

=

𝑓(𝑥0)

+

𝑓′(𝑥0)(𝑥

𝑥0)+

1

𝑓″(𝑥0)(

𝑥

𝑥0)2+

⋯+f(n)(x0)(𝑥−

𝑥)+𝑅(𝑥)其中

𝑅n(𝑥)

=(n+1)𝑓 (𝜉)(𝑛+1)!(𝑥−

𝑥n)n+1称为𝑓(𝑥)在点𝑥处的𝑛阶泰勒余项。令𝑥0

=

0,则𝑛阶泰勒公式:𝑓(𝑥)=𝑓(0)+𝑓′(0)𝑥

+12!𝑓″(0)𝑥2+⋯

+(𝑛)f(n)(0)𝑥n+

𝑅n(𝑥)……设函数𝑢

=

𝑢(𝑥),𝑣

=

𝑣(𝑥)在点𝑥可导,则:设函数𝑓(𝑥)在点𝑥0处的某邻域内具有𝑛

+

1阶导数,则对该邻域内异于𝑥0的任意点𝑥,在𝑥0与𝑥之间至少存在一个𝜉,使得:高等数学-泰勒公式n!24常用函数在𝒙0=

0处的泰勒公式

:1)e𝑥=1+𝑥+

1𝑥2+⋯+1

𝑥𝑛+

𝑜(𝑥𝑛)2!

𝑛!21 12 3

3 𝑛2)ln(1+𝑥)=

𝑥

𝑥 + 𝑥−⋯

+

(−1)𝑛−1

xn+

𝑜(𝑥𝑛)高等数学-泰勒公式25线性代数-行列式设𝐴=(aij)

𝑎in𝐴jn={

,则:𝑎𝑖1𝐴𝑗1

+𝑎𝑖2𝐴𝑗2

+⋯

+𝑛×𝑛或𝑎ij𝐴jn+

𝑎2iA2j+⋯+

𝑎niAnj=

{𝐴,𝑖=

𝑗0,𝑖≠

𝑗即𝐴𝐴∗=𝐴∗𝐴

=𝐴

𝐸,其中:𝐴∗

=𝐴11 𝐴12 … 𝐴1𝑛𝐴21 𝐴22 … 𝐴2𝑛… … … …𝐴𝑛1 𝐴𝑛2 … 𝐴𝑛𝑛=

(𝐴ji)=

(𝐴ij)T⾏列式的性质单位阵的行列式为1,det(I)

=1.行列式的某一行(列)的所有的元素都乘以同一数k,等于用数k乘此行列式.A∈Rn×n,,det(A)=

det(AT).A,B∈Rn×n,det(AB)=

det(A)det(B).当且仅当A为奇异方阵时,det(A)

=

0.当A为非奇异方阵时,det(A−1)

=1/det(A).𝐴,𝑖=

𝑗0,𝑖≠

𝑗26线性代数-矩阵矩阵:𝑚

×

𝑛个数𝑎ij排成𝑚行𝑛列的表格𝑎11𝑎21𝑎12𝑎22⋯⋯𝑎1𝑛𝑎2𝑛⋯

⋯𝑎𝑚1 𝑎𝑚2⋯𝑎𝑚𝑛称为矩阵,简记为𝐴,或者(𝑎ij)

。若𝑚

=

𝑛,则称𝐴是𝑛阶矩阵或𝑛阶方阵。𝑚×𝑛矩阵的乘法

:设𝐴

=

(𝑎𝑖𝑗)是𝑚

×𝑛矩阵,𝐵

=

(𝑏𝑖𝑗)是𝑛

×𝑠矩阵,那么𝑚

×𝑠矩阵𝐶

=

(𝑐𝑖𝑗),其中𝑐𝑖𝑗

=

𝑎𝑖1𝑏1𝑗

+

𝑎𝑖2𝑏2𝑗

+⋯+𝑎𝑖𝑛𝑏𝑛𝑗

=

Σk=1𝑎𝑖𝑘𝑏𝑘𝑗称为𝐴𝐵的乘积,记为𝐶

=

𝐴𝐵

。矩阵乘法的性质:

AB

≠BA,(AB)C=A(BC),A(B+C)=AB+

AC内积 :给定x,

y

Rn×1,xT

y为一个标量,称为向量的内积或点积, 记为⟨x,

y⟩.n27线性代数-求导𝑑𝑥𝑑𝑥𝑇=

𝐼𝑑𝑥𝑑𝑥𝑇=

𝐼𝑑𝑥𝑑𝑥𝑇𝐴=

𝐴𝑑𝑥𝑇𝑑𝐴𝑥=

𝐴𝑑𝑥𝑑𝐴𝑥=

𝐴𝑇𝑑𝑥𝑑𝑥𝐴=

𝐴𝑇𝜕𝑢

𝜕𝑥𝑇

=𝜕𝑢𝑇𝜕𝑥𝜕𝑢𝑇𝑣𝜕𝑥=𝜕𝑢𝑇𝜕𝑥𝜕𝑣𝑇𝑣+ 𝑢𝜕𝑥𝜕𝑢𝑣𝑇𝜕𝑥𝜕𝑢 𝜕𝑣𝑇= 𝑣 +

𝑢𝜕𝑥

𝜕𝑥𝑑𝑥𝑑𝑥𝑇𝑥=

2𝑥𝑑𝑥𝑑𝑥𝑇𝐴𝑥

=𝐴

+

𝐴𝑇𝑥𝜕𝑋𝜕𝑢𝑇𝑋𝑣=

𝑢𝑣𝑇𝜕𝑋𝜕𝐴𝐵=

𝜕𝐴𝐵+𝐴

𝜕𝐵𝜕𝑥 𝜕𝑥 𝜕𝑥𝜕𝑢𝑇𝑋𝑇𝑋𝑢=

2𝑋𝑢𝑢𝑇𝜕[

(𝑋𝑢−𝑣)𝑇(𝑋𝑢−𝑣)]𝜕𝑋=2(𝑋𝑢−

𝑣)𝑢𝑇𝑑𝑋𝑇𝐴𝑋𝑑𝑋=

2𝐴𝑋(如果A为对称阵)𝐴为𝑛

×

𝑛的矩阵,

x为𝑛

×

1的列向量28线性代数正交给定a, b ∈ Rn×1,如果aT

b

=

0,

那么向量a, b正交.对于方Rn×n阵A ∈ 来说,如果A的列向量两两正交,且ℓ2范数为1,那么A为正交阵,数学描述为AT

A=

I

=

AAT

.正定性对于A

∈ Rn×n,

∀w

∈ Rn×1,满足

wT

Aw

>0,

A为正定矩阵;

wTAw

≥ 0,

A为半正定矩阵29线性代数行列式按行(列)展开定理(1)

设𝐴

= 𝑎ij𝑛×𝑛,则:𝑎i1 j1𝐴 +

𝑎i2 j2𝐴 +⋯+

𝑎inj𝑛𝐴 =

{𝐴,𝑖=

𝑗0,𝑖≠

𝑗或𝑎1𝑖

1𝑗𝐴 +

𝑎2𝑖 2𝑗𝐴 +⋯+

𝑎ni

𝑛𝑗𝐴 =

{𝐴

,𝑖=

𝑗0,𝑖≠

𝑗即𝐴𝐴∗=𝐴∗𝐴

=𝐴

𝐸,其中:𝐴∗

=𝐴11 𝐴12 … 𝐴1𝑛𝐴21 𝐴22 … 𝐴2𝑛… … … …𝐴𝑛1 𝐴𝑛2 … 𝐴𝑛𝑛=

(𝐴 )=

(𝐴)𝑇30概率论与数理统计-随机事件和概率事件的关系(1)

子事件:𝐴

𝐵,若𝐴发生,则𝐵发生。(2)

相等事件:𝐴

=

𝐵,即𝐴

𝐵,且𝐵

𝐴

。(3)

和事件:𝐴⋃𝐵(或𝐴+

𝐵),𝐴与𝐵中至少有一个发生。(4)

差事件:𝐴

𝐵,𝐴发生但𝐵不发生。(5)

积事件:𝐴⋂𝐵(或𝐴𝐵),𝐴与𝐵同时发生。(6)

互斥事件(互不相容):𝐴⋂𝐵=⌀。(7)

互逆事件(对立事件):

𝐴⋂𝐵

=

⌀,

𝐴⋃𝐵

=

𝛺,

𝐴

=

𝐵,

𝐵

=

𝐴

。运算律(1)

交换律:𝐴⋃𝐵

=

𝐵⋃𝐴,

𝐴⋂𝐵

=

𝐵⋂𝐴(2)

结合律:(𝐴⋃𝐵)⋃𝐶

=

𝐴⋃(𝐵⋃𝐶);(𝐴⋂𝐵)⋂𝐶=

𝐴⋂(𝐵⋂𝐶)(3)

分配律:(𝐴⋃𝐵)⋂𝐶

=

(𝐴⋂𝐶)⋃(𝐵⋂𝐶)(4)

德.摩根律:𝐴⋃𝐵=

𝐴⋂𝐵𝐴⋂𝐵=

𝐴⋃𝐵31概率论与数理统计-古典型概率定义:试验E中样本点是有限的,出现每一样本点的概率是相同。一袋中有8个球,编号为1-8,其中1-3号为红球,4-8号为黄球,设摸到每一球的可能性相等,从中随机摸一球,记A={

摸到红球},求P(A)。32概率论与数理统计𝑃(𝐴)(1) 条件概率: 𝑃(𝐵|𝐴)

=

𝑃(𝐴𝐵)

,表示𝐴发生的条件下,𝐵发生的概率一袋中有8个球,编号为1-8,其中1-3号为红球,4-8号为黄球,设摸到每一球的可能性相等,从中随机摸一球,记A={

摸到红球},求P(A)。𝑖=1(2)

全概率公式:

𝑃(𝐴)

=

Σ𝑛𝑛𝑖=1𝑃(𝐴|𝐵𝑖)𝑃(𝐵𝑖),𝐵𝑖𝐵𝑗=⌀,𝑖≠𝑗,⋃𝐵𝑖=

𝛺.33概率论与数理统计(3)

Bayes公式:𝑃(𝐵

|𝐴)

=𝑃(𝐴|𝐵𝑗)𝑃(𝐵𝑗)𝑖=1𝑗 Σ𝑛𝑃(𝐴|𝐵𝑖)𝑃(𝐵𝑖),𝑗=1,2,⋯,

𝑛(4)乘法公式:

𝑃(𝐴1𝐴2)

=

𝑃(𝐴1)𝑃(𝐴2|𝐴1)

=

𝑃(𝐴2)𝑃(𝐴1|𝐴2)𝑃(𝐴1𝐴2⋯𝐴𝑛)=𝑃(𝐴1)𝑃(𝐴2|𝐴1)𝑃(𝐴3|𝐴1𝐴2)⋯𝑃(𝐴𝑛|𝐴1𝐴2⋯

𝐴𝑛−1)34概率论与数理统计-常见分布(1)

0-1分布:𝑃(𝑋

=

𝑘)

=

𝑝𝑘(1−𝑝)1−𝑘,

𝑘

=

0,1𝑛(2)二项分布:𝐵(𝑛,

𝑝): 𝑃(𝑋=𝑘)=𝐶𝑘

𝑝𝑘(1−𝑝)𝑛−𝑘,𝑘=0,1,⋯,

𝑛𝑘!𝑘(3)

Poisson分布:𝑝(𝜆): 𝑃(𝑋=𝑘)

=

𝜆 𝑒−𝜆,𝜆>0,𝑘=0,1,2

⋯Poisson分布的期望和方差都等于参数𝜆35概率论与数理统计-常见分布(4)

均匀分布𝑈(𝑎,

𝑏):𝑓(𝑥)

={

1𝑏−𝑎,𝑎<𝑥<𝑏(5)

正态分布:𝑁(𝜇,

𝜎2):𝜑(𝑥)

=12𝜋𝜎𝑒−(𝑥−𝜇)22𝜎2,𝜎>0,−∞<𝑥<

+∞(6)指数分布:𝐸(𝜆):

𝑓(𝑥)

={𝜆𝑒−𝜆𝑥,𝑥>0,𝜆>0

0,036概率论与数理统计数学期望离散型:𝑃

𝑋

=

𝑥𝑖=𝑝𝑖,𝐸(𝑋)=σ𝑖

𝑥𝑖𝑝𝑖−∞连续型:𝑋~𝑓(𝑥),𝐸(𝑋)=∫+∞𝑥𝑓(𝑥)𝑑𝑥性质:(1)𝐸(𝐶)=𝐶,𝐸[𝐸(𝑋)]=

𝐸(𝑋)(2)𝐸(𝐶1𝑋+𝐶2𝑌)=𝐶1𝐸(𝑋)+

𝐶2𝐸(𝑌)(3)

若X和Y独立,则𝐸(𝑋𝑌)

=

𝐸(𝑋)𝐸(𝑌)(4) 𝐸(𝑋𝑌)

2≤

𝐸(𝑋2)𝐸(𝑌2)协方差𝐶𝑜𝑣(𝑋,𝑌)=𝐸

(𝑋−𝐸(𝑋)(𝑌−

𝐸(𝑌))性质:(1)𝐶𝑜𝑣(𝑋,𝑌)=𝐶𝑜𝑣(𝑌,

𝑋)(2)𝐶𝑜𝑣(𝑎𝑋,𝑏𝑌)=𝑎𝑏𝐶𝑜𝑣(𝑌,

𝑋)(3)𝐶𝑜𝑣(𝑋1+𝑋2,𝑌)=𝐶𝑜𝑣(𝑋1,𝑌)+𝐶𝑜𝑣(𝑋2,

𝑌)37Python

的环境的安装AnacondaJupyter notebookPycharm详细教程:/p/590276923.

机器学习的背景知识-Python基础Python

的环境的安装38Anaconda/distribution/通常选3.7版本,64位可以用默认安装,右图两个选择框都勾上39Python

的环境的安装Jupyter notebook在cmd环境下,切换到代码的目录,输入命令:jupyter

notebook之后就可以启动jupyter

botebook编辑器,启动之后会自动打开浏览器,并访问http://localhost:8088,默认跳转到http://localhost:8088/tree40Pycharmhttps:///pycharm/Pycharm提供 免费的社区版 与 付费的专业版。专业版额外增加了一些功能,如项目模板、远程开发、数据库支持等。个人学习 Python

使用免费的社区版已足够。如果有edu邮箱,那么推荐使用专业版,edu邮箱是可以免费使用专业版的。安装过程照着提示一步步操作就可以了。注意:安装路径尽量不使用带有 中文或空格 的目录,这样在之后的使用过程中减少一些莫名的错误。Python

的环境的安装41Python

的主要数据类型字符串整数与浮点数布尔值日期时间其它42Python

的数据结构列表(list)用来存储一连串元素的容器,列表用[

]来表示,其中元素的类型可不相同。元组(tuple)元组类似列表,元组里面的元素也是进行索引计算。列表里面的元素的值可以修改,而元组里面的元素的值不能修改,只能读取。元组的符号是(

)集合(set)集合主要有两个功能,一个功能是进行集合操作,另一个功能是消除重复元素。

集合的格式是:set(

),其中()内可以是列表、字典或字符串,因为字符串是以列表的形式存储的字典(dict)字典dict也叫做关联数组,用大括号{

}括起来,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度,其中key不能重复。43Python控制流顺序结构分支结构循环结构break、continue和pass列表生成式44Python函数调用函数调用内置函数定义函数def 函数名():函数内容<return

返回值>高阶函数匿名函数:高阶函数传入函数时,不需要显式地定义函数,直接传入匿名函数更方便(lambda函数)594.

机器学习的开发流程机器学习概述机器学习的类型机器学习的背景知识机器学习的开发流程60机器学习的一般步骤61机器学习的一般步骤数据搜集数据清洗特征工程数据建模62不同视角的机器学习朋友以为我做的事情不同行业的人以为我做的事情父母以为我做的事情程序员以为我做的事情我自己以为我做的事情实际上我做的事情63通过这张图可以看出,各种不同算法在输入的数据量达到一定级数后,都有相近的高准确度。于是诞生了机器学习界的名言:成功的机器学习应用不是拥有最好的算法,而是拥有最多的数据!数据决定一切数据大小准确率课后作业1,基于机器学习及前沿课题研讨等,制作PPT介绍机器学习的定义及应用,第二周抽查5人进行课堂汇报,要求:(1)应用需涉及起码3个领域(比如医疗、教育、国防、

反欺诈、反骚扰、投资、文学、艺术、购物、娱乐等)(2)汇报时间控制在5-10分钟(3)页数不限2,学以致用(加分项)

Python基础库本章目录·numpy库概述pandas库概述scipy库概述matplotlib库概述scikit-learn库概述1.NumPy概述01

NumPy概述02NumPy数组(ndarry)对象03ufunc函数04NumPy的函数库46Python模块-NumPynumpyNumpy是一个用python实现的科学计算的扩展程序库,包括:1、一个强大的N维数组对象Array;2、比较成熟的(广播)函数库;3、用于整合C/C++和Fortran代码的工具包;4、实用的线性代数、傅里叶变换和随机数生成函数。numpy和稀疏矩阵运算包scipy配合使用更加方便。NumPy(Numeric

Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:LawrenceLivermore,NASA用其处理一些本来使用C++,Fortran或Matlab等所做的任务。标准的Python中用list(列表)保存值,可以当做数组使用,但因为列表中的元素可以是任何对象,所以浪费了CPU运算时间和内存。NumPy诞生为了弥补这些缺陷。它提供了两种基本的对象:ndarray:全称(n-dimensionalarrayobject)是储存单一数据类型的多维数组。ufunc:全称(universalfunctionobject)它是一种能够对数组进行处理的函数。NumPy的官方文档:/doc/numpy/reference/NumPy是什么?47Python模块-NumPy切片48Python模块-NumPy广播2.NumPy数组(ndarry)对象01

NumPy概述02NumPy数组(ndarry)对象03ufunc函数04NumPy的函数库1.1认识NumPy数组对象>importnumpyasnp#导入NumPy工具包

>data=np.arange(12).reshape(3,4)#创建一个3行4列的数组

>dataarray([[0,1,2,3],

[4,5,6,7],

[8,9,10,11]])

ndarray对维数没有限制。[]从内到外分别为第0轴,第1轴,第2轴,第3轴。NumPy最重要的一个特点是其N维数组对象ndarray,它是一系列同类型数据的集合,以0下标为开始进行集合中元素的索引。ndarray对象是用于存放同类型元素的多维数组。1.1认识NumPy数组对象2>type(data)numpy.ndarraydata.size#数组元素的个数,输出结果12,表示总共有12个元素data.dtype#数组元素的类型,输出结果dtype('int64'),表示元素类型都是int64>data.shape#数组的维度,输出结果(3,4),表示3行4列>data.ndim#数组维度的个数,输出结果2,表示二维数组(3,4)12dtype('int32')

1.2创建NumPy数组>importnumpyasnp

>data1=np.array([1,2,3])#创建一个一维数组

>data1

array([[1,2,3],

[4,5,6]])array([1,2,3])data2=np.array([[1,2,3],[4,5,6]])#创建一个二维数组

data2

np.zeros((3,4))#创建一个全0数组array([[0.,0.,0.,0.],

[0.,0.,0.,0.],

[0.,0.,0.,0.]])1.2创建NumPy数组>np.ones((3,4))#创建全一数组array([[1.,1.,1.,1.],

[1.,1.,1.,1.],

[1.,1.,1.,1.]])>np.empty((5,2))#创建全空数组,其实每个值都是接近于零的数

array([[6.95312756e-310,2.12199579e-314],

[2.12199579e-314,4.94065646e-324],

[0.00000000e+000,-7.06252554e-311],

[0.00000000e+000,-8.12021073e-313],

[1.29923372e-311,2.07507571e-322]])1.2创建NumPy数组

array([1,6,11,16])

array([1.,2.,3.,4.])

array([[1.,1.,1.],

[1.,1.,1.]])

>np.arange(1,20,5)>np.array([1,2,3,4],float)>np.ones((2,3),dtype='float64')ndarray的创建NumPy提供了专门用于生成ndarray的函数,提高创建ndarray的速度。>a=np.arange(0,1,0.1)array([0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9])>b=np.linspace(0,1,10)array([0.,0.11111111,0.22222222,0.33333333,0.44444444,0.55555556,0.66666667,0.77777778,0.88888889,1.])>c=np.linspace(0,1,10,endpoint=False)array([0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9])>d=np.logspace(0,2,5)array([1.,3.16227766,10.,31.6227766,100.])ndarray的创建np.empty((2,3),)创建2*3的整形型空矩阵,只分配内存np.zeros(4,)创建长度为4,值为全部为0的矩阵np.full(4,np.pi)创建长度为4,值为全部为pi的矩阵>deffunc(i):returni%4+1>np.fromfunction(func,(10,))array([1.,2.,3.,4.,1.,2.,3.,4.,1.,2.])还可以自定义函数产生ndarray。fromfunction第一个参数接收计算函数,第二个参数接收数组的形状。ndarray的属性ndarray的元素具有相同的元素类型。常用的有int(整型),float(浮点型),complex(复数型)。>a=np.array([1,2,3,4],dtype=float)array([1.,2.,3.,4.])>a.dtypedtype('float64')ndarray的shape属性用来获得它的形状,也可以自己指定。>c=np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]])>c.shape(3,4)>a=np.array([1,2,3,4])>d=a.reshape((2,2))array([[1,2],[3,4]])ndarray的切片ndarray的切片和list是一样的。>a=np.arange(10)>aarray([0,1,2,3,4,5,6,7,8,9])a[5]a[3:5]a[:5]a[:-1]----------------------------------------------------5[3,4][0,1,2,3,4][0,1,2,3,4,5,6,7,8]a[1:-1:2]a[::-1]a[5:1:-2]---------------------------------------------------[1,3,5,7][9,8,7,6,5,4,3,2,1,0][5,3]可以通过切片的对ndarray中的元素进行更改。>a[2:4]=100,101>aarray([0,1,100,101,4,5,6,7,8,9])ndarray的切片ndarray通过切片产生一个新的数组b,b和a共享同一块数据存储空间。>b=a[3:7]>b[2]=-10ba----------------------------------------------------------------------[101,4,-10,6][0,1,100,101,4,-10,6,7,8,9]如果想改变这种情况,我们可以用列表对数组元素切片。>b=a[[3,3,-3,8]]>barray([3,3,7,8])>b[2]=100ba----------------------------------------------------------------------[3,3,100,8][0,1,2,3,4,5,6,7,8,9]多维数组NumPy的多维数组和一维数组类似。多维数组有多个轴。我们前面已经提到从内到外分别是第0轴,第1轴…>a=np.arange(0,60,10).reshape(-1,1)+np.arange(0,6)array([[0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],[30,31,32,33,34,35],[40,41,42,43,44,45],[50,51,52,53,54,55]])a[0,3:5]a[4:,4:]a[2::2,::2]---------------------------------[3,4][[44,45],[[20,22,24],[54,55]][40,42,44]]#上面方法对于数组的切片都是共享原数组的储存空间的。结构数组C语言中可以通过struct关键字定义结构类型。NumPy中也有类似的结构数组。>persontype=np.dtype({'names':['name','age','weight'],'formats':['S30','i','f']})>a=np.array([("Zhang",32,75.5),("Wang",24,65.2)],dtype=persontype)我们就创建了一个结构数组,并且可以通过索引得到每一行。nameageweight0zhang3275.51wang2465.2>printa[0]('Zhang',32,75.5)3.ufunc函数01

NumPy概述02NumPy数组(ndarry)对象03ufunc函数04NumPy的函数库ufunc函数ufunc是universalfunction的简称,它是一种能对数组每个元素进行运算的函数。NumPy的许多ufunc函数都是用C语言实现的,因此它们的运算速度非常快。>x=np.linspace(0,2*np.pi,10)>y=np.sin(x)>yarray([0.00000000e+00,6.42787610e-01,9.84807753e-01,.....,-2.44929360e-16])值得注意的是,对于同等长度的ndarray,np.sin()比math.sin()快但是对于单个数值,math.sin()的速度则更快。四则运算NumPy提供了许多ufunc函数,它们和相应的运算符运算结果相同。>a=np.arange(0,4)>b=np.arange(1,5)>np.add(a,b)array([1,3,5,7])>a+barray([1,3,5,7])>np.subtract(a,b)#减法>np.multiply(a,b)#乘法>np.divide(a,b)#如果两个数字都为整数,则为整数除法>np.power(a,b)#乘方比较运算和布尔运算使用==,>对两个数组进行比较,会返回一个布尔数组,每一个元素都是对应元素的比较结果。>np.array([1,2,3])<np.array([3,2,1])array([True,False,False],dtype=bool)布尔运算在NumPy中也有对应的ufunc函数。表达式ufunc函数y=x1==x2equal(x1,x2[,y])y=x1!=x2not_equal(x1,x2[,y])y=x1<x2less(x1,x2[,y])y=x1<=x2not_equak(x1,x2[,y])y=x1>x2greater(x1,x2[,y])y=x1>=x2gerater_equal(x1,x2[,y])自定义ufunc函数NumPy提供的标准ufunc函数可以组合出复合的表达式,但是有些情况下,自己编写的则更为方便。我们可以把自己编写的函数用frompyfunc()转化成ufunc函数。>defnum_judge(x,a):#对于一个数字如果是3或5的倍数就ifx%3==0:返回0,否则返回a。r=0elifx%5==0:r=0else:r=areturnr>x=np.linspace(0,10,11)>y=np.array([num_judge(t,2)fortinx])#列表生成式array([0,2,2,0,2,0,0,2,2,0,0])自定义ufunc函数使用frompyfunc()进行转化,调用格式如下:>numb_judge=np.frompyfunc(num_judge,2,1)>y=numb_judge(x,2)array([0,2,2,0,2,0,0,2,2,0,0],dtype=object)frompyfunc(func,nin,nout)func:计算函数nin:func()输入参数的个数nout:func()输出参数的个数因为最后输出的元素类型是object,所以我们还需要把它转换成整型。y.astype()广播(broadcasting)我们看一下具体的例子:>a=np.arange(0,60,10).reshape(-1,1)>b=np.arange(0,5)>c=a+bcc.shape-----------------------------[[0,1,2,3,4],(6,5)[10,11,12,13,14],[20,21,22,23,24],[30,31,32,33,34],[40,41,42,43,44],[50,51,52,53,54]]广播(broadcasting)ogrid用来生成广播运算所用的数组。>x,y=np.ogrid[:5,:5]xy----------------------[[0],[[0,1,2,3,4]][1],[2],[3],[4]]下面操作和a.reshape(1,-1),a.reshape(-1,1)相同

。>a=np.arange(4)a[None,:]a[:,None]------------------------[[0,1,2,3]][[0],[1],[2],3]]4.NumPy的函数库01

NumPy概述02NumPy数组(ndarry)对象03ufunc函数04NumPy的函数库随机数除了前面介绍的ufunc()函数之外,NumPy还提供了大量对于数组运算的函数。它们能够简化逻辑,提高运算速度。我们首先看随机数。NumPy产生随机数的模块在random里面,其中有大量的分布。>fromnumpyimportrandomasnr>np.set_printoptions(precision=2)#显示小数点后两位数>r1=nr.rand(4,3)[[0.87,0.42,0.34],[0.25,0.87,0.42],[0.49,0.18,0.44],[0.53,0.23,0.81]]>r2=nr.poisson(2.0,(4,3))[[3,1,5],[2,2,3],[2,4,4],[2,2,3]]随机数rand0到1之间的随机数normal正态分布的随机数randint制定范围内的随机整数uniform均匀分布randn标准正态的随机数poisson泊松分布choice随机抽取样本shuffle随机打乱顺序求和,平均值,方差NumPy在均值等方面常用的函数如下:>np.random.seed(42)>a=np.random.randint(0,10,size=(4,5))>np.sum(a)96函数名功能sum求和average加权平均数var方差mean期望std标准差product连乘积求和,平均值,方差a--------------[[6,3,7,4,6],[9,2,6,7,4],[3,7,7,2,5],[4,1,7,5,1]]keepdims可以保持原来数组的维数。np.sum(a,1,keepdims=True)np.sum(a,0,keepdims=True)------------------------------------------------------[[26],[[22,13,27,18,16]][28],[24],[18]]np.sum(a,axis=1)np.sum(a,axis=0)-------------------------------------[26,28,24,18][22,13,27,18,16]大小与排序NumPy在排序等方面常用的函数如下:>a=np.array([1,3,5,7])>b=np.array([2,4,6])>np.maximum(a[None,:],b[:,None])#maxinum返回两组array([[2,3,5,7],矩阵广播计算后的[4,4,5,7],结果[6,6,6,7]])函数名功能函数名功能min最小值max最大值ptp极差argmin最小值的下标mininum二元最小值maxinum二元最大值sort数组排序argsort数组排序下标percentile分位数median中位数min,max都有axis,out,keepdims等参数,我们来看其他函数。大小与排序sort()对数组进行排序会改变数组的内容,返回一个新的数组。axis的默认值都为-1,即按最终轴进行排序。axis=0对每列上的值进行排序。np.sort(a)np.sort(a,axis=0)-----------------------------------[[3,4,6,6,7],[[3,1,6,2,1],[2,4,6,7,9],[4,2,7,4,4],[2,3,5,7,7],[6,3,7,5,5],[1,1,4,5,7]][9,7,7,7,6]]percentile计算处于p%上的值。>r=np.abs(np.random.randn(100000))>np.percentile(r,[68.3,95.4,99.7])array([1.00029686,1.99473003,2.9614485])统计函数NumPy中常用的统计函数有:unique(),bicount(),histogram()。我们来一个个介绍。首先看unique():>np.random.seed(42)>a=np.random.randint(0,8,10)>np.unique(a)anp.unique(a)------------------------------------------------[6,3,4,6,2,7,4,4,6,1][1,2,3,4,6,7]unique有两个参数,return_index=True同时返回原始数组中的下标,return_inverse=True表示原始数据在新数组的下标。>x,index=np.unique(a,return_index=True)]xindexa[index]------------------------------------------------------[1,2,3,4,6,7][9,4,1,2,0,5][1,2,3,4,6,7]统计函数>x,rindex=np.unique(a,return_inverse=True)rindexx[rindex]------------------------------------------------------------[4,2,3,4,1,5,3,3,4,0][6,3,4,6,2,7,4,4,6,1]bincount()对非负整数数组中的各个元素出现的次数进行统计,返回数组中的第i个元素是整数i出现的次数。>a=np.array([6,3,4,6,2,7,4,4,6,1])>np.bincount(a)array([0,1,1,1,3,0,3,1])>x=np.array([0,1,2,2,1,1,0])>w=np.array([0.1,0.3,0.2,0.4,0.5,0.8,1.2])>np.bincount(x,w)array([1.3,1.6,0.6])统计函数histogram()对以为数组进行直方图统计,其参数为:histogram(a,bins=10,range=None,weights=None)函数返回两个一维数组,hist是每个区间的统计结果,bin_edges返回区间的边界值。>a=np.random.rand(100)>np.histogram(a,bins=5,range=(0,1))(array([28,18,17,19,18]),array([0.,0.2,0.4,0.6,0.8,1.]))>np.histogram(a,bins=[0,0.4,0.8,1.0])(array([46,36,18]),array([0.,0.4,0.8,1.]))操作多维数组多维数组可以进行连接,分段等多种操作。我们先来看vstack(),hstack(),column_stack()函数。>a=np.arange(3)>b=np.arange(10,13)>v=np.vstack((a,b))#按第1轴连接数组>h=np.hstack((a,b))#按第0轴连接数组>c=np.column_stack((a,b))#按列连接多个一维数组vhc------------------------------------------------[[0,1,2],[0,1,2,10,11,12][[0,10],[10,11,12]][1,11],[2,12]]操作多维数组split()函数进行分段。>a=np.array([6,3,7,4,6,9,2,6,7,4,3,7])>b=np.array([1,3,6,9,10]>np.split(a,idx)#按元素位置进行分段[array([6]),array([3,7]),array([4,6,9]),array([2,6,7]),array([4]),array([3,7])]>np.split(a,2)#按数组个数进行分段[array([6,3,7,4,6,9]),array([2,6,7,4,3,7])]多项式函数多项式函数是整数的次幂与系数的乘积,如:f(x)=an(x^n)+an-1(x^(n-1))+…+a1(x)+a0NumPy中多项式函数可以用一维数组表示。a[0]为最高次,a[-1]为常数项。>a=np.array([1.0,0,-2,1])>p=np.poly1d(a)>printtype(p)<class'numpy.lib.polynomial.poly1d'>>p(np.linspace(0,1,5))array([1.,0.515625,0.125,-0.078125,0.])多项式函数可以进行四则运算,其中运算的列表自动化成多项式函数。多项式函数>p+[-2,1]poly1d([1.,0.,-4.,2.])>p*ppoly1d([1.,0.,-4.,2.,4.,-4.,1.])>p/[1,1]#分别为商和余(poly1d([1.,-1.,-1.]),poly1d([2.]))多项式也可以进行积分和求导。>p.deriv()poly1d([3.,0.,-2.])>eg()poly1d([0.25,0.,-1.,1.,0.])多项式函数Roots可以求多项式的根。>r=np.roots(p)>rarray([-1.61803399,1.,0.61803399])polyfit()可以对数据进行多项式拟合。x,y为数据点,deg为多项式最高阶数。>a=np.polyfit(x,y,deg)poly()返回多项式系数构成的数组。>a=np.poly(x)49Python模块-pandaspandaspandas

是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。pandas

纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。50Python模块-pandas基本数据结构Series一维数据结构,包含行索引和数据两个部分.DataFrame二维数据结构,包含带索引的多列数据,各列的数据类型可能不同.51Python模块-pandas数据索引df[5:10]通

.df[col_label]or

df.col_label选取列

.df.loc[row_label,

col_label]通过标签选取行/列.df.iloc[row_loc,

col_loc]通过位置(自然数)选取行/列.52Python模块-pandas数据合并pd.merge(left,

right)

类数据库的数据融合操作.参数:how,融合方式,包括左连接、右连接、内连接(默认)和外连接;on,连

接键;left_on,左键;right_on,右键;left_index,是否将left行索引作

为左键;right_index,是否将right行索引作为右键.53Python模块-pandas数据融合pd.concat([df1,

df2])轴向连接多个DataFrame.54Python模块-pandas文件读写从⽂件中读取数据(DataFrame)pd.read_csv()

|

从CSV文件读取.pd.read_table()

|

从制表符分隔文件读取,如TSV.pd.read_excel()|从Excel文件读取.pd.read_sql()|从SQL表或数据库读取.pd.read_json()

|

从JSON格式的URL或文件读取.pd.read_clipboard()

|

从剪切板读取.将DataFrame写⼊⽂件df.to_csv()|写入CSV文件.df.to_excel()|写入Excel文件.df.to_sql()

|

写入SQL表或数据库.df.to_json()

|

写入JSON格式的文件.df.to_clipboard()

|

写入剪切板.55Python模块-ScipyScipyscipy是构建在numpy的基础之上的,它提供了许多的操作numpy的数组的函数。SciPy是一款方便、易于使用、专为科学和工程设计的python工具包,它包括了统计、优化、整合以及线性代数模块、傅里叶变换、信号和图像图例,常微分方差的求解等scipy.cluster向量量化scipy.constants数学常量scipy.fftpack快速傅里叶变换egrate积分erpolate插值scipy.io数据输入输出scipy.linalg线性代数scipy.ndimageN维图像scipy.odr正交距离回归scipy.optimize优化算法scipy.signal信号处理scipy.sparse稀疏矩阵scipy.spatial空间数据结构和算法scipy.special特殊数学函数scipy.stats统计函数1102023/6/30

SciPy

SciPy建立在NumPy基础之上,集成了众多的数学、科学以及工程计算中常用库函数的Python模块,例如线性代数、常微分方程数值求解、信号处理、图像处理、稀疏矩阵等。通过给用户提供一些高层的命令和类,SciPy在Python交互式会话中大大增加了操作和可视化数据的能力。通过SciPy,Python的交互式会话变成了一个数据处理和system-prototyping的环境,足以和MATLAB

温馨提示

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

评论

0/150

提交评论