前面几篇文章都是从数据分析介绍讲到描述统计分析,其实数据分析还需要使用机器学习的相关知识用来建立不同的分析模型,最终对数据信息进行深入的分析和挖掘。在实际工作当中,我们需要对数据进行特征分析,并且从数据中获取有价值的信息,并且为数据产品的市场服务。对于机器学习这一块,我是从分类算法开始研究的,因此本篇文章着重介绍几种分类算法。由于这些算法都非常经典,网上也有许多博文进行解读,本篇文章避免了从其它博文直接抄袭或转载,全部是我自己理解后总结的。
维基百科给出了机器学习一个被广泛引用的定义:对于某类任务T和性能度量P,如果一个计算机程序在T上以P衡量的性能随着经验E而自我完善,那么我们称这个计算机程序在从经验E学习。我的理解就是,通过计算机程序构建一系列算法模型,然后使用这个模型学习经验,不断完善性能。通常用于分类、回归、聚类、降维、特征提取等。
监督学习是指利用一组已知类别的样本调整分类器的参数,使其达到所要求性能的过程。通常实现过程中给出一个训练数据集,根据数据集不同特征训练出一个函数模型,常用于分类。
通常做法:一个训练集和测试集,将训练集按照一定比例随机分配(8:2/7:3),用多数训练模型,少数检测模型。训练集包括训练的特征以及已经分类的分类标签,测试集则是根据模型预测数据属于哪一个分类标签。
好模型的标准:一个分类模型的优劣可以用代价函数说明,代价函数(cost function)越小,模型表现越好;另需要判断对训练数据是否足够拟合(拟合概念可以通过线性回归——最小二乘法定义)。
监督学习需要注意过拟合和欠拟合。过拟合指在训练数据集表现不错,但是在测试数据集表现很差,通常往往是由于过多的特征,导致模型复杂。
无监督学习是指根据没有类别标签的数据训练样本来解决模式识别中的问题,常用于聚类。
应用:简单,容易理解的一种分类算法,常用于文本分类、垃圾邮件处理,属于监督学习。
原理:基于贝叶斯定理,对于给出的待分类项,求解在待分类项出现的条件下各个类别的概率;也就是已知先验概率,求解在某一条件发生下的后验概率。当出现某一后验项概率为0时,就是说某类别下某个特征没有出现,需要使用Laplace校准。
输入与输出:输入为某个类别发生的概率(先验概率)和某类别下出现某个特征的概率,输出为某特征划分为某个类别的概率(后验概率),根据概率的大小判断是否属于这个类别。
优势劣势:理解、计算简单,易于实现
对小规模数据表现很好,对于大量规模数据表现欠佳
算法朴素地认为各特征之间相互独立、没有影响,因此在处理相关性较大的特征时,表现不好
应用:主要用于离散变量的分类——属于监督学习的一种;一个单独的逻辑回归只能判别两个类——二分类回归,通过一个概率值判断属于哪一个分类。
原理:模型通过定义一个sigmoid S型预测函数,取值范围(0,1)预测不同的分类结果,默认阈值0.5,大于0.5则认为属于分类1,小于0.5认为属于分类2。通过代价函数(cost function)评估预测函数的好坏——使用梯度下降算法能够找到损失函数最小值。
输入与输出:输入一个线性组合,也就是一个带权重的特征组合(自变量),输出结果表征了某个样本属于某类别的概率(即可能性,取值0~1)。
优势劣势:朴素贝叶斯(生成模型)将不同特征处理成为独立不相关的变量,会有一定误差,逻辑回归(判别模型)不管各特征之间是否有联系,可以直接将任何特征组合扔进模型;朴素贝叶斯处理数据规模较小的集合,对于大量数据,逻辑回归更有优势;逻辑回归容易过拟合,分类精度不太高。
解决方案:1)减少特征数量(减少特征会失去一些信息,即使特征选的很好)
人工选择要保留的特征
2)正则化(特征较多时比较有效)
应用:通过训练数据,进行分类。也可以用来作回归。
原理:一种描述对实例分类的树结构,两种节点:内部节点和叶子结点——内部节点表示一个特征或属性,叶子结点表示一个分类。将特征看作一个内部节点,对每个内部节点进行递归分割(两种分割方式:连续性——用>=,<分割,离散型——按类别分割),递归停止条件:每个叶子节点只有一个类型,或者设置节点记录数量低于一个设定的阈值。根据纯度来构建决策树,纯度指节点分割后有最小的分类(例子:“拥有房产”,可以将记录分成了两类,“是”的节点全部都可以偿还债务,非常“纯”,“否”的分支再继续下一个节点分割)。不纯度量化:ID3算法使用信息增益(纯度差)、C4.5算法使用信息增益率、CART算法使用基尼系数,取值越小,不纯度越低,纯度越高,节点更靠近根节点。
决策树步骤:特征选择-决策树生成-剪枝。
优势劣势:容易理解,效率高
可以处理连续型和离散变量,通过不纯度来分割变量
容易过拟合
解决方案:1)裁剪枝叶
2)随机森林
应用:由于决策树可能出现的误差和过拟合问题,使用RF可更好地解决分类和回归问题。
原理:RF算法是将决策树进行Bagging,使用多棵树进行单独预测,最后将这些预测进行组合决定。通常多个弱分类器通过组合可以得到很强的决策效果。
保证每棵树之间的独立性,采用3层随机性:
1、每棵树的数据有放回随机抽样;
2、每棵树的特征也随机抽取,数量通常为sqrt(N)或者log2(N)+1;
3、多个特征进行分割时,随机选择一个进行分割。
优势劣势:解决了过拟合问题,增加稳定性,提升预测精度
可以对数据降维,只选取少量几个重要特征来近似表示原数据——用于特征选择,选择关键特征
可并行,能处理大规模数据
模型过大,需要存储空间大,模型加载时间长
噪声比较大的样本,容易过拟合
应用:可以应用于分类和回归,分类模型通常用做二分类。
原理:基于逻辑回归线性分类,定义在特征空间上的间隔最大的线性分类器,利用间隔最大化求最优分离超平面。定义一个超平面方程,使得其到不同分类数据点的距离最大,即为最优超平面(如图中的实线wTx+b=0)。大多数情况下,数据并不是线性可分的,使用核函数(Kernel)。
核函数思想——由于线性不可分,将数据集映射到高维,变成线性可分。将数据在低维计算,将分类效果表现在高维。
优势劣势:可用于分类和回归
容易解释
计算复杂度低
可以处理小样本,非线性问题;通过处理低维度数据解决高维度问题
原始SVM只擅长解决二分类问题
Original url: Access
Created at: 2018-10-18 11:36:06
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论