学编程的应该都学过Python吧,可谓是最实用的语言了。但是为什么机器学习选择了Python语言,而不去选择其他语言呢?还有Python语言我们都应该掌握哪些基础呢?想知道这些问题,那我们这章,就跟随布树辉老师一起来学习下Python!
配套学习资源:
在线视频:https://www.bilibili.com/video/BV1oZ4y1N7ei/?p=9
讲义:https://gitee.com/pi-lab/machinelearning_notebook
一、为什么选择Python
Python的设计哲学是优雅、明确、简单,且与其他编程语言相比,初学者更容易上手。
Python是一种解释型的、高级的、通用的、面向对象的动态语言,主要特点包括:简单易用,学习成本低;拥有大量的标准库和第三方库;开源且免费试用。
Python拥有良好的生态、较低的学习门口、方便的开发体验,已成为大众最喜欢的语言之一。
二、安装Python环境
由于Python的库较多,且依赖关系比较复杂,Python一般通过包管理系统来管理计算机中安装的Python软件包。目前,主要的包管理系统有pip和Anaconda。为了让初学者快速地使用Python,本书主要以Python为例介绍如何安装。
注意:本书的安装说明中有较多的细节,可能与读者的系统不适配,因此可能会遇到问题,遇到问题时,请通过搜索引擎查找解决办法,以提高自己解决问题的能力。
Windows安装
这里我只例举Windows下的安装:
由于网络下载速度较慢,因此推荐使用镜像来提高下载的速度。镜像的使用方法可以参考:Anaconda镜像的说明文档
-
在下列镜像网站找到适合自己的安装文件,然后下载
例如: https://mirrors.bfsu.edu.cn/anaconda/archive/Anaconda3-2020.11-Windows-x86_64.exe
-
按照说明,把Anaconda安装好。
登录anaconda的官网下载,anaconda是一个集成的工具软件不需要我们再次下载。
anaconda官网
输入你的邮箱注册
点击立即下载,选择windows版本
直接双击安装,下一步就好了。
windows搜索框里找一下anaconda prompt
打开,出现(base),安装成功。
设置软件源
各系统都可以通过修改用户目录下的.condarc文件。
Windows 用户无法直接创建名为.condarc的文件,可先执行conda config --set show_channel_urls yes生成该文件之后再修改。然后在命令行输入notepad .condarc将下面的内容拷贝到文本编辑器里面。
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.bfsu.edu.cn/anaconda/pkgs/main
- https://mirrors.bfsu.edu.cn/anaconda/pkgs/r
- https://mirrors.bfsu.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.bfsu.edu.cn/anaconda/cloud msys2:https://mirrors.bfsu.edu.cn/anaconda/cloud
bioconda: https://mirrors.bfsu.edu.cn/anaconda/cloud
menpo: https://mirrors.bfsu.edu.cn/anaconda/cloud
pytorch: https://mirrors.bfsu.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.bfsu.edu.cn/anaconda/cloud
simpleitk: https://mirrors.bfsu.edu.cn/anaconda/cloud
设置pip源
pip config set global.index-url https://pypi.mirrors.ustc.edu.cn/simple/
新建conda环境
conda create -n machinelearning python=3.9
安装常用Python库
conda install jupyter scipy numpy sympy matplotlib pandas scikit-learn
安装PyTorch
GPU 版本
# 访问 https://pytorch.org/,查最新的安装命令
# 例如 pytorch-cuda=11.6
# 安装cudatoolkitconda
install cudatoolkit
# 安装最新版本
conda install pytorch torchvision torchaudio pytorch-cuda -c pytorch -c nvidia
# 安装特定版本
#conda install pytorch torchvision torchaudio pytorch-cuda=11.6 -c pytorch -c nvidia
CPU 版本
conda install pytorch -c pytorch
pip3 install torchvision
检测GPU是否在PyTorch中可用:
python
>>> import torch
>>> torch.cuda.is_available()
Conda使用技巧
Conda创建自己的环境
conda create -n <your_env> python=x.x
# exampleconda create -n machinelearning python=3.9
上面的python=x.x中的x.x对应自己系统中的Python版本
Conda怎么激活自己的环境
conda activate <your_env>
# example conda activate machinelearning
Conda常用命令
# 帮助命令
conda -h
conda help
# 配置频道(已有)
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/pkgs/main/
# 退出当前环境
conda deactivate
# 克隆环境
conda create -n BBB --clone AAA
# 查看基本信息
conda infoconda info -h
# 查看当前存在环境
conda env listconda info --envs
# 删除环境
conda remove -n <your_env> --all
三、Jupyter Notebook
本在线讲义使用Jupyter Notebook编写,因此首先介绍Jupter Notebook的使用方法。使用Notebook,可以方便的将理论描述、程序、数据可视化等集成在一个多媒体页面,方便大家的学习。
Jupyter notebook 是一种 Web 应用,它能让用户将说明文本、数学方程、代码和可视化内容全部组合到一个易于共享的文档中,非常方便研究和教学,让编写、阅读变得一目了然。Jupyter notebook特别适合做科学计算、数据处理,其用途可以包括数据清理和探索、可视化、机器学习和大数据分析。
Jupyter 安装
安装Jupyter最简单的方法就是使用 Anaconda,其发行版附带了 Jupyter Notebook。在 conda 环境下安装 Jupyter Notebook 可以使用
conda install jupyter
当然,也可以通过pip来安装
pip install jupyter
安装后便可在终端中输入以下命令启动:
# jupyter notebook
或者
# jupyter-notebook
常用操作
点击右上角的新建一个文件
输入以下代码
print("Hello Machine Learning!")
ctrl+Enter运行后可看到打印如下
ctrl+s保存
四、Python基础
可能很多人都已经学习过Python,我们这里就做一个复习,如果有不会的部分,可以在网上搜索自学!
这里把布树辉老师的学习讲义放到这里,方便初学者学习:https://gitee.com/pi-lab/machinelearning_notebook/blob/master/0_python/1_Basics.ipynb
导入库与Python之禅
#导入库
import os
os.listdir('.')
变量
用于表示某个对象或值的名称成为变量。
运算符
1.算术运算符
算术运算符即数学运算符,用来对数字进行数学运算,如加、减、乘、除。
2.关系运算符
关系运算符也称比较运算符,用于对常量、变量或表达式的结果进行大小比较。
内置函数
1.range()函数
range()函数输出指定范围内的整数。他还可通过指定特定范围内的两个数字之差来生成一个序列,元素以迭代容器的形式返回。
2.int()函数
int()函数将字符串或浮点数转换为整数。他有两个参数输入,一个是不同数字系统中的值,另一个是它的基数。
类似的函数还有用于转换为二进制数的bin()、用于转换为浮点数的float()、返回值是当前整数对应的ASCII字符的chr()、用于获得字符的ASCII值的ord().
3.round()函数
round()函数将输入值四舍五入为指定的位数和最接近的整数。
4.type()函数与isinstance()函数
由于Python是脚本语言,变量的类型不需要事先定义,所以有时候需要判断变量的类型,这就要用到类型判断函数type(),该函数返回给定变量的类型。另外一个判断类型的函数是isinstance()函数,它判断给定的变量是否是给定的类型,若是,则返回True;这个函数还可同时检查多个类型。
五、print()函数
print()函数是Python的内置函数,照顾要用于打印变量的值。
在Python中,单引号(‘)、双引号(“”)和三引号(“”“)用于表示字符串。
%s用于引用包含字符串的变量。
六、数据结构
数据结构是计算机存储、组织数据的方式,简单来说是指相互之间存在一种或多种特定关系的数据元素的集合。
Python中的数据结构设计的非常巧妙,使用起来非常方便,几乎绝大多数的数据结构都可以通过list,tuple,dict,string,set等表示,因此用户几乎不需要自己定义数据结构,仅仅使用Python内置的数据结构即可实现非常复杂的算法和操作。
列表
列表是最常用的数据结构,可以把它看作用方括号括起来的数据序列,数据之间用逗号分隔。这些数据都可以通过调用其索引值来访问。
1.1 索引
1.2 切片
1.3 列表的内置函数
1.4 复制一个列表
元组
元组与列表相似,但唯一大的区别是列表中的元素可以更改,而元组中的元素不能更改。
2.1 将一个元组映射到另一个元组
2.2 元组内置函数
集合
集合主要用于消除序列/列表中的重复数字。它还用于执行一些标准的集合操作。
3.1 内置函数
字符串
字符串是基于文本的有序数据,用单/双/三重引号括起来表示。
4.1 内置函数
词典
词典更像数据库,因为在这里你可以用用户定义的字符串索引特定的序列。
5.1 内置函数
七、控制流语句
一般情况下,程序按照语句编写顺序依次执行,形成标准的面向过程的结构化形式。然而,由于程序具有很强的逻辑性,有时需要根据某些条件选择性地执行某些语句或者跳过某些语句。控制流语句用于控制程序流程的选择、循环、转向、和返回等,以实现程序的各种结构。Python的流程控制语句和其他语言类似,如C语言。
判断语句
1.1 If
1.2 If-else
1.3 if-elif
循环语句
2.1 for
2.2while
2.3break
2.4continue
列表推导(List Comprehensions)
Python可以使用列表推导模式,用一行代码就可以很容易地生成所需的列表。
八、函数
在大部分时候,在一个算法中,需要重复执行一组语句,如果每次都重复写出来,不仅乏味而且编程效率比较低,降低程序的可读性。为了将重复的执行抽象出来,可使用函数将一组操作封装成一个整体,给一个名称和参数列表作为可变量的输入。
函数的参数
定义一个函数first_func()
def first_func():
print("Hey Jack!")
print("Jack, How do you do?")
first_func()
funca=first_func
funca()
Hey Jack!
Jack, How do you do?
Hey Jack!
Jack, How do you do?
first_func() 每一次只打印一个人的消息。我们可以让函数 first_func() 接受参数,该参数将存储名称然后打印相应地接受字符串。为了这样做,需要像所示的那样在函数内添加一个参数。
返回语句
当函数产生某个值,并且该值必须存储在一个变量中,或者需要返回或返回给主算法进行进一步操作时,使用return语句。
默认参数
当一个函数的参数在大多数情况下是常见的或者它是隐式的时,使用这个概念。
任意数量的参数
如果函数要接受的参数数量未知,则在参数前使用星号。
全局变量和局部变量
在函数内部声明的变量是局部变量,生命周期限于函数执行期间;在函数外部声明的是全局变量。
lambda函数
程序中有时需要临时使用一个简单的函数,单独定义出来比较费事,为了提高编程效率,Python等很多语言引入了Lambda函数,这些Lambda函数没有使用任何名称定义,只携带一个表达式,返回的是函数本身(类似函数指针或者函数对象)。Lambda函数在操作列表时非常方便。这些函数由关键字lambda定义,后面跟着变量、冒号和相应的表达式。
九、类和对象
Python中的变量、列表、字典等在底层都是对象,对象是类的实列,而类是用来描述具有相同属性和方法的对象集,它定义集合中每个对象共有的属性和方法。
本节常见的定义和概念定义:
-
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例
-
对象(Object):通过类定义的数据结构实例(Instance),对象包括两类成员(类变量和实例变量)和方法。例如我们定义了一个Person类,而具体的人,比如小明,小黄就是Person类的实例
-
属性: 描述该类具有的特征,比如人类具备的属性,身份证,姓名,性别,身高,体重等等都是属性
-
方法: 该类对象的行为,例如这个男孩会打篮球,那个女孩会唱歌等等都是属于方法,常常通过方法改变一些类中的属性值
类
成员函数与变量
类是现实事物的抽象表达,往往存在一些对内和对外的操作,即实现一些功能。这些功能一般代表类中的函数和变量,而类内的函数成为该类的”方法“,类中的变量成为属性。
继承
继承是面向对象编程的一种重要方式,通过继承,子类可以扩展父类的功能。父类是继承的类,也称基类;子类是从另一个类继承的类,也称派生类。
总结
本章讲述了Python的一些基础用法,通过学习,也应该初步掌握了Python,但这还远远不够,还需要大量的练习和调试,系统的地学习Python编程。我们暂时对Python的基础用法学习到这步,下面我们再一起学习一下Python的库!