机器学习系列01-机器学习相关基础概念

Posted by Naah on Friday, Oct 04,2019 20:15:29

机器学习给人的感觉就是非常的高大上,因为机器学习的一些名词总是让人云里雾里,今天我们主要来通俗易懂的讲一下机器学习的概念。

1 数据

数据大家应该都明白,举个栗子!

我们在以往写程序的时候,经常用到数据库,那么数据库中存的一行数据,其实又叫做一条数据

而每条数据都包含很多属性。那么属性又跟机器学习有什么关系呢?

2 特征

每条数据的属性,在机器学习中就叫做特征,特征又分为离散型连续型

2.1 离散型

如果你高中数学有认真听,应该听说过这么两个词连续不连续,而在大学有一们课叫离散数学,下面我们简单举几个栗子来说明离散型特征!

首先我们定义了一个Bird类,类中有几个属性,分别是体重长度脚蹼颜色种类

其实这几个属性又叫做特征

  1. 颜色属于枚举型特征
  2. 体重和长度属于数值型特征
  3. 脚蹼属于布尔型特征,又叫做二值型特征
  4. 种类被我们称为目标变量

public class Bird{
    private Double weight;
    private Double length;
    private Boolean fins;
    private ColorEnum color;
    private TypeEnum type;
}

下面就是我们的离散型数据

体重 长度 脚蹼 颜色 种类
1000.1 125.0 0 棕色 红尾鸟
3000.7 200.0 0 灰色 鹭鹰
3300.0 220.3 0 灰色 鹭鹰
4100.0 136.0 1 黑色 普通潜鸟
3.0 11.0 0 绿色 瑰丽蜂鸟

2.2 连续型

连续型数据一般都是区间型的数据,比如:

今天杭州市的天气是19~28摄氏度

水结冰的温度是-4~负无穷摄氏度

3 维度

这个词真的是故弄玄虚的 本质上就是特征的个数

我们用上面的Bird进行说明,这个类包含4个特征,那么它的数据的维度就是4

比如我们将数据离散后变成下面这个矩阵,那么矩阵中每条向量维度就是4

[
[ 1000.1 , 125.0 , 0 , 0 ],
[ 3000.7 , 200.0 , 0 , 1 ],
[ 3300.0 , 220.3 , 0 , 2 ],
[ 4100.0 , 136.0 , 1 , 3 ],
[ 3.0    , 11.0  , 0 , 4 ],
]

4 目标变量

目标变量就是机器学习算法预测的结果,简单的理解,就是y=x+1中的y

  1. 分类算法中目标变量通常是标称型数据
  2. 回归算法中目标变量通常是连续型数据

一般在我们的训练数据集中,目标变量是必须要确定的值,不然的话,你怎么确定特征目标变量的关系呢

5 训练

训练,全称叫做算法训练

为算法输入大量的已分类(又叫做标注数据)的数据,来产生一个算法模型

这里的数据叫做训练集,训练集是用于训练机器学习算法的数据样本集合

下面我们举例说明:

假如我们对一个训练算法,输入数据,然后算法产出了f(x)=x/2
那么这个f(x)其实就是我们的算法模型

我们可以想象一下公式推导,我们通过一些数据和一个公式来推导出另外一个公式,这个过程其实就是算法训练

D:数据    F(x):训练算法   G(x):模型算法

F(D) => G(x)

6 数据集

6.1 训练数据集(训练样本集)

顾名思义,训练数据集就是用来训练算法模型的数据集,也就是训练算法的输入数据

6.2 测试数据集(测试样本集)

测试样本集就是在我们训练完算法模型后,对算法模型进行测试所要使用的输入数据

这里有两点要注意:

  1. 测试数据集要包含目标变量,用以判断算法模型实际精确度
  2. 测试数据集用以训练模型,如果参与训练过程,那将导致算法模型的正确率存在偏差

7 归一化

归一化全称叫做数值归一化

为什么要对数据进行归一化呢?,让我们看看下方的数据。

飞行里程数据和其他两项数据的差异实在太大了,在我们进行欧式距离等公式计算的时候,因为差值太大了,所以会造成数据偏重,所以我们要消除这个偏重,将所有特征都转化到0 ~ 1的区间之内

飞行里程 吃冰淇淋数 网游戏时间
40920 8.326976 0.953952
14488 7.153469 1.673904
26052 1.441871 0.805124
min:0.0,max:91273.0 min:0.0,max:20.919349 min:0.001156,max:1.695517

下面提供一个较为简单的归一化公式:

new_value=(old_value-min)/(max-min)

old_value:原来的值
min:在数据集中该特征最小的值
max:在数据集中该特征最大的值

转化后的数据:

飞行里程 吃冰淇淋数 网游戏时间
0.44832535 0.39805139 0.56233353
0.15873259 0.34195467 0.98724416
0.28542943 0.06892523 0.47449629

8 监督学习

监督学习其实就是指我们对算法所输入的数据是经过标注的。

监督学习的算法必须要知道要预测什么,也就是必须要知道特征目标变量的关系

8.1 分类

分类:其实是把数据分配到已有的几个类别

机器学习的主要任务就是分类

下面我们举例说明:

我们可以通过数据+算法训练出一个分类器(又叫做模型),然后通过分类器来对新的数据进行分类

香蕉  橙子  刀叉  芬达
 |     |    |    |
水果  水果  餐具  饮料

8.2 回归

回归主要应用于预测一些数值型的数据,比如数据拟合曲线:通过给定数据点的最优拟合曲线

8.3 常用的监督学习算法

分类 回归
k-近邻算法 线性回归
朴素贝叶斯算法 局部加权线性回归
支持向量机 Ridge回归
决策树 Lasso最小回归系数估计

9 无监督学习

在无监督学习中,数据是只有特征,没有目标变量的,通过计算来猜出几个结果来

无监督学习的好处是可以减少数据特征的维度,以便我们用二维和三维的图像进行展示数据

9.1 聚类

什么叫聚类呢?顾名思义。

聚类:其实就是把没有分类的一组数据中相似的聚集成几个堆,这个堆也叫

专业的讲,就是将数据集合分成由类似的对象组成的多个类的过程

这里的苹果,橘子,筷子,勺子,可乐,雪碧都是没有分类的数据,我们通过他们的一些特征计算出水果餐具饮料这三个类

苹果 橘子 勺子  筷子 可乐 雪碧
 \   /    \ /    \   /
  水果     餐具    饮料

9.2 密度估计

寻找描述数据统计值的过程

9.3 常用的无监督学习算法

聚类 密度估计
k-均值 最大期望算法
DBSCAN Parzen窗设计

10 在使用机器学习时的问题

10.1 如何选择合适的机器学习算法

首先我们要明确,我们选择算法只能在一定程度上缩小算法的选择范围,一般并不存在最好的算法和给出最好结果的算法

在我们选择算法的时候,首先要考虑两个问题

  1. 我们的目的是什么,想要算法完成什么任务
  2. 我们需要分析的数据是什么,我们得到的数据又是什么

如果你想要预测目标变量,那么你可以选择监督学习。 如果你的目标变量的数据类型是离散型,那么你可以选择分类算法,如果是连续型,可以选择回归算法

如果你不想预测目标变量,可以选择无监督学习。 如果需要将数据划分成组,可以选择聚类算法,如果要估计每个分组的相似程度,可以选择密度估计算法

10.2 了解数据

  1. 特征值是离散型还是连续型
  2. 特征值中是否存在缺失的值,什么原因导致的缺失值,
  3. 数据中是否存在异常值
  4. 某个特征的频率如何,是否相当稀疏

11 机器学习开发的步骤

  1. 收集数据:爬虫爬数据,硬件设备获取数据,下载公开数据等
  2. 准备输入数据:确保数据的格式,是否格式不统一,是否需要离散化等
  3. 分析数据:查看数据中是否有空值,是否存在其他异常值,可以通过图表展示来观察数据
  4. 训练算法:选择合适的算法,并对我们的训练数据进行训练,如果是无监督学习则不需要训练
  5. 测试算法:对我们的模型或算法进行测试,来看看是否满意算法的输出结果
  6. 使用算法:将模型或算法进行工程化,用以执行实际的任务

12 推荐的语言和库

机器学习领域,推荐python,因为它有一些强大库,并且语言简单,可以让你更加专注机器学习的开发

常用的库

  1. numpy: 实现了常用的向量和矩阵的操作,并且增加了可读性,并且底层提高了计算性能
  2. matplotlib: 常用的绘图工具,可以绘制2d、3d 的图形

13 numpy常用操作

13.1 构建随机数据

构建一个4*4的数组

import numpy
numpy.random.ramd(4,4)

13.2 数组转化矩阵

将4*4的随机数组转化为矩阵

import numpy
random_array=numpy.random.ramd(4,4)
random_matrix=numpy.mat(random_array)

13.3 矩阵求逆

import numpy
random_matrix=numpy.mat(numpy.random.ramd(4,4))
random_matrix.I

13.4 矩阵相乘

import numpy
random_matrix=numpy.mat(numpy.random.ramd(4,4))
result=random_matrix*random_matrix.I

13.5 创建矩阵

import numpy
matrix=numpy.eye(4)