信息熵总结
前言学习决策树时会接触到一些信息熵,条件熵和信息增益的知识,此外还有互信息,相对熵,交叉熵和互信息,KL散度等等乱七八糟的知识和名字,我本人已经记得大脑混乱了,还没有全部记住,所以在这里记录一下.
信息熵信息的度量,信息的不确定程度,是乱七八糟熵的基础。吴军大大的数学之美中用了猜球队冠军的方式引出了信息熵的概念。我觉得这种方法印象很深刻,所以在这里提出一下。如果有32支球队,使用二分查找法去猜哪支球队是冠军,如:冠军在1-16号球队内。这样一共需要猜5次就可以找到结果,也就是$log32=5$。但是某些球队的获胜率大一些,所以它的准确信息量的表示应该如下:
$H(X) = - \sum_{x\in X}P(x)logP(x)$
香农称它为信息熵,表示信息的不确定程度。不确定性越大,信息熵也就越大。图1中的$P(x)$表示随机变量$x$的概率,信息熵$H(X)$的取值范围:$0
人工智能名校课程汇总
斯坦福大学大学课程官网
CS229 机器学习 by 吴恩达课程主页:http://cs229.stanford.edu/相关链接:
https://stanford.edu/~shervine/teaching/cs-229/
https://github.com/afshinea/stanford-cs-229-machine-learning
https://github.com/Kivy-CN/Stanford-CS-229-CN
CS231n 深度视觉识别 by 李飞飞课程主页:http://cs231n.stanford.edu/视频地址:https://www.bilibili.com/video/av13260183/课件地址:http://cs231n.stanford.edu/syllabus.html相关链接:
https://zhuanlan.zhihu.com/p/76514213
https://github.com/Burton2000/CS231n-2017
https://github.com/mbadry1/CS231n-2017-Summary
https://zhuanlan.zhihu.com/p/21353567
https://zhuanlan.zhihu.com/p/21941485
CS224n 深度学习自然语言处理 by Manning课程主页:http://web.stanford.edu/class/cs224n相关链接:
https://zhuanlan.zhihu.com/p/59011576 2019版川陀学者学习笔记
https://zhuanlan.zhihu.com/p/38387843 知乎推荐
https://zhuanlan.zhihu.com/p/60992466 2019版资料汇总
https://zhuanlan.zhihu.com/p/68502016 2019版LooperXX学习笔记
https://www.hankcs.com/nlp/cs224n-introduction-to-nlp-and-deep-learning.html 2017版中文翻译+笔记
https://blog.csdn.net/weixin_37251044/article/details/834 ...
CS224n-lecture1 Introduction and Word Vectors
CS224n 深度学习自然语言处理 2019 版 Lecture-1 学习笔记。
这次的课程相比以往没有那么多的介绍,而是简短的介绍了人类语言的作用和特殊之外就开始讲主要课程。所以这里也不说多余的废话,直接进入主题。
Human language and word meaningHow do we represent the meaning of a word?词是自然语言组成的基本单位(汉语体系是以字为基本单位),它表达了最基本的意思,通过不同词的不同排列组合才形成了我们丰富的语言世界。所以想让机器了解自然语言,首先要解决最基本的问题就是要让机器明白词的含义meaning of a word。
WordNet
WordNet是由Princeton 大学的心理学家,语言学家和计算机工程师联合设计的一种基于认知语言学的英语词典。它不是光把单词以字母顺序排列,而且按照单词的意义组成一个“单词的网络”。– 百度百科
说白了$WordNet$是一个网络词典,包含同义词集和上位词(“is a”关系) synonym sets and hypernyms。在$WordNet$中,用一个词的同义词和上位词来表示这个词的意思。
我们可以通过Python库来访问WordNet,看看它具体是什么样子的。
让jupter-notebook使用conda的虚拟环境:conda install nb_conda
通过nltk访问wordnet之前,需要执行nltk.download(‘wordnet’)去下载对应的数据。
from nltk.corpus import wordnet as wn
poses = { 'n':'noun', 'v':'verb', 's':'adj (s)', 'a':'adj', 'r':'adv'}
for synset in wn.synsets("good"):
print("{}: {}".format(poses[synset.pos()],
", ".join([l.name() for l in synset.lemmas()])))
同义词集效果如下:
from nltk.corpus i ...
机器学习 - 线性回归
简介今天要说一下机器学习中大多数书籍第一个讲的(有的可能是KNN)模型-线性回归。说起线性回归,首先要介绍一下机器学习中的两个常见的问题:回归任务和分类任务。那什么是回归任务和分类任务呢?简单的来说,在监督学习中(也就是有标签的数据中),标签值为连续值时是回归任务,标志值是离散值时是分类任务。而线性回归模型就是处理回归任务的最基础的模型。
形式在只有一个变量的情况下,线性回归可以用方程:$y = ax+b$表示。而如果有多个变量,也就是n元线性回归的形式如下:
$h_\theta(x) = \theta_0 + \theta_1x_1 + \theta_2x_2 + \cdots$
$h_\theta(x) = \sum^n_{i=0}{\theta_ix_i} = {\theta^Tx}$
在这里我们将截断$b$用$\theta_0$代替,同时数据集X也需要添加一列1用于与$\theta_0$相乘,表示$+b$。最后写成矩阵的形式就是$\theta$的转置乘以x。其中如果数据集有n个特征,则$\theta$就是$n+1$维的向量并非矩阵,其中包括截断$b$。
目的线性回归的目的就是求解出合适的$\theta$,在一元的情况下拟合出一条直线(多元情况下是平面或者曲面),可以近似的代表各个数据样本的标签值。所以最好的直线要距离各个样本点都很接近,而如何求出这条直线就是本篇文章重点要将的内容。
最小二乘法求解线性回归模型的方法叫做最小二乘法,最小二乘法的核心就是保证所有数据偏差的平方和最小。它的具体形式是:
$J(\theta) = {1\over2}\sum^m_{i=1}(h_\theta(x^{(i)}) - y^{(i)})^2$
其中$h_\theta(x^{(i)})$代表每个样本通过我们模型的预测值,$y^{(i)}$代表每个样本标签的真实值,$m$为样本个数。因为模型预测值和真实值间存在误差$e$,可以写作:
$y^{(i)} = {\theta^Tx^{(i)} + \epsilon^{(i)}}$
根据中心极限定理,$e^{(i)}$是独立同分布的(IID),服从均值为0,方差为某定值$σ$的平方的正太分布。具体推导过程如下:
求解最小二乘法我们要求得就是当$\theta$取某个值时使$J(\theta)$最小,求解最 ...
机器学习 - Logistic回归
简介Logistic回归是机器学习中最常用最经典的分类方法之一,有的人称为逻辑回归或逻辑斯蒂回归。虽然它称为回归模型,但是却处理的是分类问题,这主要是因为它的本质是一个线性模型加上一个映射函数sigmoid,将线性模型得到的连续结果映射到离散型上。它常用于二分类问题,在多分类问题的推广叫做softmax。
Logisitc回归由于Logistic回归是将线性模型的输出$ \theta x+b$经过$f(z)$数处理后,映射到离散值上形成分类问题,所以我们可以假设分类值$y={0,1}$,所以Logistic回归模型可以写成:$h(x)=f(θx+b) $,也就是当$ \theta x+b$的值大于0时$h(x)=+1$,当$θx+b$的值小于0时$h(x)=-1$。但是这样的$f(z)$函数称为单位阶跃函数,但是它的数学性质不好,不连续也不方便求导,所以我们使用它的替代函数sigmoid函数也叫s型函数,我们用$g(x)$表示。这样线性模型的输出经过sigmoid的映射就变成了求出样本属于哪一类别的概率,即$θx+b>0$的话,那么样本属于分类1的概率大一点,如果$θx+b<0$的话就是样本属于1的概率小属于类别0的概率大一些。图1是单位阶跃函数(红线)与sigmoid函数(黑线)。
sigmoid的函数表达式为:
$y={1\over1+e^{-z}}$
其中z在Logistic回归中就是$θx+b$。那么为什么要用sigmoid函数呢?
Sigmoid函数从概率的角度看Logistic回归,如果将样本分为正类的概率看成$h(x)$,那么分为负类的概率就是$1-h(x)$,则Logistic回归模型的概率表达式符合$0-1$分布:
$P(y=1|x;θ) = h_θ(x)$
$P(y=0|x;θ) = 1 - h_θ(x)$
对上式结合就是Logistic回归的概率分布函数,也就是从概率角度的目标函数:
$P(y|x;θ) = (h_θ(x))^y(1 - h_θ(x))^{1-y}$
我们对该式进行变换,可以得到指数族分布,最后可以得出函数$h(x)$就是sigmoid函数。以下是推导过程:
其中图2中的p是图4中的$h(x)$,而图2的z是线性模型的输出$θx+b$。这样从指数族分布就可以推出si ...
压缩数据
压缩数据的原因主要有两点:节省保存信息所需的空间和节省传输信息所需的时间。我们将学习的算法之所以能够节省空间,是因为大多数数据文件都有很大的冗余。
我们将会讨论广泛应用的一种初级算法和两种高级算法。这些算法的压缩效果可能不同,取决于输入的特征。文本数据一般能节省 20% ~ 50% 的空间,某些情况下能够达到 50% ~ 90%。
本文提到的性能(对于数据压缩),性能指代的是算法的压缩率,也会考虑压缩用时。
基础模型数据压缩的基础模型主要由两部分组成,两者都是一个能读写比特流的黑盒子:
压缩盒:能够将一个比特流B转化为压缩后的版本C(B)。
展开盒:能够将C(B)转化回B。
如果使用|B|表示比特流中比特的数量的话,我们感兴趣的是将|C(B)|/|B|最小化,这个值被称为压缩率。
待添加图片
这种模型叫做无损压缩模型-保证不丢失任何信息,即压缩和展开之后的比特流必须和原始的比特流完全相同。许多种类型的文件都会使用无损压缩, 如果数值数据或者可执行代码。对于某些类型的文件,如图像视频和音乐,有损压缩也是能接受的。此时解释器产生的输出只是与原输入的文件近似。有损压缩算法的评价标准不仅是压缩率,还包括主管的质量感受。
压缩的局限通用数据压缩通用性的数据压缩算法是指一个能够缩小任意比特流的算法。但是这样的算法是不存在的:
反证法
假设存在通用压缩算法,那么说明可以用它压缩它自己的输出,从而得到一个更短的比特流,循环直到比特流的长度为0,显然是错误的。
统计法
后续讲解
根据统计法可以得出,对于任意数据压缩算法,将长度1000位的随机比特流压缩为一半的概率最多为$1/2^{500}$
不可判定性
压缩一个文件最好的办法就是找出创造这些数据的程序。
可以证明最优数据压缩(找到能够产生给定字符串的最短程序)是一个不可能判定的问题:我们不但不可能找到能够压缩任意比特流的算法,也不可能找到最佳的压缩算法。
这些局限性所带来的实际影响要求无损压缩算法必须尽量利用被压缩的数据流中的已知结构:
小规模的字母表
较长的连续相同的位或字符
频繁使用的字符
较长的连续重复的位或字符
游程编码霍夫曼压缩LZW压缩算法
《Machine Learning Yearning》阅读笔记
机器学习为什么需要策略如何使用这本书帮助你的团队先决条件和符号规模驱动机器学习进程你的开发集和测试集开发集合和测试集合应该来自统一分布开发集合和测试集合应该有多大规模建立一个单值评估指标去优化优化指标和满意指标通过开发集和度量指标快速迭代什么时候修改开发集,测试集和评价指标?小结:建立开发集和测试集快速构建并且迭代你的第一个系统
误差分析:根据开发集样本去验证想法
在误差分析时并行评估多个想法
清洗误标注的开发集和测试集样本
将大型的开发集拆分为两个子集,专注其一
Eyeball 和 Blackbox 开发集该设置多大?
如何选择职业 - 一个美国高级工程师的建议
今天看到一篇博客,是讲述了一个美国高级工程师如何选择职业的,感觉很有道理,于是摘抄过来。原文地址
停滞发展、或者缓慢发展的公司,完全是一个零和游戏。
如果你想晋升,必须等别人把位置空出来。你得到的,一定是其他人失去的。相比之下,快速发展的公司有源源不断的新人加入,最终每个人都会得到晋升!
最重要的是,业务的发展比人员增长快,所以你会被“往上拉”,拉到更高层的岗位。
作者原来是一个外行,但是通过努力,进入了一家机器学习公司,现在发展得很好。他从自己的经历,得出一个观点: 就业要选择发展最快的行业。
作者以自己为例,他并没有机器学习背景,但是公司发展得太快,他需要组建团队,自然就成了团队管理者,环境把他“拉”到了更高的位置上。位阶高了,就有了更多的机会和资源。
这让我想起自己呆过的一所大学,每年学校就那么几个名额,可以晋升教授和副教授,大家挤破头,如果今年评不上,就要至少再等一年。有的老师熬到头发白了,才评上副高职称。这就是发展缓慢的结果。去了这种地方,真是消耗生命。
那篇文章还提到了另外一点,我也很赞同。他说,就业的目的是为自己积累两种资本:人力资本(增长能力)和金融资本(多赚钱)。对于年轻人来说,人力资本更重要。 就业时,年轻人的关注重点应该是,快速增长自己的人力资本。 因为长期来看,在你的一生中,人力资本会比金融资本带来更大的回报。
最快速形成人力资本的方法,就是去聪明人多的地方,从比你更聪明的人身上学习。跟高手在一起工作,你会成长得非常快。大公司虽然高手很多,但是你接触不到也没用。 在一个快速发展的行业里面,加入一群聪明人组成的小团队,可能是事业成功的最佳方式。
NLP系列 - 基于词典的中文分词
中文分词概述词是最小的能够独立活动的有意义的语言成分,一般分词是自然语言处理的第一项核心技术。英文中每个句子都将词用空格或标点符号分隔开来,而在中文中很难对词的边界进行界定,难以将词划分出来。在汉语中,虽然是以字为最小单位,但是一篇文章的语义表达却仍然是以词来划分的。因此处理中文文本时,需要进行分词处理,将句子转为词的表示,这就是中文分词。
中文分词的三个难题分词规则,消除歧义和未登录词识别:
构建完美的分词规则便可以将所有的句子正确的划分,但是这根本无法实现,语言是长期发展自然而然形成的,而且语言规则庞大复杂,很难做出完美的分词规则。
在中文句子中,很多词是由歧义性的,在一句话也可能有多种分词方法。比如:”结婚/的/和尚/未结婚/的“,“结婚/的/和/尚未/结婚/的”,人分辨这样的句子都是问题,更何况是机器。
此外对于未登陆词,很难对其进行正确的划分。
目前主流分词方法基于规则,基于统计以及二者混合。本篇主要介绍一下基于规则词典进行分词。
基于规则的分词主要是人工建立词库也叫做词典,通过词典匹配的方式对句子进行划分。其实现简单高效,但是对未登陆词很难进行处理。主要有正向最大匹配法,逆向最大匹配法以及双向最大匹配法。
正向最大匹配法FMMFMM的步骤是:
从左向右取待分汉语句的m个字作为匹配字段,m为词典中最长词的长度。
查找词典进行匹配。
若匹配成功,则将该字段作为一个词切分出去。
若匹配不成功,则将该字段最后一个字去掉,剩下的字作为新匹配字段,进行再次匹配。
重复上述过程,直到切分所有词为止。
代码实现:
def cut(self,text):
result = []
index = 0
text_size = len(text)
while text_size > index:
for size in range(self.window_size+index,index,-1):
piece = text[index:size]
if piece in self.word_dict: #查看是否存在于词典中
index = size - 1
break
index = index ...