机器学习实战 ——《跟着迪哥学Python数据分析与机器学习实战》(2)
- 七、贝叶斯算法
- 7.1 新闻分类任务实战
- 7.1.1 结巴分词
- 7.1.2 词云表示工具包wordcloud
- 7.1.3 TF-IDF特征
- 八、聚类算法
- K-means K-均值聚类算法
- 评估指标
- 优缺点
- DBSCAN(Density-Based Spatial Clustering of Applications with Noise)基于密度的聚类算法
- 优缺点
接上文《机器学习技术栈 ——《跟着迪哥学Python数据分析与机器学习实战》(1)》
七、贝叶斯算法
关于贝叶斯算法,有太多文章讲的比我好,我不赘述,此处只放上我的一个总结,方便我之后索引记忆:《机器学习技术栈—— 概率学基础》,欲了解更多贝叶斯算法内容,请移步他处。
7.1 新闻分类任务实战
朴素贝叶斯(Native Bayes):假设变量之间是独立的。Naive Bayes classifier - wiki
用朴素贝叶斯方法,分辨垃圾邮件,但我发现下载下来的代码文件并没有包含数据集,所以我只看代码运行结果,没有去实际跑一边。
7.1.1 结巴分词
pip install jieba
用以下代码可以做到分词
content_S = []
for line in content:current_segment = jieba.lcut(line) #对每一篇文章进行分词, lcut = letter cutif len(current_segment) > 1 and current_segment != '\r\n': #换行符content_S.append(current_segment) #保存分词的结果
7.1.2 词云表示工具包wordcloud
word cloud offical website
7.1.3 TF-IDF特征
经过清洗之后,剩下的都是稍微有价值的词,但是这些词的重要程度不一定相同,可以这样定义重要程度
(1)如果一个词在整个语料库中(可以当作是在所有文章中)出现的次数都很高(这篇文章有它,另一篇还有这个词),那么这个词的重要程度就不高,因为它更像一个通用词
(2)如果另一个词在整体的语料库中的词频很低,但是在这一篇文章中却大量出现,就有理由认为它在这篇文章中很重要
T F − I D F = 词 频 ( T F ) ∗ 逆 文 档 频 率 ( I D F ) TF-IDF = 词频(TF)*逆文档频率(IDF) TF−IDF=词频(TF)∗逆文档频率(IDF)
词 频 ( T F ) = 某 个 词 在 文 章 中 出 现 的 次 数 文 章 的 总 词 数 词频(TF) = \frac{某个词在文章中出现的次数}{文章的总词数} 词频(TF)=文章的总词数某个词在文章中出现的次数
逆 文 档 频 率 ( I D F ) = l o g ( 语 料 库 的 文 档 总 数 包 含 该 词 的 文 档 数 + 1 ) 逆文档频率(IDF) = log(\frac{语料库的文档总数}{包含该词的文档数+1}) 逆文档频率(IDF)=log(包含该词的文档数+1语料库的文档总数)
看 I D F IDF IDF,包含该词的文档数越少,就会导致分母减小,从而导致 I D F IDF IDF增大,说明出现了该词的文档非常重要,加1是为了防止分母为0。
八、聚类算法
聚类算法是一种典型的无监督学习算法,但要说这是完全的无监督,似乎也不成立,因为还得首先知道“人以类聚,物以群分”的朴素道理,不知道这个道理,也无法推导出聚类算法。
人类的无师自通式的无监督,是先从劳动中总结归纳出文字符号系统,即,从最原始的物与物的相互作用,A作用于B,归纳出“名词-动词-名词”体系,然后再有各种副词,形容词去丰富这个体系,一个语言系统中,最原始的部分应该就是简单句,比如说“我爱你”,就符合“名词-动词-名词”体系,然后有了这套文字符号系统后,再表达出早已观察到的“人以类聚,物以群分”。
但是计算机的无监督,是先有了“人以类聚,物以群分”这套算法,然后再进行聚类分析,要学会如何学习,涉及到的领域是元学习(Meta Learning),这张图表示的很清楚
Meta learning参考文章 |
---|
Meta-learning - wiki |
《Meta Learning 简介》- 知乎 |
K-means K-均值聚类算法
评估指标
轮廓系数(Silhouette Coefficient)是聚类效果好坏的一种评价方式,也是最常用的评估方法。
Silhouette Coefficient参考文章 |
---|
《聚类效果评估指标总结》 |
Silhouette - wiki |
优缺点
优点 | 缺点 |
---|---|
1.快速、简单,概括来说就是很通用的算法。 | 1.在K-means算法中,K是事先给定的,这个K值是非常难以估计的。很多时候,事先并不知道给定的数据集应该分成多少个类别才合适。《kmeans算法的k值选择》 |
2.聚类效果通常还是不错的,可以自己指定划分的类别数。 | 2.初始质心点的选择有待改进,可能会出现不同的结果。 |
3.可解释性较强,每一步做了什么都在掌控之中。 | 3.在球形簇上表现效果非常好,但是其他类型簇中效果一般。 |
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)基于密度的聚类算法
总结:规定好发展的范围 ε \varepsilon ε与规模 M i n P t s MinPts MinPts,各自发展下线,没有符合的目标就停止。遇到无监督问题时,记得这个算法。
优缺点
优点 | 缺点 |
---|---|
1.可以对任意形状的稠密数据集进行聚类,而K-means之类的聚类算法一般只适用于球状数据集 | 1.如果样本集的密度不均匀、聚类间距差相差很大时,聚类效果较差 |
2.非常适合检测任务,寻找离群点 | 2.半径的选择比较难,不同半径的结果差异非常大 |
3.不需要手动指定聚类的堆数,实际中也很难知道大致的堆数 |