机器学习入门第一天

什么是机器学习

机器学习是一门能够让编程计算机从数据中学习的计算机科学。
一个计算机程序在完成任务T之后,获得经验E,其表现效果为P,如果任务T的性能表现(P),随着E增加而增加,那么这样的计算机程序就被称为机器学习系统。拥有自我完善,自我增进,自我适应的特点。

机器学习的问题

1. 建模问题

所谓机器学习,形式上可以这么理解:在数据中通过统计或推理的方法,寻找一个接收特定输入x,并给出预期输出y的功能函数f(x).

2. 评估问题

针对已知输入,函数给出的输出(预测值)与实际输出(目标值)之间存在一定的误差,因此需要构建一个评估体系,根据误差的大小判定函数的优劣。

3. 优化问题

学习的核心在于改善自身的性能,通过数据对算法的反复锤炼,不断提升函数预测的准确性,直到获得能够满足实际需求的最优解决方案。

机器学习的种类

监督学习、无监督学习、半监督学习、强化学习

  1. 监督学习:用已知的输出评估模型的性能,引导模型优化。
  2. 无监督学习:在没有已知输出的情况下,仅仅根据输入信息的相关性,进行类别的划分。
  3. 半监督学习:先通过无监督学习划分类别,再根据人工标记,通过有监督学习预测输出。
  4. 强化学习:通过对不同决策结果的奖励和惩罚,使机器学习系统经过长时间训练以后,越来越倾向于给出接近期望结果的输出。

批量学习和增量学习

  1. 批量学习:将学习的过程和应用的过程分开,用全部的训练数据训练模型,然后在应用场景中实现预测,当预测结果不够理想时,重新回到学习过程,如此循环。
  2. 增量学习:将学习的过程和应用的而过程统一起来,在应用的同时以增量的方式不断学习新的内容,边训练变预测,边预测边训练。

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

  1. 基于实例的学习:以历史数据作为经验,寻找与待预测输入最接近的样本,以其输出作为预测结果。
  2. 基于模型的学习:以历史数据作为经验,建立联系输入与输出的某种数学模型,将待预测输入代入该模型,预测结果。

机器学习的一般过程

数据清理

  1. 数据收集(数据检索、数据挖掘、爬虫)
  2. 数据清洗

机器学习

  1. 选择模型(算法)
  2. 训练模型(算法)
  3. 评估模型(工具、框架、算法)
  4. 测试模型

业务运维

  1. 应用模型
  2. 维护模型
机器学习的典型应用

股价预测、推荐引擎、自然语言识别(NLP)、语音、图像、人脸识别等。

机器学习的基本问题
  1. 回归问题:根据已知的输入和输出寻找某种性能最佳的模型,将未知输出的输入代入模型,得到连续的输出
  2. 分类问题:根据已知的输入和输出寻找某种性能最佳的模型,将未知输出的输入代入模型,得到离散的输出
  3. 聚类问题:根据已知输入的相似程度,将其划分成不同的群落。
  4. 升维、降维问题:在性能损失尽可能小的情况下,实现模型业务。

数据预处理(6)

数据预处理相关库

# sklearn是解决机器学习问题的科学计算工具包
# preprocessing用于数据预处理操作
import sklearn.preprocessing as sp
  1. 均值移除(标准化)
    由于一个样本的不同特征值差异较大,不利于使用现有机器学习算法进行样本处理。所以可以使用均值移除让样本矩阵中每组特征值的平均值为0,标准差为1。
import numpy as np
import sklearn.preprocessing as sp

raw_samples = np.array([
    [17., 100., 4000.],
    [20., 80., 5000.],
    [23., 75., 5500.]])

std_samples = sp.scale(raw_samples)
print(std_samples)
# 输出每一列的均值与标准差
print(std_samples.mean(axis=0))
print(std_samples.std(axis=0))
  1. 范围缩放
    将样本矩阵中的每一列的最小值与最大值设定为相同的区间,统一各列特征值的范围。一般情况下会把特征值缩放至[0,1]区间。
import numpy as np
import sklearn.preprocessing as sp

raw_samples = np.array([
    [17., 100., 4000.],
    [20., 80., 5000.],
    [23., 75., 5500.]])

print(raw_samples)
# 执行范围缩放
# 获取MinMax范围缩放器, 定义缩放范围[0, 1]
mms = sp.MinMaxScaler(feature_range=(0, 1))
# 返回缩放结果
result = mms.fit_transform(raw_samples)
print(result)
  1. 归一化
    有些情况每个样本的每个特征值具体是多少并不重要,但是每个样本特征值的占比更加重要。
    归一化即是用每个样本的每个特征值除以该样本各个特征值绝对值的总和。变换后样本矩阵,每个样本的特征值绝对值之和为1。
import numpy as np
import sklearn.preprocessing as sp

raw_samples = np.array([
    [17., 100., 4000.],
    [20., 80., 5000.],
    [23., 75., 5500.]])

print(raw_samples)
# 归一化处理
# array:原始样本矩阵
# norm:范数
#	l1:l1范数,这组数据每个元素绝对值之和为1
#   l2:l2范数,这组数据每个元素平方之和为1
nor_samps = sp.normalize(raw_samples, norm='l1')
print(nor_samps)
print(abs(nor_samps).sum(axis=1))

# 手动算的:
nor_samps = raw_samples.copy()
for row in nor_samps:
    row /= abs(row).sum()
print(nor_samps)
print(abs(nor_samps).sum(axis=1))
  1. 二值化
    有些业务并不需要分析矩阵的详细完整数据(比如图像边缘识别只需要分析图像边缘即可),可以根据一个事先给定的阈值,用0和1对特征值进行转换,分别表示不高于或高于阈值。二值化后的数组中每个元素非0即1,达到简化数学模型的目的。
import numpy as np
import sklearn.preprocessing as sp

raw_samples = np.array([
    [17., 100., 4000.],
    [20., 80., 5000.],
    [23., 75., 5500.]])

print(raw_samples)
# 二值化处理
# 给出阈值,获取二值化器
bin = sp.Binarizer(threshold=80)
# 对原始样本矩阵执行二值化预处理操作
bin_samples = bin.transform(raw_samples)
print(bin_samples)
# 自己做:
bin_samples = raw_samples.copy()
bin_samples[bin_samples <= 80] = 0
bin_samples[bin_samples > 80] = 1
print(bin_samples)
  1. 独热编码
    为样本特征的每个值建立一个由一个1与若干个0组成的序列,用该序列对所有的特征值进行编码。
import numpy as np
import sklearn.preprocessing as sp

raw_samples = np.array([
    [17., 100., 4000.],
    [20., 80., 5000.],
    [23., 75., 5500.]])

print(raw_samples)
# 独热编码
# 创建独热编码器对象
# sparse:是否采用紧缩格式
# dtype:数据类型
ohe = sp.OneHotEncoder(sparse=False, dtype=int)
# 对原始样本矩阵进行处理,返回度热编码后的样本矩阵
ohe_samples = ohe.fit_transform(raw_samples)
print(ohe_samples)
# 获取ohe的编码字典
ohe_dict = ohe.fit(raw_samples)
ohe_samples = ohe_dict.transform(raw_samples)
print(ohe_samples)
  1. 标签编码
    根据字符串形式的特征值在特征序列中的位置,为其制定一个数字标签,用于提供给基于数值算法的学习模型。
import numpy as np
import sklearn.preprocessing as sp

raw_samples = np.array([
    'audi', 'ford', 'audi', 'toyota',
    'ford', 'bmw', 'toyota', 'byd',
    'audi'])
# 执行标签编码
# 获取标签编码器
lbe = sp.LabelEncoder()
# 对原始样本矩阵执行标签编码,返回编码完毕后的结果
lbe_samples = lbe.fit_transform(raw_samples)
print(lbe_samples)
# 给出编码矩阵,反向逆推出原始样本矩阵
inv_sampls = lbe.inverse_transform(lbe_samples)
print(inv_sampls)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值