【人工智能】机器学习的入门与提升

目录

1.入门

1.1.从何处开始

1.2.数据集

1.3.数据类型

2.平均中位数模式

2.1.均值、中值和众数

2.2.均值

2.2.1.实例

2.2.2.运行结果

2.3.中值

2.3.1.实例

 2.3.2.运行结果

 2.3.3.实例

2.3.4.运行结果

2.4.众数

2.4.1.实例

2.4.2.运行结果 

2.5.章节总结

3.标准差

3.1.什么是标准差?

3.1.2.实例

3.1.3.运行结果

3.1.4.实例

3.1.5.运行结果

3.2.方差

3.2.1.实例

3.2.2.运行结果

3.3.标准差

3.3.1.实例

3.3.2.运行结果

3.4.符号

3.5.章节总结

4.百分位数

4.1.什么是百分位数?

4.1.1.实例

4.1.2.运行结果

4.1.3.实例

4.1.4.运行结果

5.数据分布

5.1.数据分布(Data Distribution)

5.2.我们如何获得大数据集?

5.2.1实例

5.2.2.运行结果

5.3.直方图

5.3.1.实例

5.3.2.运行结果

5.3.3.直方图解释

5.4.大数据分布

5.4.1.实例

5.4.2.运行结果

6.正态数据分布

6.1.正态数据分布(Normal Data Distribution)

6.1.1.实例

6.1.2.运行结果

6.1.3.直方图解释

7.散点图

7.1.散点图(Scatter Plot)

7.1.1.实例

7.1.2.运行结果

7.1.3.散点图解释

7.2.随机数据分布

7.2.1.实例

7.2.2.运行结果

7.2.3.散点图解释

8. 线性回归

8.1.回归

8.2.线性回归

8.3.工作原理

8.3.1.实例

8.3.2.运行结果

8.3.3.实例

8.3.4.运行结果

8.3.5.例子解释

8.4.R-Squared

8.4.1.实例

8.4.2.运行结果

8.5.预测未来价值

8.5.1.实例

8.5.2.运行结果

8.6.糟糕的拟合度?

8.6.1.实例

8.6.2.运行结果

8.6.3.实例

8.6.4.运行结果

9.多项式回归

9.1.多项式回归(Polynomial Regression)

9.2.工作原理

9.2.1.实例

9.2.2.运行结果

9.2.3.实例

9.2.4.运行结果

9.2.5.例子解释

9.3.R-Squared

9.3.1.实例

9.3.2.运行结果

9.4.预测未来值

9.4.1.实例

9.4.2.运行结果

9.5.糟糕的拟合度?

9.5.1.实例

9.5.2.运行结果

9.5.3.实例

9.5.4.运行结果

10.多元回归

10.1.多元回归(Multiple Regression)

10.2.工作原理

10.2.1.实例

10.2.2.运行结果

10.3.系数

10.3.1.实例

10.3.2.运行结果

10.3.3.结果解释

10.3.4.实例

10.3.5.运行结果

11.缩放

11.1.实例

11.2.运行结果

11.2.预测 CO2 值

11.3.实例

11.4.运行结果

12.训练/测试

12.1.评估模型

12.2.什么是训练/测试

12.3.从数据集开始

12.3.1.实例

12.3.2.运行结果

12.4.拆分训练/测试

12.5.显示训练集

12.5.1.实例

12.5.2.运行结果

12.6.显示测试集

12.6.1.实例

12.6.2.运行结果

12.7.拟合数据集

12.7.1.实例

12.7.2.运行结果

12.8.R2

12.8.1.实例

12.8.9.运行结果

12.9.引入测试集

12.9.1.实例

12.9.2.运行结果

12.10.预测值

12.10.1.实例

12.10.2.运行结果

13.决策树

13.1.决策树(Decision Tree)

13.2.工作原理

13.2.1.实例

13.2.2.运行结果

13.2.3.实例

13.2.4.运行结果

12.2.5.实例

12.2.6.运行结果

12.2.7.实例

12.2.8.运行结果

13.1.结果解释

13.1.1.Rank

13.1.2.Gini

13.1.3.True - 5 名喜剧演员在这里结束

13.1.4.False - 8 位戏剧演员继续

13.1.5.Nationality(国籍)

13.1.6.True - 4 名戏剧演员继续

13.1.7.Age(年龄)

13.1.8.False - 4 名喜剧演员到这里结束

13.1.9.True - 2 名喜剧演员在这里结束

13.1.10.False - 2 名戏剧演员继续

13.1.11.Experience(经验)

13.1.12.True - 1 名喜剧演员在这里结束

13.1.13.False - 1 名喜剧演员到这里为止

13.2.预测值

13.2.1.实例

13.2.2.运行结果

13.2.3.实例

13.2.4.运行结果

13.3.不同的结果

14.参考


1.入门

        机器学习使计算机能够从研究数据和统计信息中学习。机器学习是迈向人工智能(AI)方向的其中一步。机器学习是一种程序,可以分析数据并学习预测结果。

1.1.从何处开始

        在本教程中,我们将回到数学并研究统计学,以及如何根据数据集计算重要数值。我们还将学习如何使用各种 Python 模块来获得所需的答案。并且,我们将学习如何根据所学知识编写能够预测结果的函数。

1.2.数据集

        在计算机中,数据集指的是任何数据集合。它可以是从数组到完整数据库的任何内容。

一个数组的例子:

[99,86,87,88,111,86,103,87,94,78,77,85,86]

一个数据库的例子:

Carname Color Age Speed AutoPass
BMW red 5 99 Y
Volvo black 7 86 Y
VW gray 8 87 N
VW white 7 88 Y
Ford white 2 111 Y
VW white 17 86 Y
Tesla red 2 103 Y
BMW black 9 87 Y
Volvo gray 4 94 N
Ford white 11 78 N
Toyota gray 12 77 N
VW white 9 85 N
Toyota blue 6 86 Y

         通过查看数组,我们可以猜测平均值可能约为 80 或 90,并且我们还可以确定最大值和最小值,但是我们还能做什么?

        通过查看数据库,我们可以看到最受欢迎的颜色是白色,最老的车龄是 17 年,但是如果仅通过查看其他值就可以预测汽车是否具有 AutoPass,该怎么办?

        这就是机器学习的目的!分析数据并预测结果!

        在机器学习中,通常使用非常大的数据集。在本教程中,我们会尝试让您尽可能容易地理解机器学习的不同概念,并将使用一些易于理解的小型数据集。

1.3.数据类型

        如需分析数据,了解我们要处理的数据类型非常重要。

我们可以将数据类型分为三种主要类别:

  • 数值(Numerical)
  • 分类(Categorical)
  • 序数(Ordinal)

数值数据是数字,可以分为两种数值类别:

  • 离散数据(Discrete Data):限制为整数的数字。例如:经过的汽车数量。
  • 连续数据(Continuous Data):具有无限值的数字。例如:一件商品的价格或一件商品的大小。
  • 分类数据 是无法相互度量的值。例如:颜色值或任何 yes/no 值。
  • 序数数据 类似于分类数据,但可以相互度量。示例:A 优于 B 的学校成绩,依此类推。

通过了解数据源的数据类型,您就能够知道在分析数据时使用何种技术。

在下一节中,您将学习有关统计和分析数据的更多知识。

2.平均中位数模式

2.1.均值、中值和众数

从一组数字中我们可以学到什么?

在机器学习(和数学)中,通常存在三中我们感兴趣的值:

  • 均值(Mean) - 平均值
  • 中值(Median) - 中点值,又称中位数
  • 众数(Mode) - 最常见的值

例如:我们已经登记了 13 辆车的速度:

speed = [99,86,87,88,111,86,103,87,94,78,77,85,86]

什么是平均,中间或最常见的速度值?

2.2.均值

均值就是平均值。

要计算平均值,请找到所有值的总和,然后将总和除以值的数量:

(99+86+87+88+111+86+103+87+94+78+77+85+86) / 13 = 89.77

NumPy 模块拥有用于此目的的方法:

2.2.1.实例

请使用 NumPy  mean() 方法确定平均速度:

import numpy

speed = [99,86,87,88,111,86,103,87,94,78,77,85,86]

x = numpy.mean(speed)

print(x)

2.2.2.运行结果

2.3.中值

中值是对所有值进行排序后的中间值:

77, 78, 85, 86, 86, 86, 87, 87, 88, 94, 99, 103, 111

在找到中位数之前,对数字进行排序很重要。

NumPy 模块拥有用于此目的的方法:

2.3.1.实例

请使用 NumPy median() 方法找到中间值:

import numpy

speed = [99,86,87,88,111,86,103,87,94,78,77,85,86]

x = numpy.median(speed)

print(x)

 2.3.2.运行结果

如果中间有两个数字,则将这些数字之和除以 2。

77, 78, 85, 86, 86, 86, 87, 87, 94, 98, 99, 103 

(86 + 87) / 2 = 86.5

 2.3.3.实例

使用 NumPy 模块:

import numpy

speed = [99,86,87,88,86,103,87,94,78,77,85,86]

x = numpy.median(speed)

print(x)

2.3.4.运行结果

2.4.众数

众值是出现次数最多的值:

99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86 = 86

SciPy 模块拥有用于此目的的方法:

2.4.1.实例

请使用 SciPy mode() 方法查找出现次数最多的数字:

from scipy import stats

speed = [99,86,87,88,111,86,103,87,94,78,77,85,86]

x = stats.mode(speed)

print(x)

2.4.2.运行结果 

2.5.章节总结

        均值、中值和众数是机器学习中经常使用的技术,因此了解它们背后的概念很重要。

3.标准差

3.1.什么是标准差?

        标准差(Standard Deviation,又常称均方差)是一个数字,描述值的离散程度。低标准偏差表示大多数数字接近均值(平均值)。高标准偏差表示这些值分布在更宽的范围内。

例如:这次我们已经登记了 7 辆车的速度:

speed = [86,87,88,86,87,85,86]

标准差是:

0.9

意味着大多数值在平均值的 0.9 范围内,即 86.4。

让我们对范围更广的数字集合进行处理:

speed = [32,111,138,28,59,77,97]

标准差是:

37.85

这意味着大多数值都在平均值(平均值为 77.4)的 37.85 范围内。

如您所见,较高的标准偏差表示这些值分布在较宽的范围内。

NumPy 模块有一种计算标准差的方法:

3.1.2.实例

请使用 NumPy std() 方法查找标准差:

import numpy

speed = [86,87,88,86,87,85,86]

x = numpy.std(speed)

print(x)

3.1.3.运行结果

3.1.4.实例

import numpy

speed = [32,111,138,28,59,77,97]

x = numpy.std(speed)

print(x)

3.1.5.运行结果

3.2.方差

        方差是另一种数字,指示值的分散程度。实际上,如果采用方差的平方根,则会得到标准差!或反之,如果将标准偏差乘以自身,则会得到方差!

如需计算方差,您必须执行以下操作:

1. 求均值:

(32+111+138+28+59+77+97) / 7 = 77.4

2. 对于每个值:找到与平均值的差:

32 - 77.4 = -45.4

111 - 77.4 = 33.6

138 - 77.4 = 60.6

28 - 77.4 = -49.4

59 - 77.4 = -18.4

77 - 77.4 = - 0.4

97 - 77.4 = 19.6

3. 对于每个差异:找到平方值:

(-45.4)2 = 2061.16

(33.6)2 = 1128.96

(60.6)2 = 3672.36

(-49.4)2 = 2440.36

(-18.4)2 = 338.56

(- 0.4)2 = 0.16

(19.6)2 = 384.16

4. 方差是这些平方差的平均值:

(2061.16+1128.96+3672.36+2440.36+338.56+0.16+384.16) / 7 = 1432.2

幸运的是,NumPy 有一种计算方差的方法:

3.2.1.实例

使用 NumPy var() 方法确定方差:

import numpy

speed = [32,111,138,28,59,77,97]

x = numpy.var(speed)

print(x)

3.2.2.运行结果

3.3.标准差

如我们所知,计算标准差的公式是方差的平方根:

√ 1432.25 = 37.85

或者,如上例所示,使用 NumPy 计算标准差:

3.3.1.实例

请使用 NumPy std() 方法查找标准差:

import numpy

speed = [32,111,138,28,59,77,97]

x = numpy.std(speed)

print(x)

3.3.2.运行结果

3.4.符号

3.5.章节总结

        标准差和方差是机器学习中经常使用的术语,因此了解如何获取它们以及它们背后的概念非常重要。

4.百分位数

4.1.什么是百分位数?

        统计学中使用百分位数(Percentiles)为您提供一个数字,该数字描述了给定百分比值小于的值。

        例如:假设我们有一个数组,包含住在一条街上的人的年龄。

ages = [5,31,43,48,50,41,7,11,15,39,80,82,32,2,8,6,25,36,27,61,31]

什么是 75 百分位数?答案是 43,这意味着 75% 的人是 43 岁或以下。

NumPy 模块有一种用于找到指定百分位数的方法:

4.1.1.实例

使用 NumPy percentile() 方法查找百分位数:

import numpy

ages = [5,31,43,48,50,41,7,11,15,39,80,82,32,2,8,6,25,36,27,61,31]

x = numpy.percentile(ages, 75)

print(x)

4.1.2.运行结果

4.1.3.实例

90% 的人口年龄是多少岁?

import numpy

ages = [5,31,43,48,50,41,7,11,15,39,80,82,32,2,8,6,25,36,27,61,31]

x = numpy.percentile(ages, 90)

print(x)

4.1.4.运行结果

5.数据分布

5.1.数据分布(Data Distribution)

        在本教程稍早之前,我们仅在例子中使用了非常少量的数据,目的是为了了解不同的概念。

在现实世界中,数据集要大得多,但是至少在项目的早期阶段,很难收集现实世界的数据。

5.2.我们如何获得大数据集?

        为了创建用于测试的大数据集,我们使用 Python 模块 NumPy,该模块附带了许多创建任意大小的随机数据集的方法。

5.2.1实例

        创建一个包含 250 个介于 0 到 5 之间的随机浮点数的数组:

import numpy

x = numpy.random.uniform(0.0, 5.0, 250)

print(x)

5.2.2.运行结果

5.3.直方图

        为了可视化数据集,我们可以对收集的数据绘制直方图。

我们将使用 Python 模块 Matplotlib 绘制直方图:

5.3.1.实例

绘制直方图:

import numpy
import matplotlib.pyplot as plt

x = numpy.random.uniform(0.0, 5.0, 250)

plt.hist(x, 5)
plt.show()

5.3.2.运行结果

5.3.3.直方图解释

我们使用上例中的数组绘制 5 条柱状图。

第一栏代表数组中有多少 0 到 1 之间的值。

第二栏代表有多少 1 到 2 之间的数值。

等等。

我们得到的结果是:

52 values are between 0 and 1

48 values are between 1 and 2

49 values are between 2 and 3

51 values are between 3 and 4

50 values are between 4 and 5

注释:数组值是随机数,不会在您的计算机上显示完全相同的结果。

5.4.大数据分布

        包含 250 个值的数组被认为不是很大,但是现在您知道了如何创建一个随机值的集,并且通过更改参数,可以创建所需大小的数据集。

5.4.1.实例

创建一个具有 100000 个随机数的数组,并使用具有 100 栏的直方图显示它们:

import numpy
import matplotlib.pyplot as plt

x = numpy.random.uniform(0.0, 5.0, 100000)

plt.hist(x, 100)
plt.show()

5.4.2.运行结果

6.正态数据分布

6.1.正态数据分布(Normal Data Distribution)

在上一章中,我们学习了如何创建给定大小且在两个给定值之间的完全随机数组。

在本章中,我们将学习如何创建一个将值集中在给定值周围的数组。

在概率论中,在数学家卡尔·弗里德里希·高斯(Carl Friedrich Gauss)提出了这种数据分布的公式之后,这种数据分布被称为正态数据分布或高斯数据分布。

6.1.1.实例

典型的正态数据分布:

import numpy
import matplotlib.pyplot as plt

x = numpy.random.normal(5.0, 1.0, 100000)

plt.hist(x, 100)
plt.show()

6.1.2.运行结果

注释:由于正态分布图具有钟形的特征形状,因此也称为钟形曲线。

6.1.3.直方图解释

我们使用 numpy.random.normal() 方法创建的数组(具有 100000 个值)绘制具有 100 栏的直方图。

我们指定平均值为 5.0,标准差为 1.0。

这意味着这些值应集中在 5.0 左右,并且很少与平均值偏离 1.0。

从直方图中可以看到,大多数值都在 4.0 到 6.0 之间,最高值大约是 5.0。

7.散点图

7.1.散点图(Scatter Plot)

散点图是数据集中的每个值都由点表示的图。

        Matplotlib 模块有一种绘制散点图的方法,它需要两个长度相同的数组,一个数组用于 x 轴的值,另一个数组用于 y 轴的值:

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]

y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

x 数组代表每辆汽车的年龄。

y 数组表示每个汽车的速度。

7.1.1.实例

请使用 scatter() 方法绘制散点图:

import matplotlib.pyplot as plt

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

plt.scatter(x, y)
plt.show()

7.1.2.运行结果

7.1.3.散点图解释

x 轴表示车龄,y 轴表示速度。

从图中可以看到,两辆最快的汽车都使用了 2 年,最慢的汽车使用了 12 年。

注释:汽车似乎越新,驾驶速度就越快,但这可能是一个巧合,毕竟我们只注册了 13 辆汽车。

7.2.随机数据分布

在机器学习中,数据集可以包含成千上万甚至数百万个值。

测试算法时,您可能没有真实的数据,您可能必须使用随机生成的值。

正如我们在上一章中学到的那样,NumPy 模块可以帮助我们!

让我们创建两个数组,它们都填充有来自正态数据分布的 1000 个随机数。

第一个数组的平均值设置为 5.0,标准差为 1.0。

第二个数组的平均值设置为 10.0,标准差为 2.0:

7.2.1.实例

有 1000 个点的散点图:

import numpy
import matplotlib.pyplot as plt

x = numpy.random.normal(5.0, 1.0, 1000)
y = numpy.random.normal(10.0, 2.0, 1000)

plt.scatter(x, y)
plt.show()

7.2.2.运行结果

7.2.3.散点图解释

我们可以看到,点集中在 x 轴上的值 5 和 y 轴上的 10 周围。

我们还可以看到,在 y 轴上扩散得比在 x 轴上更大。

8. 线性回归

8.1.回归

        当您尝试找到变量之间的关系时,会用到术语“回归”(regression)。在机器学习和统计建模中,这种关系用于预测未来事件的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

smartvxworks

创造不易,感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值