前言
我是一名在职爬虫工程师, 经常跟数据打交道, 也对数据产生了兴趣, 感觉近些年的人工智能和机器学习大火, 由此产生了一些兴趣, 想要走机器学习的路子, 借csdn博客来分享我学习的过程经验, 我对python有一定的开发经验, 可能接下来的东西对于新手有点蒙, 我也没有办法, 但是我会尽力去大白话去分析去说明, 阐述我的理解, 希望对看到这篇文章的你有一点学习帮互助, 我的github, 里面有我学习的实战代码,附带一些注释, 我的qq是351469076 ,可以加我一起分享, 一起学习, 好了, 不多说了, 进入主题吧
什么是机器学习?
- 机器学习的主要任务就是分类, 打个比方, 如果让你辨识一种鸟, 你没见过你当然不知道, 你上网搜了才知道是什么鸟, 对于机器来说, 机器也不知道是什么鸟, 但是你给机器一个学习模型(样本集), 你把鸟的相关特征给机器, 机器会把样本集里面最接近你给的鸟的数据对应的类别给你, 这个类别就是你想要知道的鸟的种类, 这个分析的过程就叫做分类, 这些术语下段会告诉你什么意思, 这就是机器学习
机器学习经常说的样本集是什么?
这里面有6行数据, 每一行数据称之为一个样本, 这6行合在一起叫做一个样本集
种属那列,称之为类别, 比如说第一条数据, 体重为1000.1克, 翼展为125cm, 没有脚蹼, 后背颜色为棕色, 这条数据对应的类别为红尾鹫, 红尾鹫就属于标称型, 跟任何数据都没有关系, 下段会讲到数据类型
体重, 翼展, 脚蹼, 后背颜色, (注意没有种属), 前四列数据称为特征, 单独把前四个拿出来叫做特征标签, 特征标签和特征是相互对应的
机器学习分为两种, 这两种的区别是
- 监督学习: 给定样本集和类别, 机器就可以从中推演出每条样本的类别, 这个过程叫做分类
- 非监督学习: 只给定样本集, 依赖于数据的相似性, 把相似的样本划分为一个簇, 不同于分类, 我们在大多数情况下不会预先知道簇的数量和每个簇的具体含义, 比如在大型电子商务网站经常对用户的信息和购买习惯进行聚类分析, 一旦找到数量不菲并且背景相似客户群, 便可以针对他们的兴趣投放广告和促销信息
监督学习使用两种数据类型
- 标称型: 数据与数据之间毫无关联, 比如天气, 动物分类, 真与假, 样本集里有提到, 标称型通常用于分类
- 数值型(连续型): 比如一支股票的价格为30元, 它不可能一下涨到100元, 也不可能一下跌到5元, 每次只会涨一点点或跌一点点,像股票这样有一定规律的数据就可以称为数值型, 房价也可以称之为数值型, 数值型通常用于回归
测试算法
估计算法的错误率, 需要拿10%的样本集当做测试数据, 测试数据应该随机抽取, 剩余的当做训练数据, 计算分类之后的类别是否是正确类别, 错误率=分类器给出错误的结果/测试执行的次数
如何选择合适的算法?
解决一个问题, 可能有多个算法可用, 但是必须考虑两个问题
使用机器学习算法的目的, 想要算法完成何种任务, 比如预测明天下雨的概率或是对投票者按兴趣分组
需要分析或收集的数据是什么
- 想要预测类别, 可以选择监督学习, 反之非监督学习
- 看数据类型是什么样的, 标称型选择分类, 数值型选择回归
- 当然分类和回归也不是一成不变的, 分类也可以处理回归问题, 看具体需求
- 考虑数据问题, 应该充分了解数据, 对实际数据了解的越充分, 越容易创建符合实际需求的应用程序
- 数据类型是什么样的?
- 特征值是否有缺失值
- 何种原因造成缺失值
- 数据是否有异常值
- 某个特征发生的频率如何(是否罕见)
充分了解上面提到的数据特性可以缩短选择机器学习算法的时间
只能在一定程度上缩小算法的选择范围, 没有最好的算法或最好结果的算法, 还要尝试不同算法的执行效果, 对于每种算法都可以使用其他的机器学习算法技术来改变其性能, 在处理数据之后, 两个算法的相对性能也可能发生变化, 一般来说发现最好的算法的关键环节是反复是错的迭代过程
开发机器学习应用程序的步骤
- 收集数据
- 爬虫爬取信息, 从rss反馈或者api中得到信息, 设备发送过来的实测数据(风速, 血糖), 也可以使用公开可用的数据源
- 准备输入数据
- 得到数据之后, 还要确保数据格式符合要求, 最好是python的内置的list, 使用list可以融合算法和数据源,方便匹配操作
- 查看输入数据有无异常
- 是否有缺失值, 是否有明显的异常值, 这一步确保没有垃圾数据, 此步骤需要人工干涉, 如果信任数据来源, 可以跳过这一步
- 训练算法(机器学习算法核心)
- 将输入数据输入到算法, 抽取信息
- 如果是非监督学习, 直接跳到5
- 测试算法(机器学习算法核心)
- 使用步骤4里面的信息, 评估算法, 必须测试算法的错误率
- 使用算法
- 将机器学习算法转换为应用程序, 执行实际任务, 检验是否可以在实际环境中正常工作, 如果碰到新问题, 重复以上步骤
代码里面的numpy库的一些用法,会出现在另一篇numpy文章里, 不用全看, 有需要的时候就看就行
最好也了解一下向量的概念