Contents

Machine Learning Basic Knowledge

目的:从容易理解的角度 构建ML的知识网络

ML overview

使用学习算法将数据实现 分类与回归(数值型预测)。

几种不同类型的学习算法: 监督学习 无监督学习

监督学习

训练样本 是有具体的标签,即该数据对应的目标值。

分类问题:目标值通常是具体的类型。

回归问题:目标值通常是连续型。

学习算法 通过提取数据特征 发现特征与目标值之间的关系 进行分类与回归。

无监督学习

训练数据没有类别信息,也不会给定目标值。

聚类问题:把数据分类,但类别并不是预先定义的,算法根据“物以类聚”的原则,判断各条数据之间的相似性,相似的就归为一类。

特征工程

不同的问题有相应的学习算法使用。但它们的前提是:特征处理。

数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。

特征处理是一项工程活动,目的是最大限度地从原始数据中提取特征以供算法和模型使用。

https://raw.githubusercontent.com/Fedomn/misc-blog-assets/master/feature-engineering.jpg

Python的sklearn里提供了完备的特征处理方法。分为:

预处理:数据预处理特征提取 (目的:把输入数据(如文本)转换为机器学习算法可用的数据)

特征选择降维:目的 提高估计器的准确度或者增强它们在高维数据集上的性能。

学习算法

参考: 斯坦福大学2014机器学习教程中文笔记目录 机器学习实战

朴素贝叶斯

朴素贝叶斯分类器是一系列以假设特征之间强(朴素)独立下运用贝叶斯定理为基础的简单概率分类器。

支持向量机

它的概念并不好懂,可以参考这个回答

Support Vector Machine, 一个普通的SVM就是一条直线罢了,用来完美划分linearly separable的两类。但这又不是一条普通的直线,这是无数条可以分类的直线当中最完美的,因为它恰好在两个类的中间,距离两个类的点都一样远。而所谓的Support vector就是这些离分界线最近的『点』。如果去掉这些点,直线多半是要改变位置的。可以说是这些vectors(主,点点)support(谓,定义)了machine(宾,分类器)

如果是高维的点,SVM的分界线就是平面或者超平面。其实没有差,都是一刀切两块,我就统统叫直线了。

对没法线性可分的数据,我们还可以通过修改核函数。

线性回归

模型表示 找到 损失函数(平方误差函数) 值最小的模型参数 方法:梯度下降

逻辑回归

在分类问题中,你要预测的变量 y 是离散的值,我们将学习一种叫做逻辑回归 (Logistic Regression) 的算法。该模型的输出变量范围始终在0和1之间。

如何运用梯度下降法,来拟合出逻辑回归的参数。 正则化(regularization)的技术,它可以改善或者减少过度拟合问题

神经网络

无论是线性回归还是逻辑回归都有这样一个缺点,即:当特征太多时,计算的负荷会非常大。

神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。

我们可以知道:每一个a都是由上一层所有的x和每一个x所对应的决定的。 我们把这样从左到右的算法称为前向传播算法( FORWARD PROPAGATION )

具体应用

基于app的性别识别

本质和垃圾邮件识别相似。通过特征选择出spam的词汇,将数据构造成特征向量,在输入到算法中学习模型。

构造特征工程: 困难主要出现在APP特征选择,找出与性别相关的APP

思路:

  1. 读取数据 剔除APP在用户数据里 出现少于阈值的数据。然后将处理后的APP 当做特征APP
  2. 将用户每条APP数据 转成向量。表示成一个数组,数组顺序为特征APP顺序,数组的值为0或1。1为装了这个APP,反正没有。
  3. 将转换好向量的 训练数据 和 标记结果 输入学习算法 进行训练。

优化:

最开始没有筛选过的APP错误率较高:NB和SVM都在20%左右。

查看识别错误的数据,发现有些用户APP太少,而且大多数 人工看来都是与性别 无关的。如微信、支付宝等。 所以,剔除这些与性别无关的数据。对APP列表过少的用户 不进行预测。再测试:NB提升到了17% SVM提升到了13%左右

接着对LinearSVC调参C到0.01。C是惩罚系数 即对误差的宽容度。c越高 越不能容忍出现误差 容易过拟合。C越小,容易欠拟合。再测试:SVM提升到了12%左右。

由于特征选择是人工处理的,可能会不准确。所以简单方法是让学习器自动选择特征,我们采用基于决策树的随机森林算法,找出每个单独的特征和响应变量之间的关系。进而进行选择。可以参考。实验证明,采用这种筛选出的特征,进行训练,可以显著提高识别率。