机器学习中分类与聚类的本质区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习中分类与聚类的本质区别相关的知识,希望对你有一定的参考价值。
机器学习中分类与聚类的本质区别机器学习中有两类的大问题,一个是分类,一个是聚类。在我们的生活中,我们常常没有过多的去区分这两个概念
参考技术A 机器学习中分类与聚类的本质区别机器学习中有两类的大问题,一个是分类,一个是聚类。
在我们的生活中,我们常常没有过多的去区分这两个概念,觉得聚类就是分类,分类也差不多就是聚类,下面,我们就具体来研究下分类与聚类之间在数据挖掘中本质的区别。
分类
分类有如下几种说法,但表达的意思是相同的。
分类(classification):分类任务就是通过学习得到一个目标函数f,把每个属性集x映射到一个预先定义的类标号y中。
分类是根据一些给定的已知类别标号的样本,训练某种学习机器(即得到某种目标函数),使它能够对未知类别的样本进行分类。这属于supervised learning(监督学习)。
分类:通过学习来得到样本属性与类标号之间的关系。
用自己的话来说,就是我们根据已知的一些样本(包括属性与类标号)来得到分类模型(即得到样本属性与类标号之间的函数),然后通过此目标函数来对只包含属性的样本数据进行分类。
分类算法的局限
分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别与之对应。但是很多时候上述条件得不到满足,尤其是在处理海量数据的时候,如果通过预处理使得数据满足分类算法的要求,则代价非常大,这时候可以考虑使用聚类算法。
聚类
聚类的相关的一些概念如下
而聚类指事先并不知道任何样本的类别标号,希望通过某种算法来把一组未知类别的样本划分成若干类别,聚类的时候,我们并不关心某一类是什么,我们需要实现的目标只是把相似的东西聚到一起,这在机器学习中被称作 unsupervised learning (无监督学习)
通常,人们根据样本间的某种距离或者相似性来定义聚类,即把相似的(或距离近的)样本聚为同一类,而把不相似的(或距离远的)样本归在其他类。
聚类的目标:组内的对象相互之间时相似的(相关的),而不同组中的对象是不同的(不相关的)。组内的相似性越大,组间差别越大,聚类就越好。
分类与聚类的比较
聚类分析是研究如何在没有训练的条件下把样本划分为若干类。
在分类中,对于目标数据库中存在哪些类是知道的,要做的就是将每一条记录分别属于哪一类标记出来。
聚类需要解决的问题是将已给定的若干无标记的模式聚集起来使之成为有意义的聚类,聚类是在预先不知道目标数据库到底有多少类的情况下,希望将所有的记录组成不同的类或者说聚类,并且使得在这种分类情况下,以某种度量(例如:距离)为标准的相似性,在同一聚类之间最小化,而在不同聚类之间最大化。
与分类不同,无监督学习不依赖预先定义的类或带类标记的训练实例,需要由聚类学习算法自动确定标记,而分类学习的实例或数据样本有类别标记。
要说明内容
因为最近在研究者两种算法,也就刚好用来说一下分类和聚类不同的算法。
SVM与二分K均值算法的区别之一:支持向量机(SVM)是一种分类算法,二分k均值算法属于一种聚类算法。
在《数据挖掘导论(完整版)》这本书第306页中有这样一句话:聚类可以看做一种分类,它用类标号创建对象的标记,然而只能从数据导出这些标号。相比之下,前面所说的分类是监督分类(supervisedclassification):即使用有类标号已知的对象开发的模型,对新的、无标记的对象赋予类标号。为此,有时称聚类分析为非监督分类(unsupervised classification)。在数据挖掘中,不附加任何条件使用术语分类时,通常是指监督分类。
因此,SVM与二分K均值算法的区别之一:支持向量机(SVM)是一种监督分类算法,二分k均值算法属于一种非监督分类算法。
机器学习11- 分类与监督学习,朴素贝叶斯分类算法
1.理解分类与监督学习、聚类与无监督学习。
简述分类与聚类的联系与区别。
简述什么是监督学习与无监督学习。
分类与聚类的区别:是否有已知分类的条件。分类没有,聚类有。
监督学习:已知某些类别的情况下,即具有事先标记的数据,通过特征分析来学习的一类算法。
无监督学习:不具有事先标签的数据,缺乏先验知识进行,在未被标记数据中发现一定规律进行的一类算法。
2.朴素贝叶斯分类算法 实例
利用关于心脏病患者的临床历史数据集,建立朴素贝叶斯心脏病分类模型。
有六个分类变量(分类因子):性别,年龄、KILLP评分、饮酒、吸烟、住院天数
目标分类变量疾病:
–心梗
–不稳定性心绞痛
新的实例:–(性别=‘男’,年龄<70, KILLP=‘I‘,饮酒=‘是’,吸烟≈‘是”,住院天数<7)
最可能是哪个疾病?
上传手工演算过程。
|
性别 |
年龄 |
KILLP |
饮酒 |
吸烟 |
住院天数 |
疾病 |
1 |
男 |
>80 |
1 |
是 |
是 |
7-14 |
心梗 |
2 |
女 |
70-80 |
2 |
否 |
是 |
<7 |
心梗 |
3 |
女 |
70-81 |
1 |
否 |
否 |
<7 |
不稳定性心绞痛 |
4 |
女 |
<70 |
1 |
否 |
是 |
>14 |
心梗 |
5 |
男 |
70-80 |
2 |
是 |
是 |
7-14 |
心梗 |
6 |
女 |
>80 |
2 |
否 |
否 |
7-14 |
心梗 |
7 |
男 |
70-80 |
1 |
否 |
否 |
7-14 |
心梗 |
8 |
女 |
70-80 |
2 |
否 |
否 |
7-14 |
心梗 |
9 |
女 |
70-80 |
1 |
否 |
否 |
<7 |
心梗 |
10 |
男 |
<70 |
1 |
否 |
否 |
7-14 |
心梗 |
11 |
女 |
>80 |
3 |
否 |
是 |
<7 |
心梗 |
12 |
女 |
70-80 |
1 |
否 |
是 |
7-14 |
心梗 |
13 |
女 |
>80 |
3 |
否 |
是 |
7-14 |
不稳定性心绞痛 |
14 |
男 |
70-80 |
3 |
是 |
是 |
>14 |
不稳定性心绞痛 |
15 |
女 |
<70 |
3 |
否 |
否 |
<7 |
心梗 |
16 |
男 |
70-80 |
1 |
否 |
否 |
>14 |
心梗 |
17 |
男 |
<70 |
1 |
是 |
是 |
7-14 |
心梗 |
18 |
女 |
70-80 |
1 |
否 |
否 |
>14 |
心梗 |
19 |
男 |
70-80 |
2 |
否 |
否 |
7-14 |
心梗 |
20 |
女 |
<70 |
3 |
否 |
否 |
<7 |
不稳定性心绞痛 |
3.使用朴素贝叶斯模型对iris数据集进行花分类。
尝试使用3种不同类型的朴素贝叶斯:
- 高斯分布型
- 多项式型
- 伯努利型
并使用sklearn.model_selection.cross_val_score(),对各模型进行交叉验证。
1 from sklearn.datasets import load_iris #导入鸢尾花数据 2 from sklearn.naive_bayes import GaussianNB # 高斯分布型 3 from sklearn.naive_bayes import MultinomialNB # 多项式型 4 from sklearn.naive_bayes import BernoulliNB # 伯努利型 5 from sklearn.model_selection import cross_val_score ##交叉验证 6 7 iris = load_iris()# 数据提取 8 9 gnb = GaussianNB() # 建立高斯分布模型 10 mnb = MultinomialNB()# 建立多项式模型 11 bnb = BernoulliNB()# 建立伯努利模型 12 # 分别对模型进行训练 13 gnb_pre = gnb.fit(iris.data, iris.target) 14 mnb_pre = mnb.fit(iris.data, iris.target) 15 bnb_pre = bnb.fit(iris.data, iris.target) 16 # 对数据进行分类预测 17 y_gnb = gnb_pre.predict(iris.data) 18 y_mnb = mnb_pre.predict(iris.data) 19 y_bnb = bnb_pre.predict(iris.data) 20 21 print("GNB预测总数:", iris.data.shape[0]) 22 print("GNB预测正确个数:",(iris.target == y_gnb).sum()) 23 print("MNB预测总数:", iris.data.shape[0]) 24 print("MNB预测正确个数:",(iris.target == y_mnb).sum()) 25 print("BNB预测总数:", iris.data.shape[0]) 26 print("BNB预测正确个数:",(iris.target == y_bnb).sum()) 27 28 # 分别进行交叉验证 29 gnb_scores = cross_val_score(gnb, iris.data, iris.target, cv=10) 30 print("GNB Accuracy:%.6f" % gnb_scores.mean()) 31 mnb_scores = cross_val_score(mnb, iris.data, iris.target, cv=10) 32 print("MNB Accuracy:%.6f" % mnb_scores.mean()) 33 bnb_scores = cross_val_score(bnb, iris.data, iris.target, cv=10) 34 print("BNB Accuracy:%.6f" % bnb_scores.mean())
以上是关于机器学习中分类与聚类的本质区别的主要内容,如果未能解决你的问题,请参考以下文章