机器学习概述,深度学习,人工智能,无监督学习,有监督学习,增量学习,预处理,回归问题,分类问题

一、人工智能课程概述
1. 什么是人工智能
人工智能( Artificial Intelligence )是计算机科学的一个分支学科,主要研究用计算机模拟人的思考方式
和行为方式,从而在某些领域代替人进行工作 .
2. 人工智能的学科体系
以下是人工智能学科体系图:
机器学习( Machine Learning ):人工智能的一个子学科,研究人工智能领域的基本算法、原理、
思想方法,机器学习研究的内容在其它子学科都会用到
计算机视觉( Computer Vision ):研究计算机处理、识别、理解图像、视频的相关技术
自然语言处理( Natural Language Processing ):研究计算机理解人类自然语言的相关技术
语言处理:研究计算机理解识别、理解、合成语音的相关技术
 
3. 人工智能与传统软件的区别
传统软件:执行人的指令和想法,在执行之前人已经有了解决方案,无法超越人的思想和认识范围
人工智能:尝试突破人的思想和认识范围,让计算机学习到新的能力,尝试解决传统软件的难题
二、机器学习基本概念
1. 什么是机器学习
1975 年图灵奖获得者、 1978 年诺贝尔经济学奖获得者、著名学者赫伯特 . 西蒙( Herbert Simon )曾下
过一个定义:如果一个系统,能够通过执行某个过程,就此改进了它的性能,那么这个过程就是学习 .
此可看出,学习的目的就是改善性能 .
卡耐基梅隆大学机器学习和人工智能教授汤姆 . 米切尔( Tom Mitchell )在他的经典教材《机器学习》
中,给出了更为具体的定义:对于某类任务( Task ,简称 T )和某项性能评价准则( Performance ,简
P ),如果一个计算机在程序 T 上,以 P 作为性能度量,随着经验( Experience ,简称 E )的积累,不断
自我完善,那么我们称计算机程序从经验 E 中进行了学习 . 例如,篮球运动员投篮训练过程:球员投篮(任务 T ),以准确率为性能度量( P ),随着不断练习(经
E ),准确率不断提高,这个过程称为学习 .
2. 为什么需要机器学习
1 )程序自我升级;
2 )解决那些算法过于复杂,甚至没有已知算法的问题;
3 )在机器学习的过程中,协助人类获得事物的洞见 .
3. 机器学习的形式
1) 建模问题
所谓机器学习,在形式上可近似等同于在数据对象中通过统计、推理的方法,来寻找一个接受特定输入
X ,并给出预期输出 Y 功能函数 f ,即
. 这个函数以及确定函数的参数被称为模型 .
2) 评估问题
针对已知的输入,函数给出的输出(预测值)与实际输出(目标值)之间存在一定误差,因此需要构建
一个评估体系,根据误差大小判定函数的优劣 .
3) 优化问题
学习的核心在与改善性能,通过数据对算法的反复锤炼,不断提升函数预测的准确性,直至获得能够满
足实际需求的最优解,这个过程就是机器学习 .
4. 机器学习的分类(重点)
1) 有监督、无监督、半监督学习
a) 有监督学习
在已知数据输出(经过标注的)的情况下对模型进行训练,根据输出进行调整、优化的学习方式称为有
监督学习 .
b) 无监督学习
没有已知输出的情况下,仅仅根据输入信息的相关性,进行类别的划分 .
c) 半监督
先通过无监督学习划分类别,再人工标记通过有监督学习方式来预测输出 . 例如先对相似的水果进行聚
类,再识别是哪个类别 .
d) 强化学习
通过对不同决策结果的奖励、惩罚,使机器学习系统在经过足够长时间的训练以后,越来越倾向于接近
期望结果的输出 . 输入( x
输出( y
1
2
2
4
3
6
4
8
学历 (x1)
工作经验 (x2)
性别 (x3)
月薪 (y)
本科
3
8000
硕士
2
10000
博士
2
15000
2) 批量学习、增量学习
a) 批量学习
将学习过程和应用过程分开,用全部训练数据训练模型,然后再在应用场景中进行预测,当预测结果不
够理想时,重新回到学习过程,如此循环 .
b) 增量学习
将学习过程和应用过程统一起来,在应用的同时,以增量的方式不断学习新的内容,边训练、边预测 .
3) 基于模型学习、基于实例学习
a) 基于模型的学习
根据样本数据,建立用于联系输出和输出的某种数学模型,将待预测输入带入该模型,预测其结果 . 例如
有如下输入输出关系:
根据数据,得到模型
预测:输入 9 时,输出是多少?
b) 基于实例的学习
根据以往经验,寻找与待预测输入最接近的样本,以其输出作为预测结果(从数据中心找答案) . 例如有
如下一组数据:
预测:本科, 3 ,男 ==> 薪资?
5. 机器学习的一般过程 ( 重点 )
1) 数据收集,手段如手工采集、设备自动化采集、爬虫等
2) 数据清洗:数据规范、具有较大误差的、没有意义的数据进行清理
注:以上称之为数据处理,包括数据检索、数据挖掘、爬虫 ......
3) 选择模型(算法)
4) 训练模型 5) 模型评估
6) 测试模型
注: 3~6 步主要是机器学习过程,包括算法、框架、工具等 ......
7) 应用模型
8) 模型维护
6. 机器学习的典型应用
1) 股价预测
2) 推荐引擎
3) 自然语言处理
4) 语音处理:语音识别、语音合成
5) 图像识别、人脸识别
6) ……
7. 机器学习的基本问题 ( 重点 )
1) 回归问题
根据已知的输入和输出,寻找某种性能最佳的模型,将未知输出的输入代入模型,得到 连续的输出 .
如:
根据房屋面积、地段、修建年代以及其它条件预测房屋价格
根据各种外部条件预测某支股票的价格
根据农业、气象等数据预测粮食收成
计算两个人脸的相似度
2) 分类问题
根据已知的输入和输出,寻找性能最佳的模型,将未知输出的输入带入模型,得到 离散的输出 ,例如:
手写体识别( 10 个类别分类问题)
水果、鲜花、动物识别
工业产品瑕疵检测(良品、次品二分类问题)
识别一个句子表达的情绪(正面、负面、中性)
3) 聚类问题
根据已知输入的相似程度,将其划分为不同的群落,例如:
根据一批麦粒的数据,判断哪些属于同一个品种
根据客户在电商网站的浏览和购买历史,判断哪些客户对某件商品感兴趣
判断哪些客户具有更高的相似度
4) 降维问题
在性能损失尽可能小的情况下,降低数据的复杂度,数据规模缩小都称为降维问题 .
8. 课程内容 年龄
学历
经验
性别
月薪
25
硕士
2
10000
20
本科
3
8000
...
...
...
...
...
三、数据预处理
数据预处理的过程: 输入数据 -> 模型 -> 输出数据
数据样本矩阵
一行一样本,一列一特征。
1. 数据预处理的目的
1 )去除无效数据、不规范数据、错误数据
2 )补齐缺失值
3 )对数据范围、量纲、格式、类型进行统一化处理,更容易进行后续计算
2. 预处理方法 1 )标准化(均值移除)
由于一个样本的不同特征值差异较大,不利于使用现有机器学习算法进行样本处理。 均值移除 可以让样
本矩阵中的每一列的平均值为 0 ,标准差为 1
如何使样本矩阵中的每一列的平均值为 0 呢?
预处理后的平均值为 0
如何使样本矩阵中的每一列的标准差为 1 呢?
预处理后的标准差:
标准差:又称均方差,是离均差平方的算术平均数的平方根,用 σ 表示 ,标准差能反映一个数据集的离
散程度
代码示例:
# 数据预处理之:均值移除示例
import numpy as np
# 样本数据
raw_samples = np . array ([
[ 3.0 , - 1.0 , 2.0 ],
[ 0.0 , 4.0 , 3.0 ],
[ 1.0 , - 4.0 , 2.0 ]
])
print ( raw_samples )
print ( raw_samples . mean ( axis = 0 )) # 求每列的平均值
print ( raw_samples . std ( axis = 0 )) # 求每列标准差
std_samples = raw_samples . copy () # 复制样本数据
for col in std_samples . T : # 遍历每列
col_mean = col . mean () # 计算平均数
col_std = col . std () # 求标准差
col -= col_mean # 减平均值
col /= col_std # 除标准差
print ( std_samples )
print ( std_samples . mean ( axis = 0 ))
print ( std_samples . std ( axis = 0 )) 我们也可以通过 sklearn 提供 sp.scale 函数实现同样的功能,如下面代码所示:
2 )范围缩放
将样本矩阵中的每一列最小值和最大值设定为相同的区间,统一各特征值的范围 . 一般情况下会把特征值
缩放至 [0, 1] 区间。
如何使一组特征值的最小值为 0 呢?
如有 a, b, c 三个数,其中 b 为最小值, c 为最大值,则:
如何使一组特征值的最大值为 1 呢?
缩放计算方式如下公式所示:
计算完成后,最小值为 0 ,最大值为 1. 以下是一个范围缩放的示例 .
import sklearn . preprocessing as sp # 均值移除 API
std_samples = sp . scale ( raw_samples ) # scale 函数用于对函数进行预处理,实现均值移除 , 返回结
果。
print ( std_samples )
print ( std_samples . mean ( axis = 0 ))
print ( std_samples . std ( axis = 0 ))
例如有一列特征值表示年龄: [ 17 , 20 , 23 ]
每个元素减去特征值数组所有元素的最小值即可: [ 0 , 3 , 6 ]
[ 0 , 3 , 6 ]
把特征值数组的每个元素除以最大值即可: [ 0 , 1 / 2 , 1 ]
# 数据预处理之:范围缩放
import numpy as np
# 样本数据
raw_samples = np . array ([
[ 1.0 , 2.0 , 3.0 ],
[ 4.0 , 5.0 , 6.0 ],
[ 7.0 , 8.0 , 9.0 ]]). astype ( "float64" )
# print(raw_samples)
mms_samples = raw_samples . copy () # 复制样本数据
for col in mms_samples . T :
col_min = col . min () 年份
Python (万人)
Java (万人)
PHP (万人)
2017
10
20
5
2018
8
10
1
我们也可以通过 sklearn 提供的对象实现同样的功能,如下面代码所示:
执行结果:
3 )归一化
有些情况每个样本的每个特征值具体的值并不重要,但是每个样本特征值的占比更加重要。反映样本所
占比率 . 用每个样本的每个特征值,除以该样本各个特征值绝对值之和。变换后的样本矩阵,每个样本的
特征值绝对值之和为 1.
例如如下反映编程语言热度的样本中, 2018 年也 2017 年比较, Python 开发人员数量减少了 2 万,但是所
占比率确上升了:
归一化预处理示例代码如下所示:
col_max = col . max ()
col -= col_min
col /= ( col_max - col_min )
print ( mms_samples )
import sklearn . preprocessing as sp
# 根据给定范围创建一个范围缩放器对象
mms = sp . MinMaxScaler ( feature_range =( 0 , 1 )) # 定义对象 ( 修改范围观察现象 )
# 使用范围缩放器实现特征值范围缩放
mms_samples = mms . fit_transform ( raw_samples ) # 缩放
print ( mms_samples )
[[0. 0. 0. ]
[0.5 0.5 0.5]
[1. 1. 1. ]]
[[0. 0. 0. ]
[0.5 0.5 0.5]
[1. 1. 1. ]]
# 数据预处理之:归一化
import numpy as np
# 样本数据
raw_samples = np . array ([
[ 10.0 , 20.0 , 5.0 ],
[ 8.0 , 10.0 , 1.0 ]
])
print ( raw_samples )
nor_samples = raw_samples . copy () # 复制样本数据
for row in nor_samples :
row /= abs ( row ). sum () # 先对行求绝对值,再求和,再除以绝对值之和 sklearn 库中,可以调用 sp.normalize() 函数进行归一化处理,函数原型为:
使用 sklearn 库中归一化处理代码如下所指示:
4 )二值化
有些业务并不需要分析矩阵的详细完整数据(比如图像边缘识别只需要分析出图像边缘即可),可以根
据一个事先给定的阈值,用 0 1 表示特征值不高于或高于阈值。二值化后的数组中每个元素非 0 1 ,达
到简化数学模型的目的。
以下是实现二值化预处理的代码:
同样,也可以利用 sklearn 库来处理:
二值化编码会导致信息损失,是不可逆的数值转换 . 如果进行可逆转换,则需要用到独热编码 .
print ( nor_samples ) # 打印结果
import sklearn . preprocessing as sp
sp . normalize ( 原始样本 , norm = 'l2' )
# l1: l1 范数,除以向量中各元素绝对值之和
# l2: l2 范数,除以向量中各元素平方之和
nor_samples = sp . normalize ( raw_samples , norm = 'l1' )
print ( nor_samples ) # 打印结果
# 二值化
import numpy as np
raw_samples = np . array ([[ 65.5 , 89.0 , 73.0 ],
[ 55.0 , 99.0 , 98.5 ],
[ 45.0 , 22.5 , 60.0 ]])
bin_samples = raw_samples . copy () # 复制数组
# 生成掩码数组
mask1 = bin_samples < 60
mask2 = bin_samples > = 60
# 通过掩码进行二值化处理
bin_samples [ mask1 ] = 0
bin_samples [ mask2 ] = 1
print ( bin_samples ) # 打印结果
import sklearn . preprocessing as sp
bin = sp . Binarizer ( threshold = 59 ) # 创建二值化对象 ( 注意边界值 )
bin_samples = bin . transform ( raw_samples ) # 二值化预处理
print ( bin_samples ) 5 )独热编码
根据一个特征中值的个数来建立一个由一个 1 和若干个 0 组成的序列,用来序列对所有的特征值进行编码 .
例如有如下样本:
对于第一列,有两个值, 1 使用 10 编码, 7 使用 01 编码
对于第二列,有三个值, 3 使用 100 编码, 5 使用 010 编码, 8 使用 001 编码
对于第三列,有四个值, 2 使用 1000 编码, 4 使用 0100 编码, 6 使用 0010 编码, 9 使用 0001 编码
编码字段,根据特征值的个数来进行编码,通过位置加以区分 . 通过独热编码后的结果为:
使用 sklearn 库提供的功能进行独热编码的代码如下所示:
执行结果:
# 独热编码示例
import numpy as np
import sklearn . preprocessing as sp
raw_samples = np . array ([[ 1 , 3 , 2 ],
[ 7 , 5 , 4 ],
[ 1 , 8 , 6 ],
[ 7 , 3 , 9 ]])
one_hot_encoder = sp . OneHotEncoder (
sparse = False , # 是否采用稀疏格式;在矩阵中,若数值为 0 的元素数目远远多于非 0 元素的数目,并
且非 0 元素分布没有规律时,则称该矩阵为稀疏矩阵,只展示非 0 的,剩下没有说明的数都是 0 ,反之是稠密矩
阵,数组形式展示所有数值。(在内存中占用更多空间但可加快运算)。二者在数据处理上速度上相差很大,
我们将这个技巧称为 “one-hot” 编码
dtype = "int32" , # 数据类型
categories = "auto" ) # 自动编码
oh_samples = one_hot_encoder . fit_transform ( raw_samples ) # 执行独热编码(一位有效编
码)
print ( oh_samples )
# 方法 2
# 对原始样本矩阵进行训练,得到编码字典
encode_dict = one_hot_encoder . fit ( 原始样本矩阵 )
# 调用 encode_dict 字典的 transform 方法 对数据样本矩阵进行独热编码
result = encode_dict . transform ( 原始样本矩阵 )
print ( result ) # 执行独热编码后的矩阵
print ( one_hot_encoder . inverse_transform ( result )) # 解码 6 )标签编码
根据字符串形式的特征值在特征序列中的位置,来为其指定一个数字标签,用于提供给基于数值算法的
学习模型 . 代码如下所示:
执行结果:
  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值