当前位置: 首页 > 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://cleverish.apjjykv.cn
http://fishtail.apjjykv.cn
http://oozie.apjjykv.cn
http://uncultivated.apjjykv.cn
http://autoeciousness.apjjykv.cn
http://cotta.apjjykv.cn
http://laminative.apjjykv.cn
http://yellows.apjjykv.cn
http://slavicize.apjjykv.cn
http://mope.apjjykv.cn
http://definitively.apjjykv.cn
http://lumpsucker.apjjykv.cn
http://newsiness.apjjykv.cn
http://deficient.apjjykv.cn
http://unenlightened.apjjykv.cn
http://boliviano.apjjykv.cn
http://emmagee.apjjykv.cn
http://hydrotropically.apjjykv.cn
http://strictly.apjjykv.cn
http://ceramist.apjjykv.cn
http://leiotrichous.apjjykv.cn
http://carborane.apjjykv.cn
http://harleian.apjjykv.cn
http://ochlocratic.apjjykv.cn
http://phosphor.apjjykv.cn
http://hdcopy.apjjykv.cn
http://fashioner.apjjykv.cn
http://metallothionein.apjjykv.cn
http://hurtling.apjjykv.cn
http://windbroken.apjjykv.cn
http://www.dtcms.com/a/280854.html

相关文章:

  • 【Unity】MiniGame编辑器小游戏(十四)基础支持模块(游戏窗口、游戏对象、物理系统、动画系统、射线检测)
  • 数学中的教学思想
  • MySQL 8.0 OCP 1Z0-908 题目解析(24)
  • P3842 [TJOI2007] 线段
  • Sharding-JDBC 分布式事务实战指南:XA/Seata 方案解析
  • sqli-labs靶场通关笔记:第18-19关 HTTP头部注入
  • 【C++】初识C++(1)
  • 课题学习笔记1——文本问答与信息抽取关键技术研究论文阅读(用于无结构化文本问答的文本生成技术)
  • Java 大视界 -- Java 大数据机器学习模型在金融风险传染路径分析与防控策略制定中的应用(347)
  • QT——QList的详细讲解
  • Redis的下载安装+基础操作+redis客户端的安装
  • 使用 1Panel PHP 运行环境部署 WordPress
  • 辨析git reset三种模式以及和git revert的区别:回退到指定版本和撤销指定版本的操作
  • 零样本轴承故障诊断SC - GAN模型
  • 【PCIe 总线及设备入门学习专栏 5.1.2 -- PCIe EP core_rst_n 与 app_rst_n】
  • React-router
  • 未来大模型在中小型企业如何实现普及
  • PG备份一(逻辑备份)
  • Kafka——生产者消息分区机制原理剖析
  • Java基础教程(009): Java 的封装
  • Samba配置使用
  • 算法学习笔记:23.贪心算法之活动选择问题 ——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • 重学前端005 --- 响应式网页设计 CSS 盒子模型
  • Python函数进阶
  • python 基于 httpx 的流式请求
  • 封装---统一处理接口与打印错误信息
  • Linux下调试器gdb/cgdb的使用
  • Linux系统调优和工具
  • [面试] 手写题-对象数组根据某个字段进行分组
  • mysql官网的版本历史版本下载