分类目录归档:技术文章

Machine Learning-异常检测(Anomaly Detection)

本文覆盖Coursera Machine Learning Week 9的内容。
一、问题描述
假设我们现在要构建一个模型来判断某一个飞机发动机是否有问题,我们选取的特征如下:

  • \(x_{1}\) = 发热
  • \(x_{2}\) = 抖动
  • 原始数据集:\(\left \{ x^{(1)},x^{(2)}, … ,x^{(m)} \right \}\)在坐标轴上的分布如下图所示:

    很明显上图数据点的分布是有规律可寻的:越往中心越密集,越往边缘越稀疏。也就是说大部分数据点都散落在中心位置,而小部分散落在边缘位置。那么我们就可以说如果一个测试点\(x_{test}\)越靠近中心点,那么它是正常引擎的可能性就越大;如果他远离中心点,则它很可能就是异常的引擎。这就是异常检测,他在很多领域都有应用,比如它可以监测网站的异常用户、监测机房电脑运转是否正常等。

    二、算法

  • 高斯分布(Gaussian distribution)
    看到上图的分布我们很容易想到一个模型:高斯分布(Gaussian distribution),也就是正态分布(Normal distribu[……]

    继续阅读

  • 比特币和区块链技术

    一、去中心化
    在介绍比特币和区块链技术之前,我们先来看两个日常生活中很常见的交易场景。

  • 实物交易
    水果店的老板卖水果给顾客,顾客付了钱之后得到苹果,一手交钱一手交货,交易完成。仔细想想你会发现这笔交易是完全基于老板和顾客之间的,并没有第三方参与。道理很简单,因为双方都是面对面交易的,苹果怎么样,给了多少钱,双方都是亲眼所见的,是否满意当场就可以判断出来,所以不需要第三方监督。
  • 虚拟物品交易
    但是在电子货币时代这一切就没那么简单了,比如用户A要从自己的银行账户转账给用户B,这笔看似只有A和B参与的交易其实并不只有他们两,还有一个隐形的第三方参与者:银行。假如没有银行的监督,我们如何知道A的账户里是否有足够的钱转给B?我们如何知道A在给B转账的同时有没有转给C?这一切都需要第三方的监督,换句话说,这笔交易只有在被银行认可之后才会生效,银行是一切交易的中心。所以从本质上来说,银行对每个人的账户拥有至高无上的权限,只要它想,它就可以对账户做一切它想做的事,而且这一切操作对外都是不透明的。虽然银行有政府做背书一般不会干这种坏事,但是万一突然遇到个兵荒马乱的时代,那一切都说不准了。[……]

    继续阅读

  • WordPress如何显示数学公式

    这段时间写了几篇machine learning的文章,需要用到很多数学公式,这些文章里所有的数学公式基本都是贴图的,其实这样并不方便,而且很不美观。主要是自己懒,觉得能截图就截图了,感觉在wordpress里编辑数学公式肯定很麻烦,但实际上在wordpress里显示数学公式是一件非常简单的事,出乎意料的简单,连插件都不需要装。我采用的方案是一个基于LaTeX显示数学公式的JavaScript引擎-MathJax-https://www.mathjax.org/,这个JS引擎的优点是全浏览器支持,不需要额外插件设置,非常方便。具体使用步骤如下:

  • 在header.php文件里添加JS引用,具体步骤:登陆wordpress,进入外观->编辑->主题页眉 (header.php)。在head标签里添加一行代码引入MathJax: 值得注意的是,这行代码必须要放到 <?php wp_head(); ?>之前,否则不生效)这里的JS地址用的是MathJax的官方CDN,其实也完全可以把这个MathJ[……]

    继续阅读

  • 解决异常Certificates does not conform to algorithm constraints

    这两天线上一批测试服的环境从JDK7升级到JDK8,上线之后突然不能充值了,后台日志报错如下:

    java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: Certificates does not conform to algorithm constraints

    这个异常字面的意思就是:在进行SSL握手时,所采用的证书算法不符合约束条件,抛了异常。结合堆栈信息,很快定位到代码层面:是我们游戏充值时要向腾讯的服务器发送一个https请求以获取token,然而因为腾讯服务器所采用的ssl证书算法不符合某种约束条件而抛异常了,从而导致充值异常!那到底什么约束条件呢?网上搜索了一下基本都是让你改这个文件:
    $JAVA_HOME/jre/lib/security/java.security
    把其中的配置项:
    #jdk.certpath.disabledAlgorithms=MD2, MD5, RSA keySize < 1024, \ DSA keySize < 1024, EC keySize < 224
    改成:
    jd[......]

    继续阅读

    Machine Learning-聚类(Clustering)(二)-主成分分析(PCA)

    一、降维(Dimensionality Reduction)
    我们知道在实际场景中,很多特征向量之间都是有强相关性的,比如有两个特征分别用英尺和平方米来丈量房屋的面积大小,那么这两组数据就 是冗余的(为什么会出现这么明显的冗余?因为在实际场景中会有几百甚至是上千的特征,很难判断两个特征之间是否是冗余的。),我们完全可以使用一个一维的特征变量来表示房屋的面积大小,这就是降维。举个例子:
    2DTo1D
    如上图所示,我们把原来的两个向量x1和x2降维到只是用一个向量z1来使用。更直观的,可以看一个三维降低到二维的例子:
    3DTo2D
    我们可以发现三维空间里离散的点被映射到了一个二维空间平面之中。

    那么为什么要降维呢?

  • 压缩数据,节省存储空间
  • 提高算法执行速度
  • 用于数据可视化,使视图更简洁,更容易发现数据之间的规律
  • 二、主成分分析(Principal Component Analysis)

    1.PCA的数学表达
    在介绍PCA的计算方法和原理之前,我们先了解下PCA主要做的事情是什么,并且用数学语言把它表达出来。看个例子:
    PCA_2DTo1D
    这个例子是把二维的数据降低到一维,它所做的事[……]

    继续阅读