Python机器学习算法入门教程(二)

简介: 常言道“工欲善其事,必先利其器”,在学习机器学习算法之前,我们需要做一些准备工作,首先要检查自己的知识体系是否完备,其次是要搭建机器学习的开发环境。

Python机器学习环境搭建

常言道“工欲善其事,必先利其器”,在学习机器学习算法之前,我们需要做一些准备工作,首先要检查自己的知识体系是否完备,其次是要搭建机器学习的开发环境。本教程以讲解算法为主,不会涉及太复杂的应用案例,在讲解过程中会穿插一些示例代码,这样不仅能够帮助你理解算法原理,同时又能让你体会到算法的应用过程。

机器学习的研究方向有很多,比如图像识别、语音识别、自然语言处理、以及深度学习等,因此它是一门较为复杂的技术,有一定的“门槛”要求。如果你对编程知识一无所知,就想熟练应用机器学习,这几乎是天方夜谭。那么您应该掌握哪些知识才能更好地学习本教程呢?包括下列四大核心知识。

Python

对于编程人员来说,想到“机器学习”第一个关联起来的词汇就是“Python”。近几年, Python 之所成为炙手可热的“流量小生”,这与它对“人工智能”领域的“鲸吞”有很大关系。目前而言,在人工智能领域能与 “Python”一较高下的只有 R 语言。不过由于 Python 语言的简洁性、易读性,以及 Python 对科学计算和深度学习框架(Tensorflow、Pytorch 等)的良好支持等,使得 Python 处于远远领先的位置。

目前为止,Python 是对“机器学习”最为友好的一门语言,因此学习机器学习的第一个前提条件就是熟练应用 Python 语言。关于 Python 的学习不再本教程介绍范围之内,您可以参考《Python基础教程》进行针对性学习。

2020 年 Python 官方宣布暂停对 Python 2.x 版本的维护工作,并把 2.7 版本作为最后一个支持维护的版本。截止本教程书写前,Python 最新版本是 3.9 版本,因此建议你选择 3.6 以上版本来安装使用。Python 除了自身的拥有强大的标准库外,还有非常丰富的第三方支持库。您可使用 Python 内置的包管理器pip轻松地管理资源包的下载与更新。

NumPy

NumPy(https://numpy.org/)属于 Python 的第三方扩展程序包,它是 Python 科学计算的基础库,提供了多维数组处理、线性代数、傅里叶变换、随机数生成等非常有用的数学工具。

NumPy 的安装方式非常简单,在安装好 Python 的基础上使用包管理器来安装,命令如下所示:

pip install numpy

我们知道机器学习与数学有着非常紧密的关系,因此熟练的应用 NumPy 也是你要面对的第一个挑战,它可以让你认识到 Python 在科学计算方面的优势。NumPy 并不在本教程讲解范畴内,当然,后期我会出教程的。

Pandas

Pandas 属于 Python 第三方数据处理库,它基于 NumPy 构建而来,主要用于数据的处理与分析。我们知道对于机器学习而言数据是尤为重要,如果没有数据就无法训练模型。Pandas 提供了一个简单高效的 DataFrame 对象(类似于电子表格),它能够完成数据的清洗、预处理以及数据可视化工作等。除此之外,Pandas 能够非常轻松地实现对任何文件格式的读写操作,比如 CSV 文件、json 文件、excel 文件。Pandas 同样不在本教程的介绍范畴之内,我后期也会把他的教程出了。

Pandas 安装非常简单,同样可以使用 pip 包管理器完成安装,如下所示:

pip install pandas

Scikit-Learn

最后介绍机器学习中的重要角色 Scikit-Leran(https://scikit-learn.org/stable/),它是一个基于 Python 语言的机器学习算法库。Scikit-Learn 主要用 Python 语言开发,建立在 NumPy、Scipy 与 Matplotlib 之上,它提供了大量机器学习算法接口(API),因此你可以把它看做一本“百科全书”。由于 Scikit-Learn 的存在极大地提高了机器学习的效率,让开发者无须关注数学层面的公式、计算过程,有更多的更多的时间与精力专注于业务层面,从而解决实际的应用问题。

Scikit-Learn 的基本功能主要被分为六大部分:分类,回归,聚类,数据降维,模型选择和数据预处理。本教程将围绕机器算法的讲解 Scikit-Learn 实际的应用。 Scikit-Learn 安装也非常简单,执行以下命令即可安装:

pip install scikit-learn

安装完成后导入 scikit 即可应用 Scikit-Learn,如下所示:

import sklearn

当你想要调用机器学习算法时也非常简单,Scikit-Learn 已经将算法按模型分类,比如线性回归算法可以从线性模型中调用,如下所示:

from sklearn import linear_model
model = linear_model.LinearRegression()

后续内容会逐一讲解 Scikit-Learn 库中的常用算法示例应用。本节介绍了在学习机器学习算法前,你应该掌握的必备知识。如果你已经掌握了本节介绍的前三个核心知识,并且还具备一定的数学基本知识(初中即可),那么你就拥有了学习机器学习算法的能力。

线性回归算法详解

本节我们会认识第一个机器学习算法 —— 线性回归算法(Linear Regression),它是机器学习算法中较为简单,且容易理解的算法模型,你可以把它看做您的第一个“Hello World”程序。

我们先从语义上了解“线性回归”,如果您是第一次接触“线性回归”这个词,那么可以把它分开来看,其中“性代”表线性模型,而“回归”则表示回归问题,也就是用线性模型来解决回归问题。看完上述解释,您脑子中可能仍有许多“问号”,线性还可以理解,比如我们所熟知的直线、曲线、线性方程等,那么“回归”又代表什么呢?

其实“回归”一词最早由英国科学家弗朗西斯·高尔顿提出。1875 年,高尔顿利用子代豌豆与父代豌来确定豌豆尺寸的遗传规律。实验的大意是说:非常矮小的的父辈倾向于有偏高的子代,非常高大的的父辈倾向于有偏矮的子代。。这表明子代的身高向着父辈身高的平均值回退,后来人们把这种研究方法称为“回归预测”。

线性回归是什么

线性回归主要用来解决回归问题,也就是预测连续值的问题。而能满足这样要求的数学模型被称为“回归模型”。最简单的线性回归模型是我们所熟知的一次函数(即 y=kx+b),这种线性函数描述了两个变量之间的关系,其函数图像是一条连续的直线。

还有另外一种回归模型,也就是非线性模型(nonlinear model),它指因变量与自变量之间的关系不能表示为线性对应关系(即不是一条直线),比如我们所熟知的对数函数、指数函数、二次函数等。

我们知道“线性回归”就是利用线性模型来解决“回归问题”,那到底什么是回归问题呢?你可以把它理解为“预测”真实值的过程。

在《三国演义》中有一个非常精彩的片段“七星坛诸葛祭风”说的是诸葛亮借东风的故事。其实我们抛开历史,单从科学角度出发,诸葛亮借东风就是一个“回归问题”。首先诸葛亮需要掌握大量的天文地理知识,并凭借自己的知识对以往的天气数据进行大量研究,最后才能预测某个时间将有“东风来临”。这种相似的回归问题,在实际生活中我们经常遇到,比如根据历史行情预测股票走势、预测房屋售价以及电影票房预估等等,而要实现这些预测就需要大量的“历史数据”作为支撑点。

在上述讲解过程中,我们反复提起“预测”与“历史数据”,既然是预测,那么就不能说它是 100 % 精确,所以线性回归只是无限地逼近“真实值”,而这个逼近的过程需要大量“历史数据”提供支持。因此线性回归就是利用线性模型来“预测”真实值的过程。

线性回归方程

那么线性回归是如何实现预测的呢?其实主要是通过“线性方程”,或叫“回归方程”来实现。

根据上表中的规律预测出 9 所对应的输出值,并写出线性方程。这个示例是不是非常简单,我们很容易想到 9 对应的是“18”,这是一道小学生都能解出来题,但请您不要小看这么一个简单的示例,它同样说明了很多问题。线性方程如下所示:

Y=2*X

在上述线程方程中2代表权值参数,而求这个参数的过程就是“回归”,一旦有了这个参数,再给定输入,做预测就非常容易了。具体的做法就是用回归系数乘以输入值,这样就得到了预测值。上述示例的预测函数(或称假设函数)可记为:

y = w1x + b

在前面介绍专业术语时,我们提起过“假设函数”,上述函数就是线性模型的“假设函数”。其中 x 表示输入的样本数据,y 表示输出的预测结果,而 w1 指的是线性回归模型的权值参数,b 指的是线性回归模型的“偏差值”。解决线性回归问题的关键就在于求出权值参数、偏差值。

权值,可理解为个不同“特征”对于预测结果的重要性。权值系数越大,那么这一项属性值对最终结果的影响就越大。

在实际应有中,线性回归模型要更复杂一些,比如要分析实际特征值对结果影响程度的大小,从而调整相应特征值的回归系数。下面举一个简单的应用示例:

现在要判断一个西瓜是否是成熟,根据我们的日常经验可从以下几个特征来判断:外表色泽(x)、根蒂(y)、敲声(z)。而以上三个特征所占用的权值参数也不同。如下所示:

y = 0.2x1 + 0.5x2 + 0.3 x3 + 1

上述表达式可以看出每一个特征值对预测结果的影响程度不同,根蒂是否“枯萎”对结果影响最大,而外表色泽是否鲜亮,敲声是否沉闷则占据次要因素。

当然采集数据的时也会存在一些无用数据,比如西瓜的外形、价格,这些特征不会对预测结果产生影响,因此它们权值参数为“0”。从这个例子可以得出“权值参数”是决定预测结果是否准确的关键因素。

实现预测的流程

下面通过一个具体实例讲解线性回归预测的具体流程。

1、数据采集

任何模型的训练都离不开数据,因此收集数据构建数据集是必不可少的环节。比如现在要预测一套房子的售价,那么你必须先要收集周围房屋的售价,这样才能确保你预测的价格不会过高,或过低。如下表所示:

当然上述样本数量远远不足,如果想要更加准确的预测就要收集更多的数据,至少保证 100 条样本。表格中的最后一栏是“房屋售价”,这是“有监督学习”的典型特点,被称为“标签”也就是我们所说的“参考答案”。表格中的面积、数量、距离市中心距离(km),以及是否是学区房,这些都是影响最终预测结果的相关因素,我们称之为“特征”,也叫“属性”。

你可能会认为影响房屋售价的不止这些因素,没错,不过采集数据是一个很繁琐的过程,因此一般情况下,我们只选择与预测结果密切相关的重要“特征”。

2、构建线性回归模型

有了数据以后,下一步要做的就是构建线性回归模型,这也是最为重要的一步,这个过程会涉及到一些数学知识,至于如何构建模型,下一节会做详细介绍。

构建完模型,我们需要对其进行训练,训练的过程就是将表格中的数据以矩阵的形式输入到模型中,模型则通过数学统计方法计算房屋价格与各个特征之间关联关系,也就是“权值参数”。训练完成之后,您就可以对自己的房屋价格进行预测了。首先将数据按照“特征值”依次填好,并输入到模型中,最后模型会输出一个合理的预测结果。示意图如下所示:

从上图可知,回归模型承担着非常重要的作用,关于如何构建回归模型,在下一节将做详细介绍。

线性回归:损失函数和假设函数

通过前面内容的介绍,我相信你对线性回归算法已经有了初步的认识。那我们应该如何在一大堆数据中求解出“线性方程呢”比如前面提及的房价预测问题?这种问题才是符合实际应用的。数据样本会散落在“线性方程”的周围(下图 2 所示), 而我们要做就是让线性方程的“直线”尽可能“拟合”周围的数据点。本节我们将从数学角度解析线性回归模型。

假设函数

通过前面知识的学习,我们知道假设函数是用来预测结果的。前面讲述时为了让大家更容易理解“线性回归”,我们以“直线方程”进行了类比讲解,然而线性方程并不等同于“直线方程”,线性方程描绘的是多维空间内的一条“直线”,并且每一个样本都会以向量数组的形式输入到函数中,因此假设函数也会发生一些许变化,函数表达式如下所示:

乍一看你可能蒙圈了,记住不用紧张。其实它和 Y=wX + b 是类似的,只不过我们这个标量公式换成了向量的形式。如果你已经学习了 《NumPy 教程》,那么这个公司很好理解,Y1仍然代表预测结果, X1表示数据样本, b表示用来调整预测结果的“偏差度量值”,而wT表示权值系数的转置。矩阵相乘法是一个求两个向量点积的过程,也就是按位相乘,然后求和,如下所示:

矩阵 A 的每一行分别与矩阵 B 的每一列相乘,比如 15+25+37 =36 、12+26+36=32、16+27+3*4=32,即可得出结果的第一行数据。

转置操作的目的是为了保证第一个矩阵的列数(column)和第二个矩阵的行数(row)相同,只有这样才能做矩阵乘法运算。

您也可以将假设函数写成关于 x 的函述表达式。

损失函数

我们知道,在线性回归模型中数据样本散落在线性方程的周围,如下图所示:

损失函数就像一个衡量尺,这个函数的返回值越大就表示预测结果与真实值偏差越大。其实计算单个样本的误差值非常简单,只需用预测值减去真实值即可:

单样本误差值 = Y1 - Y

但是上述方法只适用于二维平面的直线方程。在线性方程中,要更加复杂、严谨一些,因此我们采用数学中的“均方误差”公式来计算单样本误差:

但是上述方法只适用于二维平面的直线方程。在线性方程中,要更加复杂、严谨一些,因此我们采用数学中的“均方误差”公式来计算单样本误差:

公式是求“距离”因此要使用平方来消除负数,分母 2 代表样本的数量,这样就求得单样本误差值。当我们知道了单样本误差,那么总样本误差就非常好计算了:

最后,将假设函数带入上述损失函数就会得到一个关于 w 与 b 的损失函数(loss),如下所示:

在机器学习中使用损失函数的目的,是为了使用“优化方法”来求得最小的损失值,这样才能使预测值最逼近真实值。

在上述函数中 n、Y、X1 都是已知的,因此只需找到一组 w 与 b 使得上述函数取得最小值即可,这就转变成了数学上二次函数求极值的问题,而这个求极值的过程也就我们所说的“优化方法”。关于如何求极值会在下一节做详细介绍。

💕Final~

以上就是这篇文章的全部内容了,希望本文《Python机器学习算法入门教程(二)》的内容对大家的学习或者工作具有一定的参考学习价值,bye~

相关文章
|
7天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
23 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
9天前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
20 2
|
11天前
|
机器学习/深度学习 数据采集 搜索推荐
利用Python和机器学习构建电影推荐系统
利用Python和机器学习构建电影推荐系统
26 1
|
11天前
|
机器学习/深度学习 算法 PyTorch
用Python实现简单机器学习模型:以鸢尾花数据集为例
用Python实现简单机器学习模型:以鸢尾花数据集为例
32 1
|
17天前
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
21 3
|
22天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
机器学习基础:使用Python和Scikit-learn入门
28 1
|
16天前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的决策树算法
【10月更文挑战第29天】本文将深入浅出地介绍决策树算法,一种在机器学习中广泛使用的分类和回归方法。我们将从基础概念出发,逐步深入到算法的实际应用,最后通过一个代码示例来直观展示如何利用决策树解决实际问题。无论你是机器学习的初学者还是希望深化理解的开发者,这篇文章都将为你提供有价值的见解和指导。
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
【MM2024】阿里云 PAI 团队图像编辑算法论文入选 MM2024
阿里云人工智能平台 PAI 团队发表的图像编辑算法论文在 MM2024 上正式亮相发表。ACM MM(ACM国际多媒体会议)是国际多媒体领域的顶级会议,旨在为研究人员、工程师和行业专家提供一个交流平台,以展示在多媒体领域的最新研究成果、技术进展和应用案例。其主题涵盖了图像处理、视频分析、音频处理、社交媒体和多媒体系统等广泛领域。此次入选标志着阿里云人工智能平台 PAI 在图像编辑算法方面的研究获得了学术界的充分认可。
【MM2024】阿里云 PAI 团队图像编辑算法论文入选 MM2024
|
28天前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
1月前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
56 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练

热门文章

最新文章