28 Dec 2019
为什么突然又来更博客了呢?
最近发生了点事,情绪有点反复。
本来想转移注意力,搞搞曾经那个开发个自己的聊天机器人的想法(子曰:君子先行其言而后从之。可我还是在没完成之前说出来了啊,唉o(︶︿︶)o )。
可是搞来搞去,总是各种bug不断。
而且从微信聊天机器人入手的话,总会不自觉地导到itchat、图灵123和什么web端微信扫二维码的问题上去,bug全在这上面了,跟我的初衷相比根本本末倒置了。
于是我全盘舍弃,重新从自己的初衷开始入手。
我只是想要个自己的语料库啊,语料库才是关键!
至于是不是微信机器人反而不重要了,当然如果能微信聊天最好。哪怕只是个桌面小软件,或者简易的小窗口也行。
就顺着这个思路找下去,果然发现了新世界,NLP领域!!!!!原来NLP领域就是搞这个的啊啊!!!我是多么的无知!!!早年为什么一直不明所以地忽略这个领域??!!
结果这个领域也是需要花一个学位的时间去学习的啊,可怕。
我没那么多时间和精力了。
所以今天大概了解了下大体情况就停手了。
好了,回到为什么会更博的问题上。
在搜索资料的时候,时不时就需要看github上的代码库。而我的账号里旧博(最早最早那个)的模版存在风险漏洞,github的小蓝点一直在头像上,实在是不厌其烦。于是我只得稍微备份一下,把整个旧博客的repo删掉了。
删掉了之后,当然就顺手点开了现在的博客。
于是,时隔三年再看这简易得令人发指的博客居然有这样那样的不顺眼。
主要是,好几年过去了,心境也发生了变化。加上最近发生了点事情,实在是看不惯原来的风格了。
于是,重新折腾了一番git ssh什么的,又把博客重新编辑了一番。
不过原本的博客懒得动了,毕竟现在已经凌晨两点多了,我之前还说好的自己要早睡早起呢?完全忘记了。
就这样,折腾着折腾着,顺利测试完后,我写下了这篇日志作为记录。
出国这些年并没有经历什么,但是再回去看出国之前的博客,我居然发现,自己在不经意间已经经历了很多很多。
主要是性格上的、心境上的。
原本那种善良的温柔的近乎软萌的性格,现在看来是多么可爱多么难能可贵。
可是,现在的我,已经做不到了。哪怕曾经说自己还要再卖萌三十年。现在突然转头一看,发现自己真的已经变了。
现在的我剩下什么呢?
我依然可以开玩笑、打趣、逗乐、抖机灵、卖萌、卖乖,把自己跟00后混得分不出年纪,毕竟阴阳师寮里那群十五六的孩子们确实以为我也就十六七岁。
我依然可以善良可以温柔,但是我已经在心底默默种下了冷漠的种子。
这些年不管是学习上的、生活上的、人情上的、感情上的,经历的种种事情,实在无法让我像少年时期那样坚信,人心都是善良的,都是可以温柔以待的。
不,我现在依然可以这样认为。
但是,我因为生活环境,看到的那些事件,令我心底害怕,世界上毕竟真的是存在坏人的。
有些人的坏,是改变不了的,因为本来就是被教育出来的。比如宗教信仰,这种最彻底的最根本的一旦形成就很难改变的精神力量。
当看着那些令人头皮发麻的新闻,我实在不能想象,为什么宗教能使一个人变得那么虔诚那么听话的同时,却可以对同类那般残暴不仁。他们还是人类吗?他们以这样的罪恶行径真的会得到他们的真主的眷顾吗?
再比如,我一向因为个人性格的软弱和怯懦,不善于也不想与任何人发生纷争。总觉得,一旦出现纷争,结果必然是非常恶劣的。
但是,几个学习优秀却性格强硬的女同学,彻底改变了我的观念。
当我亲眼看着她们仅仅因为店员异样的目光就去投诉店主或者经理,或者仅仅因为宿管的态度不好就当面严厉表态,而结果并不是我原本害怕的那样仿佛世界要倒塌一样。反而,店主或经理和颜悦色对我同学说那个店员是临时工不懂事不断道歉;又或者宿管面对那般严厉的批评没有面红耳赤恼羞成怒,反而是露出了笑容,反而给我同学抱怨起这份工作的无聊和她的郁闷情绪,而造成了那样恶劣的态度,也变相道歉起来了。
能与这几个同学成为朋友甚至是好朋友,我一点都不后悔,甚至感激她们。
总觉得,正是她们的亲身经历,告诉我,人生并不总是一个样子的,不要过于恐惧那些想象中的世界,可能原本就是不存在的。又或者,其实,人生可以有其他的样子。
也从此,我觉得我心里或者说我的性格里,某种叫做坚强的东西长了出来。似乎再也不会那么害怕这个害怕那个了。
也因此,我的言行里似乎或多或少都收到了些许影响,已经不再那么软萌,反而只剩一些冷冷的强硬的东西。
很多人,包括我自己,其实都不喜欢这种冷漠的东西。但是,它既然已经在我心里长出来,又给我的坚强助了力,就已经成为我的一部分了。我既然要依靠它来顽强的独立生活,扛过一个又一个难关。我就要感激它,与它并肩同行。
我能做的,仅仅是,尽量不要丢掉曾经温柔善良的自己,时不时拿出来温柔地抚摸它一下,告诉它,世界不都是残酷的,世界还是有温度的,要适当放宽心,适当温柔点,再温柔点。
大家应该都知道了,我经历了些感情波折,现在又是孤身一人了。
我也曾想过,就这样一个人过,孤独终老,也挺好的。没有另一个人的牵绊,没有能搅乱自己心扉和自己生活节奏的那部分情感。可以一直一直做自己想做的各种事情,就这样按部就班,写一本书或者几本书,然后安安静静过完这一生,回归尘土。
也挺好的。
就在我这么想的时候,有个故人带着满腔热火突然出现了。
他再一次搅乱了我清心寡欲的心绪。我因此无法正常工作学习将近一个月。
终于在这两天,他离开了,一切又回归了平静。
起码,表面上是平静的。
我们远隔万里,十年未见,带着幻想与误解,还能有什么是真实的呢?
回归平静,才是明智的正确的事情。
但是,谁又能知道,我为什么心里平静不下来了呢?连我自己也不知道为什么。
我明明不断告诫自己,一切都是虚假的,大梦一场而已。太过短暂和虚幻得连下凡历劫都不算,甚至不能计入位列仙班的劫难事迹里。
如此短暂的过往,写成小说可能几万字都凑不够,还有什么值得纠结的呢?也怪可笑的。
朋友说,总要到进入下一段感情,才能彻底走出上一段感情吧。
可能是这样吧。
那么,如果我打算一辈子清心寡欲,孤独终老的话,难道我要一辈子忘不了这个短篇小说都不算的回忆吗?
这无论如何都不合理吧。
所以,还是希望有什么外力可以帮助我一下,让我彻底忘掉这些本不该存在的东西吧。
德国时间3点22了。
我该睡了。晚安。
25 Oct 2016
第一章
统计学习方法:
- 从训练数据(training data)(给定的、有限的集合)出发,
- (假设数据是独立同分布产生的)
- 运用某个(某评价标准evaluation criterion)(从假设空间hypothesis space)选出的最优模型(由算法实现)
- (假设空间:假设要学习的模型属于某个函数的集合)
- 对
已知训练数据和未知测试数据(在评价标准下)有最优的预测
- 三要素:→ “模型的假设空间”(model) → “模型的选择准则”(strategy) → “模型学习的算法”(algorithm)
- 方法 = 模型 + 策略 + 算法
步骤:
- 得到一个有限的训练数据的集合
- 确定包含所有可能的模型的假设空间(学习模型的集合)
- 确定模型选择的准则(学习的策略)
- 实现求解最优模型的算法(学习的算法)
- 通过学习方法选择最优模型
- 利用学习的最优模型对心的数据进行预测或分析
统计学习包括监督学习、非监督学习、半监督学习和强化学习
监督学习
监督学习:利用训练数据集学习一个模型,再用模型对测试样本集进行预测
模型:概率函数或者非概率函数(决策函数)
- 条件概率函数(之假设空间$\mathcal F$):
策略:误差最小化(经验风险/结构风险最优化(最小化)问题)(结构风险 = 经验风险 + $\lambda*J(f)$)
- 误差用损失函数(loss function)(非负实值函数)表示:$L(Y,f(X))$
- 期望损失/期望风险($=$损失函数的期望)(输入、输出$(X,Y)$为随机变量,遵循联合分布$P(X,Y)$(未知)→所以期望风险无法直接计算,需要‘学习’):
- 经验损失/经验风险(即给定训练数据集$T={(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)}$,模型$f(X)$关于$T$的平均损失):
- 根据大数定律,当样本容量$N$趋于无穷时,经验风险$R_{emp}(f)$趋于期望风险$R_{exp}(f)$
- 当样本容量足够大时,可直接用经验风险最小化作为策略:
例如极大似然估计: 当模型为条件概率分布,损失函数为对数损失函数时,经验风险最小化等价于极大似然估计
- 当样本容量很小时,只利用经验风险最小化作为策略,容易出现过拟合(over-fitting)现象,所以提出结构风险最小化(structural risk minimization, SRM)为策略
- 结构风险($J(f)$为模型的复杂度(越复杂越大),是定义在假设空间$\mathcal F$上的泛函,是对复杂模型的惩罚):
- 贝叶斯估计中的最大后验概率估计就是结构风险最小化的例子:当模型为条件概率分布、损失函数是对数损失函数、模型复杂度由模型的先验概率表示时,结构风险最小化等价于最大后验概率估计
算法:求解最优解的具体计算方法
- 如果有显式解析解,最优化问题比较简单
- 但通常解析解不存在,就需要用数值计算的方法求解
- 如何保证找到全局最优解,并使求解过程非常高效,是一个重要问题
训练误差:模型在训练数据上的误差(本质上不重要)
测试误差:模型在测试数据上的误差(非常重要)→→ 测试误差小的方法具有更好的预测能力,是更有效的方法
过拟合:选择的模型所含参数过多(比真模型多):
- 一味追求缩小测试误差,所选模型复杂度(如参数个数)往往比真模型高(过拟合),以致于出现对已知数据预测很好,对未知数据预测很差的现象。→ 模型选择旨在避免过拟合并提高模型的预测能力
以多项式拟合为例:
- 给定一个训练集$T$
- 假设数据由$M$次多项式函数$f$生成(目标 → 选择一个对已知数据和未知数据都有很好预测能力的函数(模型))
- 解决办法:
- 首先确定模型的复杂度(即确定多项式的次数$M$)
- 再按经验风险最小化的策略,求解参数(即多项式的系数)
- 可用最小二乘法求得拟合多项式系数的唯一解(简单的最优化问题)
- 结果分析:
- $M = 0$ 时,多项式曲线是一个常数,数据拟合效果很差
- $M = 1$ 时,多项式曲线是一条直线,效果也很差
- $M = 3$ 时,曲线对训练数据拟合效果足够好,模型也比较简单,是比较好的选择
- $M = 9$ 时,曲线通过每个数据点,训练误差为0,但是对未知数据预测能力不好,过拟合,不可取
多项式拟合可以看到:
- 随着多项式次数(模型复杂度)增加,训练误差会减小,直至趋于0
- 但测试误差会随着多项式次数的增加,先减小后增大
→ 最终目的是使测试误差达到最小:为此要选择合适的多项式次数(对一般模型选择也成立)
两种常用的模型选择方法:正则化和交叉验证
正则化(regularization):是结构风险最小化策略中的罚项(penalty term 或叫正则化项regularizer)$\lambda J(f)$,一般是模型复杂度的单调递增函数,比如可以是模型参数向量的范数
- 正则化的作用:选择经验风险和模型复杂度同时较小的模型
- 从贝叶斯估计角度看:正则化项 → 模型的先验概率(模型复杂,先验概率较小)
交叉验证(cross validation):(基本思想:重复使用数据)把给定的数据随机切分为训练集、验证集和测试集,在此基础上反复进行训练、测试以及模型选择
- 例如,数据随机分为两部分,70%为训练集,30%为测试集
- 然后用训练集在各种条件下(例如,不同参数个数)训练模型,从而得到不同的模型
- 再在测试集上评价各个模型的测试误差,选出误差最小的模型
泛化能力
泛化能力/推广能力(generalization ability):指由该方法学习到的模型对未知数据的预测能力
泛化误差(generalization error):如果学到的模型是$\hat f$,则用这个模型对未知数据预测的误差即为泛化误差(其实就是模型的期望风险)
泛化误差上界(generalization error bound):泛化能力分析往往是通过研究泛化误差的概率上界进行的.
- 它是样本容量的函数,当样本容量增加时,泛化上界趋于0
- 它是假设空间容量(capacity)的函数,假设空间容量越大,模型就越难学,泛化误差上界就越大
定理(泛化误差上界) 对二类分类问题,当假设空间是有限个函数的集合$\mathcal F={f_1,f_2,\cdots,f_d}$时,对任意一个函数$f\in\mathcal F$,至少以概率$1-\delta$,以下不等式成立(即以下不等式成立的概率大于等于$1-\delta$):
其中, $ \varepsilon(d,N,\delta)=\sqrt{\frac{1}{2N}(\log d +\log\frac{1}{\delta})}$
不等式左端$R(f)$是泛化误差,右端即为泛化误差上界. 右端第一项是训练误差,训练误差越小,泛化误差也越小. 第二项$\varepsilon(d,N,\delta)$是$N$的单调递减函数,当$N$趋于无穷时趋于$0$;同时它也是$\sqrt{\log d}$阶的函数,假设空间$\mathcal F$包含的函数越多,其值越大.
算法/统计(监督)学习方法
分为生成方法(generative approach)(得到的模型称为生成模型)和判别方法(discriminative approach)(得到的模型称为判别模型)
生成方法:数据由联合概率分布$P(X,Y)$学习,求出条件概率分布$P(Y\mid X)$作为预测模型,即得生成模型:
- 模型表示了给定输入$X$产生输出$Y$得生成关系;
- 典型的生成模型:朴素贝叶斯法和隐马尔可夫模型;
- 此法可还原出联合概率分布$P(X,Y)$,而判别方法则不能;
- 学习收敛速度更快:当样本容量增加时,学到的模型可以更快地收敛于真实模型;
- 当存在隐变量时,此法仍可用,但判别方法不能用.
判别方法:数据直接学习决策函数$f(X)$或者条件概率分布$P(Y\mid X)$作为预测的模型,即为判别模型。
- 关心的是对给定的输入$X$,应该预测什么样的输出$Y$;
- 典型的判别模型:$k$邻近法、感知机、决策树、逻辑斯蒂回归模型、最大熵模型、支持向量机、提升方法和条件随机场等;
- 学习准确率更高;
- 可以对数据进行各种程度上地抽象、定义特征并使用特征,因此可以简化学习问题.
分类问题
分类问题:当输出变量$Y$取有限个离散值时(无论输入变量是离散还是连续),预测问题便成为分类问题.
标注问题
标注问题(tagging):是分类问题的一个推广,又是更复杂的结构预测(structure prediction)问题的简单形式。其输入是一个观测序列,输出是一个标记序列或状态序列
- 评价标准同分类问题;
- 常用的统计学习方法:隐马尔可夫模型、条件随机场;
- 在信息抽取、自然语言处理等领域被广泛应用,是这些领域的基本问题;
- 应用举例:如对英文句子中的名词短语进行标记。
回归问题
回归问题(regression):等价于函数拟合(选择一条函数曲线,使其很好地拟合已知数据且很好地预测未知数据)
回归模型正事表示从输入变量到输出变量之间的映射函数。
- 常用的损失函数为平方损失函数,可以由最小二乘法求解。
- 应用举例:市场趋势预测、产品质量管理、客户满意度调查、投资风险分析
24 Oct 2016
数据源 → 数据收集 → 数据清洗 → 数据库/数据表 → 缺失数据补充 → 数据展示
数据展示方法:直方图、线图、点图、分布图等
缺失数据(Unknown Values)补充:
- 删除未知点:当过多参数缺失值时
- 以最频繁值填充:比如平均数mean
- 以关联 columns (variables)数据填充:比如找其他参数接近的值填充(法3比法2好、准确)
- 以相似 rows (observations)数据填充:(以欧式距离)计算距离,根据距离分配权重(用高斯kernel方程:
knnImputation()
),距离增加权重降低 (法4更合理,但要考虑到“不相关变量”的影响和超大数据的计算复杂性→可以用取样本计算做估计)