python机器学习0基础到入门的心得----基础篇

前言

我是一名在职爬虫工程师, 经常跟数据打交道, 也对数据产生了兴趣, 感觉近些年的人工智能和机器学习大火, 由此产生了一些兴趣, 想要走机器学习的路子, 借****博客来分享我学习的过程经验, 我对python有一定的开发经验, 可能接下来的东西对于新手有点蒙, 我也没有办法, 但是我会尽力去大白话去分析去说明, 阐述我的理解, 希望对看到这篇文章的你有一点学习帮互助, 我的github, 里面有我学习的实战代码,附带一些注释, 我的qq是351469076 ,可以加我一起分享, 一起学习, 好了, 不多说了, 进入主题吧


什么是机器学习?

  1. 机器学习的主要任务就是分类, 打个比方, 如果让你辨识一种鸟, 你没见过你当然不知道, 你上网搜了才知道是什么鸟, 对于机器来说, 机器也不知道是什么鸟, 但是你给机器一个学习模型(样本集), 你把鸟的相关特征给机器, 机器会把样本集里面最接近你给的鸟的数据对应的类别给你, 这个类别就是你想要知道的鸟的种类, 这个分析的过程就叫做分类, 这些术语下段会告诉你什么意思, 这就是机器学习

机器学习经常说的样本集是什么?

python机器学习0基础到入门的心得----基础篇

这里面有6行数据, 每一数据称之为一个样本, 这6行合在一起叫做一个样本集
种属那,称之为类别(目标值), 比如说第一条数据, 体重为1000.1克, 翼展为125cm, 没有脚蹼, 后背颜色为棕色, 这条数据对应的类别为红尾鹫, 红尾鹫就属于标称型, 跟任何数据都没有关系, 下段会讲到数据类型
体重, 翼展, 脚蹼, 后背颜色, (注意没有种属), 前四列数据称为特征, 单独把前四个拿出来叫做特征标签, 特征标签和特征是相互对应的

测试集又是什么?

是为了检测训练集的准确性而从训练集随机抽出来的一部分样本集, 通常在最后上线的时候对模型进行评估


机器学习分为两种, 这两种的区别是

  • 监督学习: 给定样本集和类别, 机器就可以从中推演出每条样本的类别, 这个过程叫做分类
  • 非监督学习: 只给定样本集, 依赖于数据的相似性, 把相似的样本划分为一个簇, 不同于分类, 我们在大多数情况下不会预先知道簇的数量和每个簇的具体含义, 比如在大型电子商务网站经常对用户的信息和购买习惯进行聚类分析, 一旦找到数量不菲并且背景相似客户群, 便可以针对他们的兴趣投放广告和促销信息

监督学习使用两种数据类型

  • 标称型(离散型): 数据与数据之间毫无关联, 比如天气, 动物分类, 真与假, 样本集里有提到, 标称型通常用于分类
  • 数值型(连续型): 比如一支股票的价格为30元, 它不可能一下涨到100元, 也不可能一下跌到5元, 每次只会涨一点点或跌一点点,像股票这样有一定规律的数据就可以称为数值型, 房价也可以称之为数值型, 数值型通常用于回归

fit_transform和transform区别

  • fit_transform: fit找到数据转换规则,并将数据标准化(先计算均值和标准差再转换)
  • transform: 可以直接把转换规则拿来用。所以如果之前没有fit,是不能直接transform的, 两次标准化后的数据格式就不一样了

特征处理

文本抽取(ML库其中的一个类, 叫做 CountVectorizer):

  • 通过词频技术,出现的不重复的单词(省略了单个字母), 如果是中文, 则需要专门的中文分词处理(jieba)
  • Tf*idf(表示了这个词在这个文档里面的重要程度)
    • tf(term frequency): 词的频率
    • idf(逆文档频率): 统计所有文档中的某个词在其他文档中的重要程度, 公式为log(所有次数/当前文档里面的次数

归一化

  • 特征的最大值和最小值的差很大, 容易分类错误结果, 这时候就需要归一化使特征值处于限定的范围之内, 默认区间为[0, 1]
  • python机器学习0基础到入门的心得----基础篇

标准化

  • 特征值大部分处于稳定状态, 而小部分明显呈现异常, 保证每个维度的特征数据方差为1,均值为0,使得预测结果不会被某些维度过大的特征值而主导
  • python机器学习0基础到入门的心得----基础篇

评估算法的准确率

估计算法的错误率, 需要拿10%的训练集当做测试数据, 测试数据应该随机抽取, 剩余的当做训练数据, 计算分类之后的类别是否是正确类别, 错误率=分类器给出错误的结果/测试执行的次数
python机器学习0基础到入门的心得----基础篇

混淆矩阵:

  • python机器学习0基础到入门的心得----基础篇

python机器学习0基础到入门的心得----基础篇

网格搜索与交叉验证

  1. 网格搜索
    1. python机器学习0基础到入门的心得----基础篇
  2. 交叉验证
    1. 为了让模型更加准确可信, 需要手动输入超参数, 比如k近邻算法的k值, 但是手动指定太麻烦, 直接给定超参数列表, 让模型自动的对超参数进行交叉验证, 最佳交叉次数为10折, 交叉完成以后, 取所有折的平均值, 哪个折的成功率最高,就返回哪个超参数

集成学习方法

通过建立几个模型组合来解决单一预测问题, 工作原理是生成多个分类器 / 模型, 各自独立学习和做出预测, 这些预测最后结合成单预测, 因此犹豫任何一个单分来的做出预测, 出名的有决策树组成的随机森林


如何选择合适的算法?

解决一个问题, 可能有多个算法可用, 但是必须考虑两个问题

  1. 使用机器学习算法的目的, 想要算法完成何种任务, 比如预测明天下雨的概率或是对投票者按兴趣分组

  2. 需要分析或收集的数据是什么

    1. 想要预测类别, 可以选择监督学习, 反之非监督学习
    2. 看数据类型是什么样的, 标称型选择分类, 数值型选择回归
    3. 当然分类和回归也不是一成不变的, 分类也可以处理回归问题, 看具体需求
    4. 考虑数据问题, 应该充分了解数据, 对实际数据了解的越充分, 越容易创建符合实际需求的应用程序
      1. 数据类型是什么样的?
      2. 特征值是否有缺失值
      3. 何种原因造成缺失值
      4. 数据是否有异常值
      5. 某个特征发生的频率如何(是否罕见)

充分了解上面提到的数据特性可以缩短选择机器学习算法的时间

只能在一定程度上缩小算法的选择范围, 没有最好的算法或最好结果的算法, 还要尝试不同算法的执行效果, 对于每种算法都可以使用其他的机器学习算法技术来改变其性能, 在处理数据之后, 两个算法的相对性能也可能发生变化, 一般来说发现最好的算法的关键环节是反复是错的迭代过程


开发机器学习应用程序的步骤

  1. 收集数据
    1. 爬虫爬取信息, 从rss反馈或者api中得到信息, 设备发送过来的实测数据(风速, 血糖), 也可以使用公开可用的数据源
  2. 准备输入数据
    1. 得到数据之后, 还要确保数据格式符合要求, 最好是python的内置的list, 使用list可以融合算法和数据源,方便匹配操作
  3. 查看输入数据有无异常
    1. 是否有缺失值, 是否有明显的异常值, 这一步确保没有垃圾数据, 此步骤需要人工干涉, 如果信任数据来源, 可以跳过这一步
  4. 训练算法(机器学习算法核心)
    1. 将输入数据输入到算法, 抽取信息
    2. 如果是非监督学习, 直接跳到5
  5. 测试算法(机器学习算法核心)
    1. 使用步骤4里面的信息, 评估算法, 必须测试算法的错误率
  6. 使用算法
    1. 将机器学习算法转换为应用程序, 执行实际任务, 检验是否可以在实际环境中正常工作, 如果碰到新问题, 重复以上步骤

代码里面的numpy库的一些用法,会出现在另一篇numpy文章里, 不用全看, 有需要的时候就看就行

最好也了解一下向量的概念