0


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

**一、人工智能课程概述 **

**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. 数据清洗:数据规范、具有较大误差的、没有意义的数据进行清理

注:以上称之为数据处理,包括数据检索、数据挖掘、爬虫......

  1. 选择模型(算法)

  2. 训练模型5) 模型评估

  3. 测试模型

注:3~6步主要是机器学习过程,包括算法、框架、工具等......

  1. 应用模型

  2. 模型维护

**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***)标签编码 **

根据字符串形式的特征值在特征序列中的位置,来为其指定一个数字标签,用于提供给基于数值算法的

学习模型.代码如下所示:

执行结果:


本文转载自: https://blog.csdn.net/ndjziskwkhdh/article/details/141535725
版权归原作者 学呗~那不然呢 所有, 如有侵权,请联系我们删除。

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

还没有评论