【机器学习笔记四】分类算法 - 逻辑回归

参考资料

【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)
  }
}
复制代码

 

posted @   Fredric_2013  阅读(257)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示