大数据实验室第8次打卡
一、机器学习入门
数据集
在计算机中,数据集指的是任何数据集合。它可以是从数组到完整数据库的任何内容。
数据类型
1.数值:离散数据和连续数据。离散数据限制为整数的数字。连续数据是具有无限制的数字。
2.分类:是无法互相度量的值,例如颜色或也任何yes/no值。
3.序数:类似于分类数据,但可以相互度量。如A优于B的学校成绩。
二、平均中位数模式
在机器学习中,通常存在三种感兴趣的值:
1.均值(Mean)–平均值
2.中值(Median)–中值点,又称中位数
3.众数(Mode)–最常见的值
实例
使用 NumPy mean() 方法确定平均速度:
使用 NumPy median() 方法找到中间值:
如果中间有两个数字,则将这些数字之和除以 2。
使用 SciPy mode() 方法查找出现次数最多的数字:
三、标准差
标准差(Standard Deviation,又常称均方差)是一个数字,描述值的离散程度。
低标准偏差表示大多数数字接近均值(平均值)。
高标准偏差表示这些值分布在更宽的范围内。
例如:这次我们已经登记了 7 辆车的速度(意味着大多数值在平均值的 0.9 范围内):
方差
方差是另一种数字,指示值的分散程度。
实际上,如果采用方差的平方根,则会得到标准差!
或反之,如果将标准偏差乘以自身,则会得到方差!
如需计算方差,您必须执行以下操作:
-
求均值:(32+111+138+28+59+77+97) / 7 = 77.4
-
对于每个值:找到与平均值的差:
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 -
对于每个差异:找到平方值:
(-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 -
方差是这些平方差的平均值:
(2061.16+1128.96+3672.36+2440.36+338.56+0.16+384.16) / 7 = 1432.2
使用 NumPy var() 方法确定方差:
标准差
如我们所知,计算标准差的公式是方差的平方根:
√1432.25 = 37.85
符号
标准差通常用 Sigma 符号表示:σ
方差通常由 Sigma Square 符号 σ2 表示
四、百分位数
百分位数: 统计学中使用百分位数(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 percentile() 方法查找百分位数:
实例
90% 的人口年龄是多少岁?
五、数据分布(Data Distribution)
如何获得大数据集?
在现实世界中,数据集要大得多,但是至少在项目的早期阶段,很难收集现实世界的数据。为了创建用于测试的大数据集,我们使用 Python 模块 NumPy,该模块附带了许多创建任意大小的随机数据集的方法。
实例
创建一个包含 250 个介于 0 到 5 之间的随机浮点数的数组:
直方图
为了可视化数据集,我们可以对收集的数据绘制直方图。
我们将使用 Python 模块 Matplotlib 绘制直方图:
实例
绘制直方图:
直方图解释
我们使用上例中的数组绘制 5 条柱状图。
第一栏代表数组中有多少 0 到 1 之间的值。
第二栏代表有多少 1 到 2 之间的数值。
大数据分布
包含 250 个值的数组被认为不是很大,但是现在您知道了如何创建一个随机值的集,并且通过更改参数,可以创建所需大小的数据集。
实例
创建一个具有 100000 个随机数的数组,并使用具有 100 栏的直方图显示它们:
六、正态数据分布
如何创建一个将值集中在给定值周围的数组?
在概率论中,在数学家卡尔·弗里德里希·高斯(Carl Friedrich Gauss)提出了这种数据分布的公式之后,这种数据分布被称为正态数据分布或高斯数据分布。
实例
典型的正态数据分布:
直方图解释
使用 numpy.random.normal() 方法创建的数组(具有 100000 个值)绘制具有 100 栏的直方图。
我们指定平均值为 5.0,标准差为 1.0。
这意味着这些值应集中在 5.0 左右,并且很少与平均值偏离 1.0。
从直方图中可以看到,大多数值都在 4.0 到 6.0 之间,最高值大约是 5.0。
七、散点图
散点图(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 数组表示每个汽车的速度。
使用 scatter() 方法绘制散点图:
散点图解释
x 轴表示车龄,y 轴表示速度。
从图中可以看到,两辆最快的汽车都使用了 2 年,最慢的汽车使用了 12 年。
随机数据分布
在机器学习中,数据集可以包含成千上万甚至数百万个值。
测试算法时,可能没有真实的数据,可能必须使用随机生成的值。
让我们创建两个数组,它们都填充有来自正态数据分布的 1000 个随机数。
第一个数组的平均值设置为 5.0,标准差为 1.0。
第二个数组的平均值设置为 10.0,标准差为 2.0:
实例
有 1000 个点的散点图:
散点图解释
可以看到,点集中在 x 轴上的值 5 和 y 轴上的 10 周围。
还可以看到,在 y 轴上扩散得比在 x 轴上更大。
八、线性回归
回归
当尝试找到变量之间的关系时,会用到术语“回归”(regression)。
在机器学习和统计建模中,这种关系用于预测未来事件的结果。
线性回归
线性回归使用数据点之间的关系在所有数据点之间画一条直线。
这条线可以用来预测未来的值。
工作原理
Python 提供了一些方法来查找数据点之间的关系并绘制线性回归线。我们将向您展示如何使用这些方法而不是通过数学公式。
在下面的示例中,x 轴表示车龄,y 轴表示速度。我们已经记录了 13 辆汽车通过收费站时的车龄和速度。让我们看看我们收集的数据是否可以用于线性回归:
实例
首先绘制散点图:
实例
导入 scipy 并绘制线性回归线:
例子解释
导入所需模块:
import matplotlib.pyplot as plt
from scipy import stats
创建表示 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]
执行一个方法,该方法返回线性回归的一些重要键值:
slope, intercept, r, p, std_err = stats.linregress(x, y)
创建一个使用 slope 和 intercept 值的函数返回新值。这个新值表示相应的 x 值将在 y 轴上放置的位置:
def myfunc(x):
return slope * x + intercept
通过函数运行 x 数组的每个值。这将产生一个新的数组,其中的 y 轴具有新值:
mymodel = list(map(myfunc, x))
绘制原始散点图:
plt.scatter(x, y)
绘制线性回归线:
plt.plot(x, mymodel)
显示图:
plt.show()
R-Squared
重要的是要知道 x 轴的值和 y 轴的值之间的关系有多好,如果没有关系,则线性回归不能用于预测任何东西。
该关系用一个称为 r 平方(r-squared)的值来度量。
r 平方值的范围是 0 到 1,其中 0 表示不相关,而 1 表示 100% 相关。
Python 和 Scipy 模块将为您计算该值,您所要做的就是将 x 和 y 值提供给它:
实例
我的数据在线性回归中的拟合度如何?
注释:结果 -0.76 表明存在某种关系,但不是完美的关系,但它表明我们可以在将来的预测中使用线性回归。
实例
预测一辆有 10年车龄的汽车的速度:
糟糕的拟合度?
创建一个实例,其中的线性回归并不是预测未来值的最佳方法。
实例
x 和 y 轴的这些值将导致线性回归的拟合度非常差:
实例
得到了一个非常低的 r-squared 值。
结果:0.013 表示关系很差,并告诉我们该数据集不适合线性回归。
九、多项式回归
多项式回归(Polynomial Regression)
如果数据点显然不适合线性回归(穿过数据点之间的直线),那么多项式回归可能是理想的选择。
像线性回归一样,多项式回归使用变量 x 和 y 之间的关系来找到绘制数据点线的最佳方法。
工作原理
Python 有一些方法可以找到数据点之间的关系并画出多项式回归线。我们将向您展示如何使用这些方法而不是通过数学公式。
在下面的例子中,注册了 18 辆经过特定收费站的汽车。
已经记录了汽车的速度和通过时间(小时)。
x 轴表示一天中的小时,y 轴表示速度:
实例
首先绘制散点图:
实例
导入 numpy 和 matplotlib,然后画出多项式回归线:
例子解释
导入所需模块:
import numpy
import matplotlib.pyplot as plt
创建表示 x 和 y 轴值的数组:
x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
NumPy 有一种方法可以让我们建立多项式模型:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
然后指定行的显示方式,我们从位置 1 开始,到位置 22 结束:
myline = numpy.linspace(1, 22, 100)
绘制原始散点图:
plt.scatter(x, y)
画出多项式回归线:
plt.plot(myline, mymodel(myline))
显示图表:
plt.show()
实例
我的数据在多项式回归中的拟合度如何?
注释:结果 0.94 表明存在很好的关系,可以在将来的预测中使用多项式回归。
实例
预测下午 17 点过车的速度:
糟糕的拟合度?
创建一个实例,其中多项式回归不是预测未来值的最佳方法。
实例
x 和 y 轴的这些值会导致多项式回归的拟合度非常差:
实例
应该得到一个非常低的 r-squared 值。
结果:0.00995 表示关系很差,并告诉我们该数据集不适合多项式回归。
如果有喜欢好看的各种类型的壁纸、头像、朋友圈背景图、QQ名片背景图的朋友可以关注我个人公众号呀
每天分享超多超好看的各种风格类型 头像!壁纸!朋友圈背景图!嘿嘿!
关注我的公众号:壁纸头像爱好家