• 【机器学习笔记四】分类算法


    参考资料

    【1】    Spark MLlib 机器学习实践

    【2】    统计学习方法

    1、Logistic分布

     设X是连续随机变量,X服从Logistic分布是指X具有下列分布函数和密度函数

    。其中u为位置参数,γ为形状参数。如下图:

    分布函数以(u,1/2)为中心对称,满足:,其中形状参数γ越小,中心部分增加越快。

    2、Logistic回归模型

    二项logistic回归模型是一种分类模型,由条件概率P(Y|X)表示,这里随机变量X取实数,而Y取0或者1。定义:

    Logistic回归比较两个条件概率,将x归为较大条件概率的那一类。本质上它是将一个线性函数wx + b的输出转换为了条件概率。

    多项logistic回归模型是二项模型的扩展,支持多分类问题,模型如下:

    3、逻辑回归Spark Mlib例子

    package com.fredric.spark.logistic
    
    import org.apache.spark.mllib.classification.LogisticRegressionWithSGD
    import org.apache.spark.mllib.linalg.Vectors
    import org.apache.spark.mllib.regression.LabeledPoint
    import org.apache.spark.{SparkContext, SparkConf}
    
    /*-
     * 逻辑回归
     * Fredric 2017
     */
    object logistic {
      def main(args:Array[String]): Unit ={
    
        val conf = new SparkConf().setMaster("local").setAppName("logistic")
        val sc   = new SparkContext(conf)
    
        val Array = new Array[LabeledPoint](10)
    
        //构造训练数据,虚拟一个以5为值的分类
        //针对一元二项逻辑斯特回归分类
        for(i <- 0 to 9){
          if(i >= 5){
            Array(i) = new LabeledPoint(1,Vectors.dense(i))
          }else{
            Array(i) = new LabeledPoint(0,Vectors.dense(i))
          }
        }
    
        val data = sc.makeRDD(Array);
        val model = LogisticRegressionWithSGD.train(data, 50)
    
        //model.weights输出[0.20670127500478114]
        println(model.weights)
    
        var test = -2
    
        //当输入为-1时,返回概率为0.0
        //当输入为11时,返回概率为1.0
        val result = model.predict(Vectors.dense(test))
        println(result)
    
        //验证该方式
        //计算P(Y=1|X),测算输入x返回1的条件概率
    
        val res1 = Math.exp(model.weights(0)*test)/(1 + Math.exp(model.weights(0)*test))
        //计算P(Y=0|X),测算输入x返回0的条件概率
        val res0 = 1/(1 + Math.exp(model.weights(0) * test))
    
        //输出:for target:-2 propalitity for 1 is : 0.3980965348017618 propalitity for 0 is : 0.6019034651982381
        //根据两个条件概率的比较可知-2属于分类0
        println("for target:" + test + " propalitity for 1 is : " + res1 + " propalitity for 0 is : " + res0)
      }
    }
  • 相关阅读:
    Intent flag 与启动模式的对应关系
    Activity的启动模式---总结
    NDK---使用,开发步骤
    自定义ViewGroup
    android:process结合activity启动模式的一次实践
    Java单元测试之覆盖率统计eclemma
    Java单元测试之JUnit篇
    结对编程1
    个人作业1——四则运算题目生成程序(基于控制台)
    Coding使用方法
  • 原文地址:https://www.cnblogs.com/Fredric-2013/p/8496070.html
Copyright © 2020-2023  润新知