zoukankan      html  css  js  c++  java
  • 数据科学实战(二):算法

    1.前言

    算法是完成分析任务所采纳或者遵循的一整套步骤和规则,它是计算机科学中一个基本概念,可视作计算机科学的基石。设计优雅高效的代码、准备和处理数据以至软件工程开发
    均以算法为基础。

    排序、查找、基于图的计算等问题都是算法能够解决的。然而,对于同一个问题,基于效率和计算时间的考虑,可以选出某个相对最优的算法。当算法要解决的数据分析问题涉及
    海量数据,或者开发面向客户的产品时,基于效率选择最优的算法会变得尤为重要。高效的算法是准备和处理数据的基础,算法的执行可以是顺序的,也可以是并发的。就数
    据科学来说,以下三类算法是必须了解的。

    (1) 数据清理和预处理的算法。如排序、MapReduce、Pregel。

    我们将这类算法称为数据工程

    (2) 用于参数估计的最优化算法。比如 Stochastic Gradient Descent(随机梯度下降)、Newton’s Method(牛顿法)和 Least Squares
    (最小二乘法)

    (3) 机器学习算法。

    1.2 机器学习算法

    机器学习算法的应用主要有三个大舞台:预测、分类和聚类。

    参数:

    计学家认为模型中的参数必须在现实世界中是有意义的;

    软件工程师或计算机科学家不会关注模型参数的意义。即便他们想要关注,也可能是只是为了提升模型的预测能力,而不是为了解释这些参数。
    置信区间:

    统计学中,置信区间和后验分布用来描述参数估计的不确定性。但是,有些机器学习算法,比如 k 均值算法(k-means)和 k 近邻算法(k-nearest neighbors),就不涉及置信
    区间和参数估计的不确定性问题。

    显式假设:

    统计模型会对数据的生成过程和数据的分布做出一些明确的假设(称作显式假设),统计推断往往是建立在假设上的一个数据科学家要能够在统计学和计算机科学的思维方式之间找到一个平衡点

    ,要取长补短。数据科学家的身上同时流淌着统计学家和计算机科学家的血液,大可不必厚此薄彼。

    2 三大基本算法
    2.1 线性回归模型

     先假设输出变量(有时称为响应变量、因变量或标签)和预测变量(有时称为自变量、解释变量或特征)之间存在线性关系

     (算法是完成某项任务时需要遵循的一组规则或步骤,而模型是对世界一种附有假设的描述。)

    线性模型可能适用于类似下面的一些问题:比如说你正在研究一个公司的销售额和该公司在广告上的投入之间的关系,或者某人在社交网站上的好友数量和他每天在该社交网站上
    花费的时间之间的关系。这些问题的输出变量都是数值型的,也就意味着线性回归模型可能是一个不错的选择。最起码可以说,我们从线性模型作为研究的起步是没有太大问题的。

    理解线性回归的一个切入点是先来确定那条直线。我们知道,通过斜率和截距就可以完全确定一条直线 但是,这样的一条直线是完全确定的。

    考虑随机函数,即便是对于数学功底不错的我们来说,也是一个新鲜的概念,但是在数据科学中却再常见不过了。然而,随机函数从根本上来说,还是建立在确定型函数的基础之上的

    确定型函数

    模型拟合

    最小二乘法 

    最小二乘模型的延伸

    我们刚刚讨论的是一个简单线性回归模型(一个输出变量,一个预测变量),模型参数的预测采用了最小二乘法来估计 β。在此模型的基础上,我们可以主要从三个方面加以延伸:

    (1) 增添一些关于模型误差项的假设;
    (2) 增添更多预测变量;
    (3) 对预测变量加以变换。

    增添一些关于模型误差项的假设

    模型可以扩展为:

    其中的e是模型中的新加项,也称作“噪声”项,代表数据中不能被模型部分拟合的部分。它也称作误差项——e代表模型的实际误差,也就是实际观测值与真实回归直线上所得值的差距

    增加预测变量

    我们刚才讨论的是最简单的线性回归模型:一个自变量以及一个因变量。在此模型的基础之上,我们可以增加预测变量(自变量)的个数,从而得到多元回归模型:

    (多项式回归模型不是线性回归模型)

    变换

    刚才的模型假设了 y 与 x 之间的线性关系,然而为什么我们不能使用 x 的高阶项呢,这样我们就可以得到一个类似下式的多项式回归模型:

    可以把多项式回归模型看成线性模型,前提是把变量做一下适当的变换。比如,我们可以假设z x2 =,w x3 =
    ,这样上面的模型就是一个基于三个预测变量(x, z, w) 的线性回归模型了

    这样的变量变换在线性回归中经常会用到,其他的变换方法还包括取对数、离散化、二元化等。


    2.2 k 近邻模型(k-NN)
    k 近邻模型是一个分类算法,在给定一个已经做好分类的数据集之后,k 近邻可以学习其中的分类信息,并可以自动地给未来没有分类的数据分好类。

    k 近邻的主要想法是,根据属性值的相似度找到某个对象的相似对象们,并让其相似对象们一起“投票”决定该对象到底应该属于哪一类。

    如果有某两个或者更多个的类别投票相同,那么就从这些类别中随机挑选一个作为对象的类别值

    k 近邻方法需要解决两个核心问题:一是如何根据属性定义个体之间的相似性或者紧密程度。一旦有了明确的定义,我们就可以把某个带预测个体的“近邻”们找出来,让它们投
    票决定该个体的类别属性。

    如何才能确定一个最优的 k 值

    k 近邻方法工作的详细步骤。

    (1) 首先确定相似性定义,这通常也叫作“距离”。
    (2) 将数据分割成训练数据和测试数据集。
    (3) 选择一个模型评价标准。
    (对于分类问题来说,误分率是个不错的选择,我们会在稍后
    章节详细讨论。)
    (4) 选择不同的 k 值,并应用 k 近邻模型,看哪个模型的效果最好。
    (5) 基于选定的模型评价标准,选出最优的 k 值。
    (6) 选定 k 之后,就可以做样本外测试了。我们刚才提到的一个新人就是一个样本外的
    例子。

    相似性/距离测度

    相似性测度的选择在很大程度上要取决于问题的背景和数据本身的特征。举个例子来说,对于社交网络数据来说,如何衡量两人之间的“相似性”呢?一个通常的做法是用两人之
    间共同好友的个数来衡量。而这样的测度方式放在别的数据上可能就不太合适了

    欧几里得距离又叫欧氏距离,对于在实数轴上取值以及能够在平面或者多维空间中描绘出


    来的变量来说,它是一个不错的距离亮度。

    余弦度(Cosine Similarity)
    Jaccard距离或相似度
    Mahalanobis距离
    Hamming距离

    Manhattan距离

    我们甚至可以自己定于距离的测度方式

    选择一个模型评价标准

    线性回归模型和 k 近邻模型都属于“监督性学习算法”,也就是说,预测变量的观测值 x 和待预测变量的观测值 y 都是已知的,学习的目的是找到 x 产生 y 的函数。接下来我们要介

    绍的算法属于“非监督性学习算法”,它适用于 y 的观测值未知的数据。

    2.3 k 均值算法
    “非监督性学习算法”的典型代表是聚类分析,在聚类分析中 y 的真实标签值是未知的。k均值是我们要接触到的第一个“非监督学习算法”。

    聚类的整个过程,可以总结为以下四步。

    (1) 首先,在数据空间中随机挑选 k 个点(叫作中心点,centroid)。这也叫 k 均值聚类的初始化操作,要尽量让中心店靠近数据点,并且各个中心点之间要明显不同。
    (2) 将数据点分类到离它最近的中心点。
    (3) 重新计算中心点的位置。
    (4) 重复上述两部直到数据中心点的位置不再变动,或者变动幅度很小为止。

    3 练习:机器学习算法基础

  • 相关阅读:
    HDU2897( 巴什博奕变形)
    HTML小知识点积累
    几种自己主动运行js代码的方式
    leetcode笔记:Contains Duplicate
    【Nutch基础教程之七】Nutch的2种执行模式:local及deploy
    为什么使用模板
    前端编程提高之旅(十)----表单验证插件与cookie插件
    【HDOJ 5399】Too Simple
    进程间通信之-信号signal--linux内核剖析(九)
    iOS类的合理设计,面向对象思想
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/12670356.html
Copyright © 2011-2022 走看看