zoukankan      html  css  js  c++  java
  • 【机器学习笔记四】分类算法

    参考资料

    【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)
      }
    }
  • 相关阅读:
    解决win8无法成功安装Windows Phone 7 sdk的问题
    决定专心写博,学习
    时间管理的首要原则:专注力
    Windows Phone 7 开发环境的搭建
    Windows Phone 8 开发环境的搭建
    学习使用ErrorProvider 转载
    SetTimer函数
    网络工程课程笔记
    IP地址分类及特殊IP地址
    windows消息处理机制
  • 原文地址:https://www.cnblogs.com/Fredric-2013/p/8496070.html
Copyright © 2011-2022 走看看