ML(一)

  • 人工智能概述:人工智能是计算机科学的一个分支学科,主要研究用计算机模拟人的思考方式和形式,从而在某些领域代替人进行工作。
  • 人工智能与传统软件的区别:传统软件,执行人的指令和想法,在执行之前已经有了解决方案,无法超越人的思想和认识范围,人工智能,尝试突破人的思想和认识的范围,让计算机学习到新的能力,尝试解决传统软件的难题
机器学习
  • 机器学习是一门能够让编程计算机从数据中学习的计算机学科。
  • 讲义:一个计算程序在完成一个任务之后,获得经验E,其表现效果为P,任务T的性能得以显现,也就是用以衡量的P,随着E的增加而增加,那么这个系统称为机器学习系统(自我完善,自我学习,自我进步,自我适应

为什么需要机器学习

1.自动化的升级和维护,程序的自我升级
2.解决那些算法过于复杂,甚至没有已知算法的问题
3.在机器学习的过程中,协助人类获得事务的洞见

机器学习的问题

  • 建模问题:所谓机器学习,在形式上可这样理解,通过一个数据集,训练它,得到一个模型,给一个特定输入值X,能够预测出输出值Y(预测值),就是为了能够找到解决问题这个功能函数F 即y=f(x)
  • 评估问题:针对已知的输入,函数给出的输出(预测值)与实际输出(目标值)之间存在一定的误差,因此需要构建一个评估体系,根据误差的大小判断函数的优劣
  • 优化问题:学习的核心在于改善性能,通过数据对算法的反复锤炼,不断提升函数预测的准确性,直至获得能够满足实际需求的最优解,这个过程就是机器学习

机器学习的种类: 监督学习,无监督学习,半监督学习,强化学习
有监督学习:
在这里插入图片描述
给定的训练集中学习出一函数(模型参数),监督学习必须得有输入和输出,也可以说有特征和目标,通过训练集找出一个最优的模型,用这个模型将输入映射出相应的输出,对输出进行评判达到分类的目的。这个监督学习,就是让计算机去学习我们已经创建好的分类系统,优化它,因为它是在知其特征和目标的情况下进行学习的。

无监督学习:
没有已知输出的情况下,仅仅根据输入信息的相关性,进行类别的划分.在这里插入图片描述
输入集没有被标记,也没有确定的结果。样本数据类未知,需要根据样本间的相似性对样本集进行分类(聚类);试图使类内差距最小化,类间差距最大化。通俗点就是实际应用中,不少情况下无法预先知道样本的标签,也就是说没有训练样本对应的类别,因而只能从原先没有样本标签的样本集开始学习分类设计

半监督学习:
在这里插入图片描述
先通过无监督学习划分类别,再人工标记通过有监督学习方式来预测输出.例如先对相似的水果进行聚类,再识别是哪个类别.

强化学习:
先上专业料,强化学习研究(学习器)与(环境)交互过程中,如何学习到一种行为的策略,以最大化得到的累积奖赏。与前面我们提到的其他学习问题的不同在于,强化学习处在一个对学习器的行为进行执行和评判的环境中:环境将执行学习器的输出,发生变化,并且反馈给学习器一个奖赏值,同时学习器的目标并不在于最大化立即获得奖赏,而是最大化长期累积的奖赏

批量学习:
将学习的过程和应用的过程截然分开,用全部的训练数据训练模型,然后再在应用场景中实现预测,当预测结果不够理想时,重新回到学习过程,如此循环
增量学习:
将学习过程和应用过程统一起来,在应用的同时,以增量的方式不断学习新的内容,边训练、便预测。类似于人类的学习模式。因为人在成长的过程中,每天学习和接收新的事物,学习是逐步进行的,对学习的知识一般不会忘记。

基于模型学习和基于实例学习

基于实例学习:根据以往的经验寻找与待预测输入最接近的样本,以其输出作预测结果,求个均值就可
基于模型学习:建立用于联系输出和输入的某种数学类型,将待预测输入该模型,预测结果

机器学习的基本问题

  • 回归问题:根据已知 的输入和输出寻找某种性能最佳的模型,将未知输出的输入带入模型,得到连续的 输出
  • 分类问题:根据已知的输入和输出寻找最佳性能模型,。。得到离散的输出
  • 聚类问题:根据已知的输入的相似程度,将其划分为不同的群落
  • 降维问题:在性能损失尽可能小的前提下,降低数据的复杂度

数据预处理

目的:就是去除无效数据,不规范数据,错误数据,补齐缺失值,数据范围、格式、类型、进行统一处理,更容易后续计算

标准化:

标准化(也就是均值移除),由于一个样本的不同特征差异较大,不利于使用现有机器学习算法进行样本处理,标准化可以使样本矩阵中的每一列的平均值为0,标准差为1.
标准差:又称均方差,是离均差平方的算术平均数的平方根,标准差能反映一个数据集的离散程度

# 数据预处理之:均值移除示例
import numpy as np
import sklearn.preprocessing as sp

# 样本数据
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函数实现同样的功能,
std_samples = sp.scale(raw_samples) # 求标准移除
print(std_samples)
print(std_samples.mean(axis=0))
print(std_samples.std(axis=0))
范围缩放:

统一样本矩阵中的每列的最小值和最大值设定为相同的区间,统一各列特征值的范围,一般情况下会把特征值缩放至[0,1]区间。这样处理可对方差非常小的属性增强其稳定性。

import numpy as np
import sklearn.preprocessing as sp
# 根据给定范围创建一个范围缩放器对象
mms = sp.MinMaxScaler(feature_range=(0, 1))# 定义对象(修改范围观察现象)
# 使用范围缩放器实现特征值范围缩放
mms_samples = mms.fit_transform(raw_samples) # 缩放
print(mms_samples)
标准化:

有些情况每个样本的每个特征值具体的值并不重要,但是每个样本特征值的占比更加重要/所以归一化即是每个样本的每个特征值除以该样本各个特征值绝对值的总和。

# 数据预处理之:归一化
import numpy as np
import sklearn.preprocessing as sp
# 样本数据
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()  # 先对行求绝对值,再求和,再除以绝对值之和
print(nor_samples) # 打印结果
#在sklearn库中,可以调用sp.normalize()函数进行归一化处理
sp.normalize(原始样本, norm='l2')
# l1: l1范数,除以向量中各元素绝对值之
# l2: l2范数,除以向量中各元素平方之和开方
nor_samples = sp.normalize(raw_samples, norm='l1')
print(nor_samples) # 打印结果
标准化:

有些业务并不需要分析矩阵的 详细完整数据,可以根据一个事先给定的阈值,用0和1表示特征值不高于或高于阈值。二值化后的数组中每个元素非0即1,达到简化数学模型的目的。
一般情况下都会用到图片上,二值化编码会导致信息损失,是不可逆的数值转换,可逆的用独热编码可以

# 二值化
import numpy as np
import sklearn.preprocessing as sp

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)  # 打印结果

#利用sklearn库来处理
bin = sp.Binarizer(threshold=59) # 创建二值化对象(注意边界值)
bin_samples = bin.transform(raw_samples) # 二值化预处理
print(bin_samples)
独热编码:

根据一个特征中值的个数来建立一个由一个1和若干个0组成的序列,用来序列对所有的特征值进行编码.例如有如下样本:
[ 1 3 2 7 5 4 1 8 6 7 3 9 ] \left[ \begin{matrix} 1 & 3 & 2\\ 7 & 5 & 4\\ 1 & 8 & 6\\ 7 & 3 & 9\\ \end{matrix} \right] 171735832469
对于第一列,有两个值,1使用10编码,7使用01编码

对于第二列,有三个值,3使用100编码,5使用010编码,8使用001编码

对于第三列,有四个值,2使用1000编码,4使用0100编码,6使用0010编码,9使用0001编码

编码字段,根据特征值的个数来进行编码,通过位置加以区分.通过独热编码后的结果为:

[ 10 100 1000 01 010 0100 10 001 0010 01 100 0001 ] \left[ \begin{matrix} 10 & 100 & 1000\\ 01 & 010 & 0100\\ 10 & 001 & 0010\\ 01 & 100 & 0001\\ \end{matrix} \right] 100110011000100011001000010000100001

使用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, # 是否采用稀疏格式
    dtype="int32",
    categories="auto")# 自动编码
oh_samples = one_hot_encoder.fit_transform(raw_samples) # 执行独热编码
print(oh_samples)

print(one_hot_encoder.inverse_transform(oh_samples)) # 解码
标签编码:

根据字符串形式的特征值在特征序列中的位置,来为其指定一个数字标签,用于提供给基于数值算法的学习模型。可以理解为将一些中文或者也能什么的呀转换成一些数字,以便于进行训练

# 标签编码
import numpy as np
import sklearn.preprocessing as sp

raw_samples = np.array(['audi', 'ford', 'audi',
                        'bmw','ford', 'bmw'])

lb_encoder = sp.LabelEncoder() # 定义标签编码对象
lb_samples = lb_encoder.fit_transform(raw_samples) # 执行标签编码
print(lb_samples)

print(lb_encoder.inverse_transform(lb_samples)) # 逆向转换
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Rebirth-LSS

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

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

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

打赏作者

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

抵扣说明:

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

余额充值