【Python人工智能】Python全栈体系(十一)

人工智能

第一章 机器学习

一、机器学习概述

1. 什么是机器学习
  • 机器学习是一门能够让编程计算机从数据中学习的计算机科学。
  • 一个计算机程序在完成任务T之后,获取经验E,其表现效果为P,如果任务T的性能表现,也就是用以衡量的P,随着E增加而增加,那么这样计算机程序就被称为机器学习系统。
  • 自我完善,自我增进,自我适应。
2. 为什么需要机器学习
  • 自动化的升级和维护
  • 解决那些算法过于复杂甚至根本就没有已知算法的问题
3. 机器学习需要解决的问题
3.1 建模问题
  • 所谓机器学习,在形式上可这样理解:在数据对象中通过统计或推理的方法,寻找一个接受特定输入X,并给出预期输出Y的功能函数f,即Y=f(X)。
3.2 评估问题
  • 针对已知的输入,函数给出的输出(预测值)与实际输出(目标值)之间存在一定误差,因此需要构建一个评估体系,根据误差大小判定函数的优劣。
3.3 优化问题
  • 学习的核心在与改善性能,通过数据对算法的反复锤炼,不断提升函数预测的准确性,直至获得能够满足实际需求的最优解,这个过程就是机器学习。
4. 机器学习的种类
4.1 监督学习、无监督学习、半监督学习
  • 有监督学习:用已知输出评估模型的性能。
  • 无监督学习:在没有已知输出的情况下,仅仅根据输入信息的相关性,进行类别的划分。
  • 半监督学习:先通过无监督学习划分类别,再根据人工标记通过有监督学习预测输出。
4.2 批量学习和增量学习
  • 批量学习:将学习的过程和应用的过程截然分开,用全部的训练数据训练模型,然后再在应用场景中实现预测,当预测结果不够理想时,重新回到学习过程,如此循环。
  • 增量学习:将学习的过程和应用的过程统一起来,在应用的同时以增量的方式,不断学习新的内容,边训练边预测。
4.3 基于实例的学习和基于模型的学习
  • 基于实例的学习:根据以往的经验,寻找与待预测输入最接近的样本,以其输出作为预测结果。

    学历(x1)工作经验(x2)性别(x3)月薪(y)
    本科38000
    硕士210000
    博士215000
    • 预测:本科,3,男 ==> 薪资?
  • 基于模型的学习:根据样本数据,建立用于联系输出和输出的某种数学模型,将待预测输入带入该模型,预测其结果。

    输入(x)输出(y)
    12
    24
    36
    48
    • 根据数据,得到模型 y = 2 x y = 2x y=2x
    • 预测:输入9时,输出是多少?
5. 机器学习的一般过程
5.1 数据处理
  • 数据收集(数据检索、数据挖掘、爬虫)
  • 数据清洗
  • 特征工程
5.2 机器学习
  • 选择模型(算法)
  • 训练模型(算法)
  • 评估模型(工具、框架、算法知识)
  • 测试模型
5.3 业务运维
  • 应用模型
  • 维护模型
6. 机器学习的典型应用
  • 机器学习常应用于如下领域:
    • 数据预测
    • 股价预测
    • 推荐引擎
    • 自然语言识别
    • 语音识别
    • 图像识别
    • 人脸识别
7.机器学习的应用场景
  • 机器学习模型的典型应用业务场景有如下三种:
    • 回归业务场景:根据已知的输入和输出寻找某种性能最佳的模型,将未知输出的输入代入模型,得到连续的输出。
    • 分类业务场景:根据已知的输入和输出寻找某种性能最佳的模型,将未知输出的输入代入模型,得到离散的输出。
    • 聚类业务场景:根据已知输入的相似程度,将其划分为不同的群落。

二、数据预处理

1. 数据样本矩阵
  • 一行一样本,一列一特征。
学历(x1)工作经验(x2)性别(x3)月薪(y)
本科38000
硕士210000
博士215000
# 解决机器学习问题的科学计算工具包
import sklearn.preprocessing as sp
# 样本数据
data = np.array([[24,1,7000],[25,2,8000],[38,10,8500]])
data

"""
array([[  24,    1, 7000],
       [  25,    2, 8000],
       [  38,   10, 8500]])
"""
2. 均值移除
  • 由于一个样本的不同特征值差异较大,不利于使用现有机器学习算法进行样本处理。均值移除可以让样本矩阵中的每一列的平均值为0,标准差为1.
import sklearn.preprocessing as sp
# scale函数用于对函数进行预处理,实现均值移除。
# array为原数组,返回A为均值移除后的结果。
A = sp.scale(array)
  • 实例
# 数据预处理
import numpy as np
import sklearn.preprocessing as sp

# 求标准移除
r = sp.scale(data)
r

"""
array([[-0.78406256, -0.82760589, -1.33630621],
       [-0.62725005, -0.57932412,  0.26726124],
       [ 1.41131261,  1.40693001,  1.06904497]])
"""

# 求每列的平均值
print(r.mean(axis=0))
# 求每列的标准差
print(r.std(axis=0))

"""
[0.00000000e+00 7.40148683e-17 5.18104078e-16]
[1. 1. 1.]
"""
3. 范围缩放
  • 将样本矩阵中的每一列的最小值和最大值设定为相同的区间,统一各列特征值的范围。一般情况下会把特征值缩放至[0,1]区间。
# 创建MinMax缩放器
mms = sp.MinMaxScaler(feature_range=(0,1))
# 调用mms对象的方法执行缩放操作,返回缩放过后的结果
result = mms,fit_transform(原始样本矩阵)
  • 实例
# 根据给定范围创建一个范围缩放器对象
mms = sp.MinMaxScaler(feature_range=(0,1))
# 使用范围缩放器实现特征值范围缩放
r = mms.fit_transform(data)
r
"""
array([[0.        , 0.        , 0.        ],
       [0.07142857, 0.11111111, 0.66666667],
       [1.        , 1.        , 1.        ]])
"""
4. 二值化
  • 有些业务并不需要分析矩阵的详细完整数据(比如图像边缘识别只需要分析出图像边缘即可),可以根据一个事先给定的阈值,用0和1表示特征值不高于或高于阈值。二值化后的数组中每个元素非0即1,达到简化数学模型的目的。
# 给出阈值,获取二值化器
bin = sp.Binarizer(threshold=阈值)
# 调用transform方法对原始样本矩阵进行二值化预处理操作
result = bin.transform(原始样本矩阵)
  • 实例
# 创建二值化对象(注意边界值)
bin = sp.Binarizer(threshold=40)
# 二值化预处理
r = bin.transform(data)
r

"""
array([[0, 0, 1],
       [0, 0, 1],
       [0, 0, 1]])
"""
import cv2 as cv
import matplotlib.pyplot as plt
img = cv.imread('lq.jpg', 0)
plt.imshow(img, cmap='gray')

在这里插入图片描述

bin = sp.Binarizer(threshold=127)
r = bin.transform(img)
plt.imshow(r, cmap='gray')

在这里插入图片描述

5. 归一化
  • 有些情况每个样本的每个特征值具体的值并不重要,但是每个样本特征值的占比更加重要。归一化即是用每个样本的每个特征值除以该样本各个特征值绝对值的总和。变换后的样本矩阵,每个样本的特征值绝对值之和为1.
动作爱情科幻
张三20105
李四421
王五151113
# array 原始样本矩阵
# norm 范数
# 	l1 - l1 范数,向量中个元素绝对值之和
# 	l2 - l2 范数,向量中个元素平方之和
# 返回归一化预处理后的样本矩阵
sp.normalize(array, norm='l1')
  • 实例
data2 = np.array([[20,10,5],[4,2,1],[15,11,13]])
# l1:l1范数,除以向量中各元素绝对值之和
r = sp.normalize(data2, norm='l1')
r

"""
array([[0.57142857, 0.28571429, 0.14285714],
       [0.57142857, 0.28571429, 0.14285714],
       [0.38461538, 0.28205128, 0.33333333]])
"""

np.abs(r).sum(axis=1)

""" array([1., 1., 1.]) """

# l2:l2范数,除以向量中各元素平方之和
r = sp.normalize(data2, norm='l2')
r

"""
array([[0.87287156, 0.43643578, 0.21821789],
       [0.87287156, 0.43643578, 0.21821789],
       [0.66097897, 0.48471791, 0.57284844]])
"""

(np.abs(r)**2).sum(axis=1)
"""
array([1., 1., 1.])
"""
6. 独热编码
  • 为样本特征的每个值建立一个由一个1和若干个0组成的序列,用该序列对所有的特征值进行编码。
两个数 三个数 四个数
1	  3		2
7	  5		4
1	  8	 	6
7	  3		9
为每一个数字进行独热编码:
1-10  3-100 2-1000
7-01  5-010 4-0100
	  8-001 6-0010
	  		9-0001
编码完毕后得到最终经过独热编码后的样本矩阵:
101001000
010100100
100010010
011000001
# 创建一个独热编码器
# sparse: 是否使用紧缩格式(稀疏矩阵)
# dtype:  数据类型
ohe = sp.OneHotEncoder(sparse=是否采用紧缩格式, dtype=数据类型)
# 对原始样本矩阵进行处理,返回独热编码后的样本矩阵
result = ohe.fit_transform(原始样本矩阵)
ohe = sp.OneHotEncoder(sparse=是否采用紧缩格式, dtype=数据类型)
# 对原始样本矩阵进行训练,得到编码字典
encode_dict = ohe.fit(原始样本矩阵)
# 调用encode_dict字典的transform方法,对数据样本矩阵进行独热编码
result = encode_dict.transform(原始样本矩阵)
  • 实例
data3 = np.array([[1,3,2],[7,5,4],[1,8,6],[7,3,9]])
data3

"""
array([[1, 3, 2],
       [7, 5, 4],
       [1, 8, 6],
       [7, 3, 9]])
"""

ohe = sp.OneHotEncoder()
r = ohe.fit_transform(data3)
r.toarray()

"""
array([[1., 0., 1., 0., 0., 1., 0., 0., 0.],
       [0., 1., 0., 1., 0., 0., 1., 0., 0.],
       [1., 0., 0., 0., 1., 0., 0., 1., 0.],
       [0., 1., 1., 0., 0., 0., 0., 0., 1.]])
"""

# 是否采用稀疏格式
ohe = sp.OneHotEncoder(sparse=False)
r = ohe.fit_transform(data3)
r

"""
array([[1., 0., 1., 0., 0., 1., 0., 0., 0.],
       [0., 1., 0., 1., 0., 0., 1., 0., 0.],
       [1., 0., 0., 0., 1., 0., 0., 1., 0.],
       [0., 1., 1., 0., 0., 0., 0., 0., 1.]])
"""
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柠檬小帽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值