清心斋 我心素已闲,清川澹如此。

兴致来潮

为什么突然又来更博客了呢?

最近发生了点事,情绪有点反复。

本来想转移注意力,搞搞曾经那个开发个自己的聊天机器人的想法(子曰:君子先行其言而后从之。可我还是在没完成之前说出来了啊,唉o(︶︿︶)o )。

可是搞来搞去,总是各种bug不断。

而且从微信聊天机器人入手的话,总会不自觉地导到itchat、图灵123和什么web端微信扫二维码的问题上去,bug全在这上面了,跟我的初衷相比根本本末倒置了。

于是我全盘舍弃,重新从自己的初衷开始入手。

我只是想要个自己的语料库啊,语料库才是关键!

至于是不是微信机器人反而不重要了,当然如果能微信聊天最好。哪怕只是个桌面小软件,或者简易的小窗口也行。

就顺着这个思路找下去,果然发现了新世界,NLP领域!!!!!原来NLP领域就是搞这个的啊啊!!!我是多么的无知!!!早年为什么一直不明所以地忽略这个领域??!!

结果这个领域也是需要花一个学位的时间去学习的啊,可怕。

我没那么多时间和精力了。

所以今天大概了解了下大体情况就停手了。

好了,回到为什么会更博的问题上。

在搜索资料的时候,时不时就需要看github上的代码库。而我的账号里旧博(最早最早那个)的模版存在风险漏洞,github的小蓝点一直在头像上,实在是不厌其烦。于是我只得稍微备份一下,把整个旧博客的repo删掉了。

删掉了之后,当然就顺手点开了现在的博客。

于是,时隔三年再看这简易得令人发指的博客居然有这样那样的不顺眼。

主要是,好几年过去了,心境也发生了变化。加上最近发生了点事情,实在是看不惯原来的风格了。

于是,重新折腾了一番git ssh什么的,又把博客重新编辑了一番。

不过原本的博客懒得动了,毕竟现在已经凌晨两点多了,我之前还说好的自己要早睡早起呢?完全忘记了。

就这样,折腾着折腾着,顺利测试完后,我写下了这篇日志作为记录。

出国这些年并没有经历什么,但是再回去看出国之前的博客,我居然发现,自己在不经意间已经经历了很多很多。

主要是性格上的、心境上的。

原本那种善良的温柔的近乎软萌的性格,现在看来是多么可爱多么难能可贵。

可是,现在的我,已经做不到了。哪怕曾经说自己还要再卖萌三十年。现在突然转头一看,发现自己真的已经变了。

现在的我剩下什么呢?

我依然可以开玩笑、打趣、逗乐、抖机灵、卖萌、卖乖,把自己跟00后混得分不出年纪,毕竟阴阳师寮里那群十五六的孩子们确实以为我也就十六七岁。

我依然可以善良可以温柔,但是我已经在心底默默种下了冷漠的种子。

这些年不管是学习上的、生活上的、人情上的、感情上的,经历的种种事情,实在无法让我像少年时期那样坚信,人心都是善良的,都是可以温柔以待的。

不,我现在依然可以这样认为。

但是,我因为生活环境,看到的那些事件,令我心底害怕,世界上毕竟真的是存在坏人的。

有些人的坏,是改变不了的,因为本来就是被教育出来的。比如宗教信仰,这种最彻底的最根本的一旦形成就很难改变的精神力量。

当看着那些令人头皮发麻的新闻,我实在不能想象,为什么宗教能使一个人变得那么虔诚那么听话的同时,却可以对同类那般残暴不仁。他们还是人类吗?他们以这样的罪恶行径真的会得到他们的真主的眷顾吗?

再比如,我一向因为个人性格的软弱和怯懦,不善于也不想与任何人发生纷争。总觉得,一旦出现纷争,结果必然是非常恶劣的。

但是,几个学习优秀却性格强硬的女同学,彻底改变了我的观念。

当我亲眼看着她们仅仅因为店员异样的目光就去投诉店主或者经理,或者仅仅因为宿管的态度不好就当面严厉表态,而结果并不是我原本害怕的那样仿佛世界要倒塌一样。反而,店主或经理和颜悦色对我同学说那个店员是临时工不懂事不断道歉;又或者宿管面对那般严厉的批评没有面红耳赤恼羞成怒,反而是露出了笑容,反而给我同学抱怨起这份工作的无聊和她的郁闷情绪,而造成了那样恶劣的态度,也变相道歉起来了。

能与这几个同学成为朋友甚至是好朋友,我一点都不后悔,甚至感激她们。

总觉得,正是她们的亲身经历,告诉我,人生并不总是一个样子的,不要过于恐惧那些想象中的世界,可能原本就是不存在的。又或者,其实,人生可以有其他的样子。

也从此,我觉得我心里或者说我的性格里,某种叫做坚强的东西长了出来。似乎再也不会那么害怕这个害怕那个了。

也因此,我的言行里似乎或多或少都收到了些许影响,已经不再那么软萌,反而只剩一些冷冷的强硬的东西。

很多人,包括我自己,其实都不喜欢这种冷漠的东西。但是,它既然已经在我心里长出来,又给我的坚强助了力,就已经成为我的一部分了。我既然要依靠它来顽强的独立生活,扛过一个又一个难关。我就要感激它,与它并肩同行。

我能做的,仅仅是,尽量不要丢掉曾经温柔善良的自己,时不时拿出来温柔地抚摸它一下,告诉它,世界不都是残酷的,世界还是有温度的,要适当放宽心,适当温柔点,再温柔点。

大家应该都知道了,我经历了些感情波折,现在又是孤身一人了。

我也曾想过,就这样一个人过,孤独终老,也挺好的。没有另一个人的牵绊,没有能搅乱自己心扉和自己生活节奏的那部分情感。可以一直一直做自己想做的各种事情,就这样按部就班,写一本书或者几本书,然后安安静静过完这一生,回归尘土。

也挺好的。

就在我这么想的时候,有个故人带着满腔热火突然出现了。

他再一次搅乱了我清心寡欲的心绪。我因此无法正常工作学习将近一个月。

终于在这两天,他离开了,一切又回归了平静。

起码,表面上是平静的。

我们远隔万里,十年未见,带着幻想与误解,还能有什么是真实的呢?

回归平静,才是明智的正确的事情。

但是,谁又能知道,我为什么心里平静不下来了呢?连我自己也不知道为什么。

我明明不断告诫自己,一切都是虚假的,大梦一场而已。太过短暂和虚幻得连下凡历劫都不算,甚至不能计入位列仙班的劫难事迹里。

如此短暂的过往,写成小说可能几万字都凑不够,还有什么值得纠结的呢?也怪可笑的。

朋友说,总要到进入下一段感情,才能彻底走出上一段感情吧。

可能是这样吧。

那么,如果我打算一辈子清心寡欲,孤独终老的话,难道我要一辈子忘不了这个短篇小说都不算的回忆吗? 这无论如何都不合理吧。

所以,还是希望有什么外力可以帮助我一下,让我彻底忘掉这些本不该存在的东西吧。

德国时间3点22了。

我该睡了。晚安。

test2

git推送测试

统计学习方法笔记

第一章

统计学习方法:

  • 从训练数据(training data)(给定的、有限的集合)出发,
  • (假设数据是独立同分布产生的)
  • 运用某个(某评价标准evaluation criterion)(从假设空间hypothesis space)选出的最优模型(由算法实现)
  • (假设空间:假设要学习的模型属于某个函数的集合)
  • 已知训练数据和未知测试数据(在评价标准下)有最优的预测
    • 三要素:→ “模型的假设空间”(model) → “模型的选择准则”(strategy) → “模型学习的算法”(algorithm)
    • 方法 = 模型 + 策略 + 算法

步骤:

  1. 得到一个有限的训练数据的集合
  2. 确定包含所有可能的模型的假设空间(学习模型的集合)
  3. 确定模型选择的准则(学习的策略)
  4. 实现求解最优模型的算法(学习的算法)
  5. 通过学习方法选择最优模型
  6. 利用学习的最优模型对心的数据进行预测或分析


统计学习包括监督学习、非监督学习、半监督学习和强化学习

监督学习

监督学习:利用训练数据集学习一个模型,再用模型对测试样本集进行预测

模型:概率函数或者非概率函数(决策函数)

  • 决策函数(之假设空间$\mathcal F$):
  • 条件概率函数(之假设空间$\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$取有限个离散值时(无论输入变量是离散还是连续),预测问题便成为分类问题.

  • 分类问题地模型称为分类器(classifier).
  • 分类器对输入进行输出的预测,称为分类,可能地输出称为,类别为多个时,称为多类分类问题.
  • 过程:从已知的训练集学习一个分类器,再用分类器对新的数据进行分类.
  • 评价分类器性能的指标一般是分类准确率(accuracy):对给定的测试数据集,分类器正确分类的样本数与总样本数之比。也就是损失函数是0-1损失时测试数据集上的准确率
  • 二类分类问题常用的评价指标是精确率(precision)和召回率(recall)。通常以关注的类为正类,其他类为负类

    • $TP$——将正类预测为正类数;
    • $FN$——将正类预测为负类数;
    • $FP$——将负类预测为正类数;
    • $TN$——将负类预测为负类数;
    • 精确率定义为
    • 召回率定义为
    • $F_1$值,为精确率和召回率的调和均值,即
    • 精准率和召回率都高时,$F_1$值也会高
  • 可用于分类的统计学习方法:$k$邻近法、感知机、朴素贝叶斯法、决策树、决策列表、逻辑斯蒂回归模型、支持向量机、提升方法、贝叶斯网络、神经网络、Winnow等.
  • 应用举例:
    • 银行业务,可以构建客户分类模型,对客户按照贷款风险的大小进行分类;
    • 网络安全,可以利用日志数据的分类对非法入侵进行检测;
    • 图像处理,可以用分类检测图像中是否有人脸出现
    • 手写识别,可以用分类识别手写的数字;
    • 互联网搜索,网页的分类可以帮助网页的抓取、索引和排序

标注问题

标注问题(tagging):是分类问题的一个推广,又是更复杂的结构预测(structure prediction)问题的简单形式。其输入是一个观测序列,输出是一个标记序列或状态序列

  • 评价标准同分类问题;
  • 常用的统计学习方法:隐马尔可夫模型、条件随机场;
  • 在信息抽取、自然语言处理等领域被广泛应用,是这些领域的基本问题;
  • 应用举例:如对英文句子中的名词短语进行标记。

回归问题

回归问题(regression):等价于函数拟合(选择一条函数曲线,使其很好地拟合已知数据且很好地预测未知数据) 回归模型正事表示从输入变量到输出变量之间的映射函数。

  • 常用的损失函数为平方损失函数,可以由最小二乘法求解。
  • 应用举例:市场趋势预测、产品质量管理、客户满意度调查、投资风险分析

数据学习笔记

数据源 → 数据收集 → 数据清洗 → 数据库/数据表 → 缺失数据补充 → 数据展示

数据展示方法:直方图、线图、点图、分布图等

缺失数据(Unknown Values)补充:

  1. 删除未知点:当过多参数缺失值时
  2. 以最频繁值填充:比如平均数mean
  3. 以关联 columns (variables)数据填充:比如找其他参数接近的值填充(法3比法2好、准确)
  4. 以相似 rows (observations)数据填充:(以欧式距离)计算距离,根据距离分配权重(用高斯kernel方程:knnImputation()),距离增加权重降低 (法4更合理,但要考虑到“不相关变量”的影响和超大数据的计算复杂性→可以用取样本计算做估计)

test

just test 长久没推送,测试一下