学习数据挖掘算法也有一段时间了, 某天小伙伴问我, 你学的这个跟我们之前学校学的数据结构算法有什么区别吗. 我很快回答: 当然有区别啊. 其实过后细想, 究竟有啥区别. 就是因为这个问题, 才有了今天这篇文章.
那么在我们开始前, 可以先暂停阅读一分钟, 回忆下已了解数据结构的算法还有数据挖掘算法, 思考下这两种算法有区别吗.
下面我们称数据结构算法为经典算法.
首先我们来看看算法是什么
看看维基百科的定义
算法 (algorithm), 在数学(算学) 和计算机科学之中, 为任何良定义的具体计算步骤的一个序列, 常用于计算, 数据处理和自动推理. 精确而言, 算法是一个表示为有限长列表的有效方法.
好吧有点拗口, 解释成大白话就是:
是解决问题的一系列步骤.
经典算法是什么
是对存储的数据进行处理, 最终得到问题的答案.
再翻译成大白话就是
是对确定的数据 使用如数组, 链表, 队列, 图等一系列存储结构进行存储, 通过优化时间复杂度以及空间复杂度提高效率来对数据进行处理, 得出问题答案的过程.
下面是一些重要的经典算法类别
搜索, 排序, 插入, 更新.
常见的经典算法有
分治法, 动态规划法, 贪心算法等.
下面我们看下例子, 加深理解.
例如, 对已知的一组乱序的数字进行排序. 又或者如果一个数组包含多个重复元素, 如何找到这些重复的数字?
像上面的问题我们就可以运用选择我们熟悉的排序算法进行排序. 对于第二个问题可以运用哈希表这种数据结构进行存储, 然后遍历统计元素出现次数得出我们问题的答案.
我们可以发现, 经典算法主要针对确定的数据进行合适的存储处理, 并通过增删改查一系列操作后达到一个比较确定的结果, 不存在不确定成分. 同时非常注重效率.
数据挖掘算法是什么
数据挖掘算法是一类从数据中运用数学工具自动分析获得规律, 并利用规律对未知数据进行预测的算法, 注重数据来源以及数据规律.
一般分为三类: 监督学习( Supervised Learning ), 非监督学习( Unsupervised Learning ), 还有强化学习( Reinforcenment Learning ). 比较常见的数据挖掘算法有 KNN 算法, 决策树, 贝叶斯, 线性回归, 支持向量机, 神经网络等等
下面我们看下例子, 加深理解.
例如根据已有的房价信息预测某一楼盘的房价; 或者给某部电影分类
像上面的问题我们可以运用线性回归方法对房价进行预测. 可以根据电影特征使用 KNN 或者决策树等分类算法进行分类.
我们可以发现数据挖掘算法要解决的问题一般是没有精确解的, 并侧重于从已有数据里面挖掘出未知的知识. 像上面的例子, 我们一开始并不知道房价 具体是有哪些影响因素, 电影分类有哪些影响特性, 全都是算法依据统计原理, 数据规律自己在'学习'中得出的, 而且最后得出的结果也不一定确定
下面我们从不同角度再具体比较两种算法
从目的做比较
经典算法: 对确定的数据进行显而易见的操作, 并注重效率(时间复杂度和空间复杂度). 例如排序.
数据挖掘算法: 建立一个模式, 学会对未知的数据进行预测或者分类.
从应用数学的深度以及广度做比较
经典算法: 初等数学; 简单概率论, 简单离散数学.
数据挖掘: 高等数学; 概率论, 线性代数, 数理统计, 微积分, 运筹学, 信息论, 最优化方法.
从评价标准做比较
经典算法: 执行效率; 时间复杂度, 空间复杂度.
数据挖掘: 准确率; 泛化能力, 经验风险, 结构风险. 例如正确率, 召回率.
从解决问题的种类做比较
经典算法: 解决传统 CS 领域问题; 对数据进行组织并进行'CURD'操作.
数据挖掘: 预测, 分类等未知问题; 研究数据内在的规律.
举个通俗的例子, 比如你要去某个风景区, 经典算法可以跟你说怎么走最快, 数据挖掘算法告诉你在那个风景区哪个地方可能最好玩.
总结
区分它们二者是为了让我们更好得运用它们解决问题. 实际操作上, 运用数据挖掘算法时会大量应用经典算法来提升计算效率.
算法的核心是创建问题抽象的模型和明确求解目标, 之后可以根据具体的问题选择不同的模式和方法完成算法的设计. 而经典算法和数据挖掘算法就是运用了不同的模式和方法去解决不同的问题而已, 各司其职.
所以最后我们可以得出, 经典算法和数据挖掘算法本质都是算法, 但是运用的底层逻辑以及解决的问题的种类不一样. 不同的时代有不同的问题要解决, 没有高低之分, 没有说哪个更重要哪个更不重要的说法.
本文首发微信公众号 "哈尔的数据城堡".
来源: https://www.cnblogs.com/Alear/p/10840230.html