机器学习给人的感觉就是非常的高大上,因为机器学习的一些名词总是让人云里雾里,今天我们主要来通俗易懂的讲一下机器学习的概念。
1 数据
数据大家应该都明白,举个栗子!我们在以往写程序的时候,经常用到数据库
,那么数据库中存的一行数据
,其实又叫做一条数据
而每条数据都包含很多属性
。那么属性又跟机器学习有什么关系呢?
2 特征
每条数据的属性
,在机器学习中就叫做特征
,特征又分为离散型
、连续型
2.1 离散型
如果你高中数学有认真听,应该听说过这么两个词连续
和不连续
,而在大学有一们课叫离散数学
,下面我们简单举几个栗子来说明离散型
特征!首先我们定义了一个Bird
类,类中有几个属性,分别是体重
、长度
、脚蹼
、颜色
、种类
其实这几个属性
又叫做特征
颜色属于
枚举型特征
体重和长度属于
数值型特征
脚蹼属于
布尔型特征
,又叫做二值型特征
种类被我们称为
目标变量
public class Bird{ private Double weight; private Double length; private Boolean fins; private ColorEnum color; private TypeEnum type;}下面就是我们的
离散型
数据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
- 在
分类算法
中目标变量通常是标称型数据
- 在
回归算法
中目标变量通常是连续型数据
一般在我们的训练数据集
中,目标变量是必须要确定的值,不然的话,你怎么确定特征
和目标变量
的关系呢
5 训练
训练,全称叫做算法训练
为算法输入大量的已分类(又叫做标注数据)的数据,来产生一个算法模型
这里的数据叫做训练集
,训练集是用于训练机器学习算法的数据样本集合下面我们举例说明:
假如我们对一个训练算法,输入数据,然后算法产出了f(x)=x/2那么这个f(x)其实就是我们的算法模型 我们可以想象一下公式推导,我们通过一些数据和一个公式来推导出另外一个公式,这个过程其实就是算法训练 D:数据 F(x):训练算法 G(x):模型算法 F(D) => G(x)
6 数据集
6.1 训练数据集(训练样本集)
顾名思义,训练数据集
就是用来训练算法模型的数据集,也就是训练算法的输入数据
6.2 测试数据集(测试样本集)
测试样本集
就是在我们训练完算法模型后,对算法模型
进行测试所要使用的输入数据这里有两点要注意:
测试数据集要包含
目标变量
,用以判断算法模型
的实际精确度
测试数据集用以训练模型,如果参与训练过程,那将导致算法模型的正确率存在偏差
7 归一化
归一化全称叫做数值归一化
为什么要对数据进行归一化
呢?,让我们看看下方的数据。飞行里程数据
和其他两项数据的差异实在太大了,在我们进行欧式距离
等公式计算的时候,因为差值太大了,所以会造成数据偏重,所以我们要消除这个偏重,将所有特征都转化到0 ~ 1
的区间之内。
下面提供一个较为简单的归一化公式:
new_value=(old_value-min)/(max-min) old_value:原来的值min:在数据集中该特征最小的值max:在数据集中该特征最大的值转化后的数据:
8 监督学习
监督学习其实就是指我们对算法所输入的数据是经过标注
的。监督学习的算法必须要知道要预测什么,也就是必须要知道特征
和目标变量
的关系。
8.1 分类
分类:其实是把数据分配到已有的几个类别机器学习的主要任务就是分类
下面我们举例说明:我们可以通过数据+算法训练出一个分类器
(又叫做模型),然后通过分类器来对新的数据进行分类。
香蕉 橙子 刀叉 芬达 | | | |水果 水果 餐具 饮料
8.2 回归
回归
主要应用于预测一些数值型的数据,比如数据拟合曲线
:通过给定数据点的最优拟合曲线
8.3 常用的监督学习算法
9 无监督学习
在无监督学习中,数据是只有特征
,没有目标变量
的,通过计算来猜出几个结果来无监督学习的好处是可以减少数据特征的维度,以便我们用二维和三维的图像进行展示数据
9.1 聚类
什么叫聚类呢?顾名思义。聚类:其实就是把没有分类的一组数据中相似的聚集成几个堆,这个堆也叫簇
专业的讲,就是将数据集合分成由类似的对象组成的多个类的过程这里的苹果
,橘子
,筷子
,勺子
,可乐
,雪碧
都是没有分类的数据,我们通过他们的一些特征计算出水果
、餐具
、饮料
这三个类。
苹果 橘子 勺子 筷子 可乐 雪碧 \ / \ / \ / 水果 餐具 饮料
9.2 密度估计
寻找描述数据统计值的过程
9.3 常用的无监督学习算法
10 在使用机器学习时的问题
10.1 如何选择合适的机器学习算法
首先我们要明确,我们选择算法只能在一定程度上缩小算法的选择范围,一般并不存在最好的算法和给出最好结果的算法在我们选择算法的时候,首先要考虑两个问题 1. 我们的目的是什么,想要算法完成什么任务 2. 我们需要分析的数据是什么,我们得到的数据又是什么如果你想要预测目标变量
,那么你可以选择监督学习
。如果你的目标变量
的数据类型是离散型
,那么你可以选择分类算法
,如果是连续型
,可以选择回归算法
如果你不想预测目标变量
,可以选择无监督学习
。如果需要将数据划分成组,可以选择聚类算法
,如果要估计每个分组的相似程度,可以选择密度估计算法
10.2 了解数据
特征值是
离散型
还是连续型
特征值中是否存在缺失的值,什么原因导致的缺失值,
数据中是否存在异常值
某个特征的频率如何,是否相当稀疏
11 机器学习开发的步骤
- 收集数据:爬虫爬数据,硬件设备获取数据,下载公开数据等
- 准备输入数据:确保数据的格式,是否格式不统一,是否需要离散化等
- 分析数据:查看数据中是否有空值,是否存在其他异常值,可以通过图表展示来观察数据
- 训练算法:选择合适的算法,并对我们的训练数据进行训练,如果是无监督学习则不需要训练
- 测试算法:对我们的模型或算法进行测试,来看看是否满意算法的输出结果
- 使用算法:将模型或算法进行工程化,用以执行实际的任务
12 推荐的语言和库
机器学习领域,推荐python
,因为它有一些强大库,并且语言简单,可以让你更加专注机器学习的开发。常用的库 1. numpy: 实现了常用的向量和矩阵的操作,并且增加了可读性,并且底层提高了计算性能 2. matplotlib: 常用的绘图工具,可以绘制2d、3d 的图形。
13 numpy常用操作
13.1 构建随机数据
构建一个4*4的数组。
import numpynumpy.random.ramd(4,4)
13.2 数组转化矩阵
将4*4的随机数组转化为矩阵
import numpyrandom_array=numpy.random.ramd(4,4)random_matrix=numpy.mat(random_array)
13.3 矩阵求逆
import numpyrandom_matrix=numpy.mat(numpy.random.ramd(4,4))random_matrix.I
13.4 矩阵相乘
import numpyrandom_matrix=numpy.mat(numpy.random.ramd(4,4))result=random_matrix*random_matrix.I
13.5 创建矩阵
import numpymatrix=numpy.eye(4)