数据挖掘干货总结(三)--分类算法

分类算法

 

本质

给定一个对象X,将其划分到预定义好的某一个类别Yi中的算法

 

分类算法用来解决什么问题

人群分类,新闻分类,query分类,商品分类,网页分类,垃圾邮件过滤,网页排序

 

有哪些分类算法(2~6为扩展

1. Naive Bayesian Mode 朴素贝叶斯模型

最简单的监督学习分类器,这个分类器模型是建立在每一个类别的特征向量服从正态分布的基础上的(据说不满足独立分布,效果也很好),因此也被称为概率分类器。整个分布函数被假设为一个高斯分布,每一类别一组系数。当给定了训练数据,算法将会估计每一个类别的向量均值和方差矩阵,然后根据这些进行预测。

特点:如果没有很多数据,该模型会比很多复杂的模型获得更好的性能,因为复杂的模型用了太多假设,以致产生欠拟合。

2.K Nearest Neighbors(KNN) K近邻

这个算法首先贮藏所有的训练样本,然后通过分析(包括选举,计算加权和等方式)一个新样本周围K个最近邻,然后把新样本标记为在K近邻点中频率最高的类。

这种方法有时候被称作“基于样本的学习”,即为了预测,我们对于给定的输入搜索最近的已知其相应的特征向量。

特点:简单有效,但因为需要存储所有的训练集,占用很大内存,速度比较慢。使用该方法前通常训练集先聚类来降低数据大小。

3. Support Vector Machines(SVM) 支持向量机

SVM是一种基于核函数的方法,它通过某些核函数把特征向量映射到高维空间(一般情况下高维空间上比低维空间上更加线性可分),然后建立一个线性判别函数(或者说是一个高维空间中的能够区分训练数据的最优超平面)。最优解在某种意义上是两类中距离分割面最近的特征向量和分割面的距离最大化。离分割面最近的特征向量被称为支持向量,意即其它向量不影响分割面(决策函数)。

注:

特点:当数据集合比较小的时候,支持向量机的效果常常最好。对于核来说,不仅仅只存在于 SVM 内,对于任意的算法,只要计算时出现了内积的,都可以用核函数替代,从而提高在高维数据上的性能。

4. Decision Trees 决策树

决策树是一个二叉树。当每个叶节点用类别标识(多个叶子可能有相同的标识)时,它可以表示分类树;当每个叶节点被分配了一个常量(所以回归函数是分段常量)时,决策树就成了回归树。决策树是从根结点递归构造的。用所有的训练数据(特征向量和对应的响应)来在根结点处进行分裂。在每个结点处,优化准则(比如最优分裂)是基于一些基本原则来确定的(比如ML中的“纯度purity”原则被用来进行分类,方差之和用来进行回归)。所有的数据根据初始和替代分裂点来划分给左右子结点(就像在预测算法里做的一样)。然后算法回归的继续分裂左右子结点。在以下情况下算法可能会在某个结点停止:

a) 树的深度达到了指定的最大值

b) 在该结点训练样本的数目少于指定值,比如,没有统计意义上的集合来进一步进行结点分裂了。

c) 在该结点所有的样本属于同一类(或者,如果是回归的话,变化已经非常小了)

d) 跟随机选择相比,能选择到的最好的分裂已经基本没有什么有意义的改进了。

决策树自身的优点:

a) 计算简单,易于理解;

b) 适应不同的数据类型(包括类别数据,数值数据,未归一化的和混合的数据);

c) 比较适合处理有缺失属性的样本;

d) 通过分裂的顺序给数据特征赋不同的重要性;

e) 能够处理不相关的特征;

f) 在相对短的时间内能够对大型数据源做出可行且结果良好的结果;

g) 决策树构成了其他算法的基础(如boosting和随机数)。

决策树的缺点:

a) 容易发生过拟合(随即森林可以很大程度上减少过拟合);

b) 忽略了数据之间的相关性;

c) 对于那些,各类别样本数量不一致的数据,在决策树中,信息增益的结果偏向于那些具有更多数值的特征(只要使用了信息增益,都有这个特点,如RF)

5. Boosting

Boosting 是个非常强大的学习方法, 它也是一个监督的分类学习方法。它组合许多“弱”分类器来产生一个强大的分类器组。一个弱分类器的性能只是比随机选择好一点,因此它可以被设计的非常简单并且不会有太大的计算花费。将很多弱分类器结合起来组成一个集成的强分类器。boosting分类器和随机森林在内部使用了决策树,所以继承了决策树的很多有用的性质(能够处理混合数据模型、没有归一化的数据、特征丢失)。

AdaBoost算法如下:

1. 给定N样本 (xi,yi) 其中 

2. 初始化权值 

3. 重复 for m = 1,2,…,M:

a) 根据每个训练数据的wi计算。

b) 计算

c) 更新权值并归一化使 Σiwi= 1.

4. 输出分类器

特点:简单,不容易发生过拟合,不用做特征筛选。Boosting算法是一个两类分类器(不像决策树和随机森林)

6. Random Trees 随机森林

随机森林既可以解决回归问题,也可以解决分类问题。随机森林可以通过收集很多树的子节点对各个类别投票,然后选择获得最多投票的类别作为判断结果。通过计算”森林“的所有子节点的值的平均值来解决回归问题。

随机森林建立时的基本子系统也是决策树。在建立决策树时会一直继续下去直到数据纯净。因此,尽管每个树都很好的学习了训练数据,但各个树之间仍有很大不同。我们把这些树放到一起求平均以消除这些不同(因此叫随机森林)。当然,如果所有的树都相同,随机森林也没有很大作用。为了克服这点,随机森林通过在树的建立过程中,随机选择特征子集来使各个树不同。例如,一个目标识别树可以有很多可能的特征:颜色,质地,倾斜度等。树的每个节点可以从这些特征中随机的选择子集,来决定怎样更好地分裂数据。每个后来的节点都获得新的、随机选择的特征子集。

特点:与boosting和决策树相比,随机森林可以使用更少的重要变量,获得最好的预测性能。即我们可以收缩特征集的大小,在不损失性能的前提下减少计算量和内存使用随机森林。

7. Neural Networks 神经网络

神经网络是对非线性可分数据的分类方法。与输入直接相连的称为隐藏层( hidden layer),与输出直接相连的称为输出层(output layer)。

特点:不知道隐藏层计算的东西的意义;有比较多的局部最优值,可以通过多次随机设定初始值然后运行梯度下降算法获得最优值。

 

分类任务解决流程

1. 任务以新闻分类为例

2. 特征表示X={昨日,是,国内,投资,市场……}

3. 特征选择X={国内投资市场……}

4. 模型选择朴素贝叶斯分类器

• P(X):待分类对象自身的概率,可忽略

• P(yi):每个类别的先验概率,如P(军事)

• P(X|yi):每个类别产生该对象的概率

• P(xi|yi):每个类别产生该特征的概率,如P(苹果|科技)

 

5. 训练数据准备

根据最大似然估计(maximum likehood estimation,MLE):

P(yi)=Count(yi)/Count(*)

即:类别为yi的对象在训练数据中出现的次数/训练集样本总数

P(xj|yi)=Count(xj,yi)/Count(yi)

即:特征xj和类别yi在训练数据中同时出现的次数/Count(yi)

6. 模型训练进行预测分类

给定X,依据上面的贝叶斯公式,计算所有的p(yi|X):

• P(军事|X)=P(国内|军事)* P(投资|军事)* P(市场|军事)……P(军事)

• 同理,计算P(科技|X) P(生活|X)

选择概率值最大的yi作为输出

7. 评测

• 准确度 Accuracy:(50+35)/(35+5+10+50)=85%

• 精确率 Precision(y1):50/(50+5)=90.9%

• 召回率 Recall(y1):50/(50+10)=83.3% 

 

 

 

以上.

文章来自于我的【纯干货公众号:bigdata_x】

听说,爱点赞的人运气都不会太差哦

如果有任何意见和建议,也欢迎在下方留言~

 

 


 

 

关注这个公众号,定期会有大数据学习的干货推送给你哦~

 

点击这里查看往期精彩内容:

大数据干货系列(五)--Hive总结

每日三问(1225)

每日三问(1226)

  • 23
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,很高兴为您解答这个问题。 在深度学习中,数据增强是一种常用的技术,它可以通过对原始数据进行变换、裁剪、旋转、翻转等操作,来扩充训练集,从而提高模型的泛化能力和鲁棒性。在图像领域,常用的数据增强方法包括随机裁剪、随机旋转、随机翻转、色域变换等。下面,我将为您介绍如何使用 Python 对图像进行随机数据增强。 1. 随机裁剪 随机裁剪是一种简单而有效的数据增强方法,它可以通过对原始图像进行随机裁剪,来扩充训练集。在 Python 中,我们可以使用 PIL 库中的 Image 模块来实现随机裁剪。 ```python from PIL import Image import random def random_crop(img, crop_size): w, h = img.size left = random.randint(0, w - crop_size) top = random.randint(0, h - crop_size) right = left + crop_size bottom = top + crop_size return img.crop((left, top, right, bottom)) ``` 2. 随机旋转 随机旋转是一种常用的数据增强方法,它可以通过对原始图像进行随机旋转,来扩充训练集。在 Python 中,我们可以使用 PIL 库中的 Image 模块来实现随机旋转。 ```python from PIL import Image import random def random_rotate(img, angle_range): angle = random.uniform(-angle_range, angle_range) return img.rotate(angle) ``` 3. 随机翻转 随机翻转是一种简单而有效的数据增强方法,它可以通过对原始图像进行随机翻转,来扩充训练集。在 Python 中,我们可以使用 PIL 库中的 Image 模块来实现随机翻转。 ```python from PIL import Image import random def random_flip(img, flip_prob): if random.random() < flip_prob: return img.transpose(Image.FLIP_LEFT_RIGHT) return img ``` 4. 色域变换 色域变换是一种常用的数据增强方法,它可以通过对原始图像进行色彩变换,来扩充训练集。在 Python 中,我们可以使用 PIL 库中的 Image 模块来实现色域变换。 ```python from PIL import Image import random def random_color(img, color_range): r, g, b = img.split() r = r.point(lambda i: i + random.randint(-color_range, color_range)) g = g.point(lambda i: i + random.randint(-color_range, color_range)) b = b.point(lambda i: i + random.randint(-color_range, color_range)) return Image.merge('RGB', (r, g, b)) ``` 以上就是使用 Python 进行随机数据增强的一些常用方法,希望对您有所帮助。如果您有任何问题,请随时联系我。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值