杂记

1.请详细介绍一下朴素贝叶斯分类器


2.朴素贝叶斯为什么朴素:
因为它假设所有的条件特征相互独立


3.什么是深度学习?深度学习和机器学习的区别是什么?
任何通过数据训练的学习算法的相关研究都属于机器学习,深度学习是机器学习的一种。
深度神经网络能够捕捉到数据中的深层联系,从而能够得到更精准的模型,而这些联系不容易被普通的机器学习方法所发觉


4.在无监督学习中,如何进行文件聚类?
https://blog.csdn.net/wangran51/article/details/7382258
https://blog.csdn.net/xiaoxik/article/details/78742308


k-means 算法的工作过程说明如下:首先从n个 数据对象任意选择 k 个对象作为初始聚类中心;而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类;然 后再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值);不断重复这一过程直到标准测度函数开始收敛为止。一般都采用均方差作为标准测度函数. k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。


处理流程:


( 1 ) 从 c 个 数据对象任意选择 k 个 对象作为初始聚类中心; 
( 2 ) 循 环( 3 ) 到( 4 ) 直到每个聚类不再发生变化为止; 
( 3 ) 根 据每个聚类对象的均值(中心对象),计算每个对象与这些中心对象的距离;并根据最小距离重新对相应对象进行划分; 
( 4 ) 重 新计算每个(有变化)聚类的均值(中心对象)


到这里这个文本聚类的小程序的核心思想就讲完了,总的来说大致步骤如 下:                                           


(1)对各个文本分词,去除停用词


(2)通过TF-IDF方法获得文本向量的权值(每个文本向量的维数是 相同的,是所有文本单词的数目,这些单词如果有重复那只算一次,所以如果文本越多,向量的维数将会越大)


(3)通过K-means算法对文本进行分类


如何找到与某些查询语句/搜索相关的文件?
https://blog.csdn.net/wangyangzhizhou/article/details/68947519


解释下TF-IDF技术
TF-IDF倾向于过滤掉常见的词语,保留重要的词语,如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
TF-IDF是一种统计方法,用以评估某一字词对于一个文件集或一个语料库中的其中一份文件的重要程度
根据我的经验来看,TF-IDF技术在文件分类或聚类上效果并不好,你将如何改进
https://blog.csdn.net/fyfmfof/article/details/44034401
不足:
1、没有考虑特征词的位置因素对文本的区分度,词条出现在文档的不同位置时,对区分度的贡献大小是不一样的。


2、按照传统TF-IDF函数标准,往往一些生僻词的IDF(反文档频率)会比较高、因此这些生僻词常会被误认为是文档关键词。(换句话说,如果一个特征项只在某一个类别中的个别文本中大量出现,在类内的其他大部分文本中出现的很少,那么不排除这些个别文本是这个类中的特例情况,因此这样的特征项不具有代表性。)


3、传统TF-IDF函数中的IDF部分只考虑了特征词与它出现的文本数之间的关系,而忽略了特征项在一个类别中不同的类别间的分布情况。


4、对于文档中出现次数较少的重要人名、地名信息提取效果不佳。
三、TF-IDF的改进


1、TF部分的改进


这里考虑将文档内的词频率更改为同一类文档内的词频率可以在一定程度上解决上面提到的第2项不足之处。


2、IDF部分的改进


传统的IDF通常可以写作:IDF=log(总文档数N/所有含特征词文档数n+0.01)


在我查阅的所有论文中都提到了上面的第3项不足,这是TF-IDF应用于分类问题上的一个很明显的不足,针对这个不足,这些论文中也提到了不同的解决方法:


①IDF=log(本类含特征词文档数m*总文档数N/所有含特征词文档数n+0.01)


②用P(Mk)表示特征词Mk在当前类别中的频率,P(Mk)’表示特征词Mk在其他类别中的频率,对IDF计算改进如下:P(Mk)/P(Mk)+ P(Mk)’


http://blog.sina.com.cn/s/blog_617c80460100vexs.html


什么是可变/不可变对象
不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。
可变对象,该对象所指向的内存中的值可以被改变。变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址,通俗点说就是原地改变。
Python中,数值类型(int和float)、字符串str、元组tuple都是不可变类型。而列表list、字典dict、集合set是可变类型。


还是看代码比较直观。先看不可变对象


不平衡数据集( unbalanced dataset)处理多类别的分类问题
1.扩充数据 2. 给数据权重 3.改变评价指标 4.用树模型的方法
评价标准
https://www.cnblogs.com/zhaokui/p/ml-metric.html
1-每个标签占总数的比例的平方和  整个分类结果的Gini不纯度就是D1/D与0的乘积 加上 D2/D与0.32的乘积,为0.16
PCA学习一种现行投影,使最大方差的方向和新空间的轴对齐。(左)原始数据包含了x的样本。在这个空间中,方差的方向与轴的方向并不是对齐的。(右)变换过的数据z=xTW在轴z1的方向上游最大的变化。第二大变化方差的防线沿着z2.


如何定义K-Means聚类算法中K的值
数据的先验知识,或者数据进行简单分析能得到
基于变化的算法:即定义一个函数,随着K的改变,认为在正确的K时会产生极值。如Gap Statistic(Estimating the number of clusters in a data set via the gap statistic, Tibshirani, Walther, and Hastie 2001),Jump Statistic (finding the number of clusters in a data set, Sugar and James 2003)基于结构的算法:即比较类内距离、类间距离以确定K。这个也是最常用的办法,如使用平均轮廓系数,越趋近1聚类效果越好;如计算类内距离/类间距离,值越小越好;等。
基于一致性矩阵的算法:即认为在正确的K时,不同次聚类的结果会更加相似,以此确定K。
基于层次聚类:即基于合并或分裂的思想,在一定情况下停止从而获得K。
基于采样的算法:即对样本采样,分别做聚类;根据这些结果的相似性确定K。如,将样本分为训练与测试样本;对训练样本训练分类器,用于预测测试样本类别,并与聚类的类别比较


k-means算法优缺点
K-means聚类方法总结
         优点:


                   是解决聚类问题的一种经典算法,简单、快速


                   对处理大数据集,该算法保持可伸缩性和高效率


                   当簇近似为高斯分布时,它的效果较好


         缺点:


                   在簇的平均值可被定义的情况下才能使用,可能不适用于某些应用


                   必须事先给出k(要生成的簇的数目),而且对初值敏感,对于不同的初始值,可能会导致不同结果。


                   不适合于发现非凸形状的簇或者大小差别很大的簇


                   对躁声和孤立点数据敏感


         可作为其他聚类方法的基础算法,如谱聚类。
 
BN BN算法流程
第一步 进行归一化,第二步设置了两个可学习的变量γ和β,然后用这两个可学习的变量去还原上一层应该学到的数据分布


那么什么是covariance shift问题?在输入层上,如果一部分样本的分布与另一部分样本显著分布不同:[0,1] vs [10,100]对于一个浅层模型而言,训练第一组样本时,模型可能在描绘函数A训练第二组样本时,模型发现自己在描绘函数B,完全不同于A这样就是推翻自己重复劳动,训练低效输入层的这种情况,对于其他层而言,也是一样,无法逃避如果遇到前层neurons或本层的weights值特别大可能导致本层output neurons中某些neurons值要远大于其他neurons的值导致一部分neurons的分布与其他neurons的分布大幅偏离这样就出现了本层的covariance shift的情况看看原论文里是怎么说的(见下图)Covariance shift由于parameters发生变化,导致本层的activation发生变化当每层activation的分布都不相同或者差异较大时,训练效率会很低下因此,解决方案就是同一每一层的activations的分布


Batch Normalization如何解决covariance shift的问题?既然是分布不同导致的问题,那就同一所有层的neurons值的分布于是,就有了normalization: mean = 0, variance = 1但是为什么需要  ?mean= 0, variance=1, 是一个好的规范在上述框架不变下,稍微增加一点灵活性(可能够灵活放缩和平移分布),可能会让模型训练的效率更高我们看看论文里是怎么说的?(原文见下图)因为normalization会导致新的分布丧失从前层传递过来的特征与知识以sigmoid作为激活函数的层为例,normalize后的分布,会导致无法有效利用sigmoid的非线性功能加入了  的放缩和平移的能力,是为了让新生成的分布,能够利用好接下来的激活函数的非线性功能


关于为什么Batch Normalization 有了normalization, 即mean = 0, variance=1,还不够,为什么要有  ?因为  能够锦上添花,更好解决normalization希望解决的covariance shift的问题。如何理解“因为  能够锦上添花”?  = rescale 和 shiftnormalization 能够让所有layer output distributions 都固定在mean=0, variance=1的特定区域(可以缓解covariance shift problem)但在特定区域的大体框架下,如果可以在垂直方向上有一定程度的放大缩小的自由度(rescale),在水平方向上有一定的移动的自由度(shift)那么,也许所有layer output distributions能够做到更好的相似与稳定(当然,具体值不会相同)从而进一步缓解covariance shift 的问题关于  是如何学习的? 和其他的parameters 一样,在训练中通过反向传递来更新自己


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值