当前位置: 首页 > news >正文

【机器学习】第二章 Python入门

随着人工智能的发展,很多人想学习机器学习,那么究竟选择什么语言呢?在信息发达、语言众多的情况下,我们为什么选择Python?根据数据分析,机器学习中使用得最多的语言就是Python。Python一般来说 没有C语言运行速度快,又没有R语言开发速度快,为什么还能占据使用量的榜首呢?接下来让我们了解一下Python语言。

2.1 Python语言介绍

Python作为一门开源语言,使用广泛,入门非常快,语法简单、易读,是一门解释性强、交互式、面向对象、跨平台的语言。有相关数据显示,Python语言的使用率占据机器学习使用语言排行榜的榜首。从Python自身来说,其实这可以归因于Python语法的简单。

Python还被称为“胶水语言”,它不仅可以使用Python语言编程,还可以使用C语言、C++编程,它把耗时的代码交给C/C++等高效率的语言进行实现,然后通过“黏合”来使用代码,这样就使Python运行速度得到优化。Python还具有列表、元组、字典等核心数据类型,以及无须进一步编程就能直接使用集合、队列等数据类型。

选择Python还有一个重要的原因,就是Python拥有众多第三方库。由于Python可以应用到多个领域,功能比较丰富,可扩展性强,因此基于Python生成了非常多的第三方库。Python本身不包含这些库,使用它们时需要先安装,然后才能导入。大量的第三方库可以被运用到机器学习中,例如图形库、数学函数库、机器学习算法库等。

2.2 Python 平台搭建

Python适用于多个平台,并且拥有多个版本,用户可以通过Python官方网站根据自己的平台选择合适的版本下载。本书中的代码运行和安装都基于Windows平台,Python在其他平台上的安装方法和Python其他版本的安装方法都大同小异。用户可以通过Python官方网站下载安装包后进行安装,然后勾选“Add Python to PATH”选项,就可以省去手动添加环境变量的步骤。除了安装位置,其余设置保持默认值即可。

安装完成后,打开命令提示符窗口,输入Python -V,如果出现以下界面则表示安装成功:

Python安装完成后,为了方便应用,还可以选择并安装一款编译器。本书选择了JetBrains PyCharm,这是一款优秀的编译器,可跨平台使用,带有提高效率的开发工具,例如调试、语法高亮、代码跳转等。通过其官方网站下载安装包并安装后打开,如图2-1所示,单击“Create NewProject”按钮就可以开始创建项目了。

项目创建完成后我们就可以编写Python代码了,但这只是第一步,还需要安装第三方库。pip是Python自带的一个官方推荐的包管理工具,通过它可以安装所需的第三方库。在安装第三方库之前,需要先去其官方网站下载,然后进行pip安装。本书用到的第三方库有sklearn、mglearn、NumPy、SciPy、pandas、Matplotlib、Graphviz 等。

首先打开命令提示符窗口,然后利用pipinstallXX×(×XX为相应的库名)命令逐步安装sklearn、mglearn等。例如:

出现 Successfully installed XXX字样则表示安装成功。安装完成后,输入 pip list 命令可以查看当前已经安装的库、如图2-2所示。在编译器中选择File→Settings一Project:untitled一Project Interpreter命令也能看到,如图2-3所示。

完成上述所有库操作后,在编译器中输入下列语句不报错,则代表这些库能正常使用。

2.3 Python 的基本概念

Python语言相对于其他语言在很多地方都进行了简化,例如删除了每个语句后的“;”和常用的“{}”,在语句中一般通过缩进来实现它们的功能。下面介绍常用的Python的基本概念。

2.3.1 基本数据类型

我们先从Python的基本数据类型说起。Python和其他语言一样包含数值型、字符串类型、布尔型和空值,但Python和其他语言不同的是,在Python中定义变量是不需要指定类型的。

1.数值型 数值型的代码示例如下:

2.字符串类型 字符串类型的代码示例如下:

在整数类型和字符串类型的匹配中,用到了一个格式化字符串的函数format),它不但可以对字符串进行格式化,还能对数值进行格式化。在对字符串的处理中运用了切片,例如输出结果中str[0]对应第一个字符t,str[-1]对应最后一个字符m。

Python有两种索引方式,一种是正索引,另一种是负索引。我们既可以通过正索引进行查询,也可以通过负索引进行查询。如表2-1所示。

在进行切片操作时,一般使用如下语法:

start_index:开始索引(包括自身)。

end_index:结束索引(不包括自身)

step:步数,其值的正负决定了切片方向。

具体例子如下代码所示:

如果选择开始索引对应的字符在结束索引对应的字符前面,且对字符串进行反方向切片,则代码会产生矛盾,不提供输出结果,代码如下:

3.布尔型 布尔型的代码示例如下:

4.空值 空值的代码示例如下:

2.3.2 基本运算

1.运算符 Python保留了其他语言的基本运算规则,又改变了某些运算符的规则,例如1/2,在其他语言中,两个整数相除得到的还是一个整数,但是Python修改了规则,两个整数相除得到的是现实数学运算中的结果,使用运算符“/”的运算才是我们熟知的其他语言中整数相除的运算。

Python还增加了“ * *”运算符,例如 2**31,表示2的31次方。Python能存储较大的数值,基本不会出现越界的情况。代码如下:

2.多变量赋值 Python还简化了多变量赋值。在其他语言中,如果要实现多变量赋值,必须手动定义中间变量,而Python通过后台自动定义中间变量,简化了手动操作的步骤。代码如下:

2.3.3 控制语句

1.条件控制语句 在下面的代码中,inputO用于接收输入,不管输入是何种类型的数据,都会被转换成字符串类型的数据。因此,在input(外面添加intO进行显式转换,将数据转换成整数类型的数据。在条件控制语句中,注意在每个条件语句后都有一个“:";并且elif代替了其他语言中的elseif;在条件语句中,与、或、非分别对应“and”“or”“not”。代码如下:

2.循环语句 通过循环语句,可以看到range()函数仍然遵循左闭右开的原则。代码如下:

3.条件循环语句 在Python中是没有自增或者自减运算符的,自增和自减可以通过n=n+1和n=n-1来实现。这里赋值号前面的n相当于一个新的变量,而不是赋值号后面的 n。在Python中,也不支持do-while语句,如果需要用到它,可以通过条件循环语句while(True)和break实现。代码如下:

2.3.4 复杂数据类型

列表(list)、元组(tuple)字典(dict)、集合(set)是Python中常用的复杂数据类型

1.列表 列表是可变的数据类型,被创建后可以添加、删除或者搜索数据,在Python中用口]表示。代码如下:

2.元组 元组和列表相似,但元组不可变,即不能添加或删除元组内的信息。但元组可以嵌套列表或元组。它在Python中用()表示。代码如下:

虽然元组不可变,但是元组内嵌套的列表是可变的。

3.字典 字典是可变的,其元素类型包括键和值,键和值用“:”隔开,每个元素用“”隔开。且字典中的键是唯一的。它在Python中用()表示。代码如下:

4.集合 集合与字典类似,但只包含键,没有对应的值,且包含的键不能重复。它在Python中用set()或{}表示,set()中可以是列表、元组、字符串等。代码如下:

2.3.5 函数

函数在任何时候都非常重要。自己建立函数解决机器学习问题,是一件不容易的事。Python中函数的语法:利用def作为关键字开头,def后面跟函数名、参数等,通过缩进表示函数内的内容。代码如下:

2.4 Python 库的使用

  1. scikit-learn scikit-learn被简称为sklearn,是机器学习相关较重要的Python库之一,其中包括大量的机器学习算法,还包括大量的小型数据集,可节省为了获取数据集应花费的时间,使新手很容易上手,因而成为广泛应用的、重要的机器学习库。sklearn还包括许多功能,例如分类、回归、聚类、降维、模型选择和数据的预处理等。

  2. mglearn 机器学习主要运用到 mglearn库的两个方面:一是利用Matplotlib作图时,mglearn库中有配置好的配色方案;二是mglearm库中有加载和获取常用数据集、人工生成数据集的模板1oad,可以引用sklearn.datasets模块。

  3. NumPy NumPy支持大量高级的维度数组与矩阵运算,它要求列表中所有元素类型都是相同的,然后将列表转换成相对应的数组进行运算。而且NumPy具有矢量运算能力,运算快速、节省空间。此外,NumPy针对数组运算提供大量的数学函数库。NumPy库的简单应用如下:

先创建一个嵌套的列表,接下来利用NumPy库进行处理。代码如下:

可以看到通过NumPy库的处理,列表此时已经转换成3×3的矩阵。接下来分别对这两个数据进行矢量运算,看会出现什么结果。代码如下:

可以看到经NumPy库处理的数据进行了矢量运算,而原始数据只对自己进行了复制。在一维数据中可以通过切片访问数据,在处理过的矩阵中也可以通过切片访问数据。代码如下:

通过切片可以访问某行、某列或者某一个数据。与一维数据相比,二维矩阵中的数据通过在行、列的位置之间加个“,”即可访问。

4.SciPy SciPy建立在NumPy的基础之上,是用于数学、科学、工程领域的第三方库。它主要用于有效计算NumPy数组,使NumPy和SciPy协同工作,高效解决问题,如统计、优化、数值积分、图像处理、信号处理以及常微分方程数值解的求解问题等。SciPy库的简单应用如下。SciPy主要结合NumPy数组用于处理稀疏矩阵,记录NumPy数组中只存储非零数据的位置。例如、首先创建一个稀疏矩阵。代码如下:

接下来利用SciPy库的稀疏矩阵sparse来处理:

通过csr_matrix(函数的处理,记录了稀疏矩阵中所有非零数据的位置。

5.pandas pandas也是基于NumPy创建的为了解决数据分析问题的一种数据处理工具,它纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具以及大量能快速、便捷地处理数据的函数和方法。pandas库的简单应用如下。

pandas常用的数据类型有Series、DataFrame、Panel等,它们分别用来处理一维、二维和三维数据,其中应用得最多的是DataFrame,它能将NumPy数组或者字典转换成类似于表格的类型,有行标签和列标签。例如:

6.Matplotlib Matplotlib是一款绘图工具,用于绘制直方图、线形图、散点图等,类似于MATLAB,有MATLAB基础的读者能够快速上手Matplotlib。Matplotlib库的简单应用如下。Matplotlib分别利用histO、plot()、scatter()绘制直方图、线形图、散点图,下面通过简单的例子逐一绘制。

(1)绘制直方图的代码如下:

(2)通过NumPy库的随机函数生成符合正态分布的200个数据,然后通过Matplotlib库中的pyplot绘制线形图,代码如下:

(3)横轴上通过np.linspace在-10~10范围内生成数列,纵轴上通过绝对值函数abs()生成因变量。 绘制散点图的代码如下:

 

输出结果如图2-6所示,代码通过随机函数生成20个随机点。

7.Graphviz Graphviz和Matplotib都是图形绘制工具。在做数据可视化的时候可以使用Graphviz 库,它往往用于生成决策树、流程图。

2.5小结

本章介绍了为什么选择Python语言、Python平台的搭建,以及Python语言的基本概念,还介绍了第三方库的各种功能和使用方法。本章要求掌握Python的基本语法规则,了解各种库的基本功能。通过对前文内容的学习,我们迈出了掌握机器学习的第一步,后文将介绍机器学习的算法。

习题2

  1. Python去除了 do-while 循环,现在需要让循环语句中的循环体至少循环一次,应该如何设计?

  2. 现有一个列表L=[b','c,'d,'c',"b,'a,'a],不使用列表自带的删除功能,怎么才能去除其中的重复部分?

  3. 程序设计:通过Python输出九九乘法表。

  4. 程序设计:一个球从50m高度自由落下,每次落地后反弹回原高度的一半,再落下,求它在第5次落地时,共经过多少m?第5次反弹时高度为多少?通过Python实现。

  5. 通过Python的第三方库绘制任意直方图、线形图、散点图。

http://www.lryc.cn/news/589110.html

相关文章:

  • 【安卓笔记】RxJava之flatMap的使用
  • PyTorch笔记6----------神经网络案例
  • 【人工智能99问】神经网络的工作原理是什么?(4/99)
  • Android中Launcher简介
  • MySQL索引与事务详解:用大白话讲透核心概念
  • compose、 pipe 组合函数实现
  • 从底层技术到产业落地:优秘企业智脑的 AI 革命路径解析
  • Basilisk库教程(二)
  • QT——QList的详细讲解
  • SpringBoot3.0 +GraalVM17 + Docker
  • AI大模型训练相关函数知识补充
  • MongoDB基础增删改查命令
  • vscode配置运行完整C代码项目
  • B/S 架构通信原理详解
  • 高标准农田气象站的功能
  • 亚矩阵云手机:破解 Yandex 广告平台多账号风控难题的利器
  • 云服务器如何管理数据库(MySQL/MongoDB)?
  • 《大数据技术原理与应用》实验报告四 MapReduce初级编程实践
  • Keepalived双机热备概述
  • 死锁问题以及读写锁和自旋锁介绍【Linux操作系统】
  • Sersync和Rsync部署
  • 免杀学习篇(1)—— 工具使用
  • Dify的默认端口怎么修改
  • 算法学习day16----Python数据结构--模拟队列
  • Nuxt3宝塔PM2管理器部署
  • linux系统------LVS+KeepAlived+Nginx高可用方案
  • LVS(Linux Virtual Server)详细笔记(理论篇)
  • 李宏毅《生成式人工智能导论》 | 第9讲 AI Agent
  • Jfinal+SQLite java工具类复制mysql表数据到 *.sqlite
  • 设计模式笔记_结构型_适配器模式