数据挖掘算法学习笔记汇总

数据挖掘算法(一)–K近邻算法 (KNN)

数据挖掘算法(二)–决策树

数据挖掘算法(三)–logistic回归

在介绍logistic回归之前先复习几个基础知识点,有助于后面的理解。

基本数学知识点

1、对数似然函数

若总体X为离散型,其概率分布列为

P(X=x)=p(x,θ)

其中θ为未知参数。设 (X1,X2,...,Xn) 是取自总体样本容量为n的样本,则(X1,X2,...,Xn)的联合概率分布率为

∏i=1np(xi,θ)

又设(X1,X2,...,Xn)的一组观测值为(x1,x2,...,xn),易知样本X1,X2,...,Xn取到观测值 x1,x2,...,xn 的概率为

L(θ)=L(x1,x2,...,xn;θ)=∏i=1np(xi,θ)

这一概率随 θ 的取值而变化,它是 θ 的函数,称 L(θ) 为样本的似然函数。但是由于来连乘的函数处理起来比较麻烦,所以对 L(θ) 取自然对数变成加法来处理要简单点。

lnL(θ)=∑i=1nlnp(xi,θ)

2、logistic函数

logistic函数或logistic曲线是常见的“S”形(sigmoid curve ,S形曲线),方程式如下:

f(x)=L1+e−k(x−x0)

其中

  • e自然对数
  • x0 S形中点的x值
  • L曲线的 最大值
  • k曲线的陡度



    上图是L=1,k=1,x0=0时的图像

    这里主要说明下这个函数的导数的性质,后面推导的时候会用到。

    f(x)=11+e−x=ex1+ex
    ddxf(x)=ex(1+ex)−exex(1+ex)2
    ddxf(x)=ex(1+ex)2=f(x)(1−f(x))

logistic回归数学推导

先看一个简单的例子:



我们将平面上的点分为两类,中间的红色线条为边界。

预测类别y=1 如果−3+x1+x2≥0预测类别y=0 如果−3+x1+x2<0

此例子中

hθ(x)=g(θ0+θ1x1+θ2x2)

对更多维的数据进行分类时,线性边界的情况,边界形式如下:

θ1x1+θ2x2+...+θnxn=θTx

根据logistic回归可知预测函数为:

hθ(x(i))=g(θTxi)=11+e−θTxi

hθ(x(i)函数的值有特殊的含义,它表示结果取1的概率,因此对于输入x分类结果为类别1和类别0的概率分别为:

P(y=1|x;θ)=hθ(x(i)
P(y=0|x;θ)=1−hθ(x(i)

合起来写则可以得到下式:

P(y|x;θ)=(hθ(x))y(1−hθ(x))1−y

取似然函数得到下式:

L(θ)=∏i=1mP(y(i)|x(i),θ)

求自然对数得到对数似然函数:

l(θ)=lnL(θ)
=∑i=1m(y(i)lnhθ(x(i))+(1−y(i))ln(1−hθ(x(i))))

最大似然估计就是要求得使l(θ)取最大值时的θ,利用梯度上升法求解,求得的θ就是要求的最佳参数。下面是利用梯度上升法求解过程。

求利用梯度上升法求解l(θ)的最大值时,根据梯度上升法知道θ的更新公式如下:

θj:=θj+α∂∂θjl(θ)    (j=0...n)

下面先求出l(θ)的偏导数:

∂∂θjl(θ)=∑i=1m((y(i)1hθ(x(i))∂∂θjhθ(x(i))−(1−y(i))11−hθ(x(i))∂∂θjhθ(x(i))
=∑i=1m((y(i)1g(θTx(i))−(1−y(i))11−g(θTx(i)))∂∂θjg(θTx(i))

因为g(θTxi)是logistic函数

g(θTxi)=11+e−θTxi

所以我们利用前面讲的logistic函数的导数性质可以将l(θ)的偏导数转化

∂∂θjl(θ)=∑i=1m((y(i)1g(θTx(i))−(1−y(i))11−g(θTx(i)))g(θTx(i))(1−g(θTx(i)))∂∂θjθTx(i)
=∑i=1m(y(i)(1−g(θTx(i)))−(1−y(i))g(θTx(i)))x(i)j
=∑i=1m(y(i)−g(θTx(i)))x(i)j
=∑i=1m(y(i)−hθ(x(i)))x(i)j

这样就得到了更新的过程

θj:=θj+α∑i=1m(y(i)−hθ(x(i)))x(i)j    (j=0...n)

python代码实现

本文代码运行环境:

python:3.5.1

pandas:0.19.2

其他环境可能有细微差别

# -*coding:utf-8*-
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import math # 获取数据
data = pd.read_table("./logistic.txt", sep="\t", header=None)
dataMat = data.iloc[:, 0:-1]
labelMat = data.iloc[:, -1] def sigmoid(dataSeries):
return 1.0 / (1 + np.exp(-dataSeries)) # 梯度上升算法
def gradAscent(dataMatrix, LabelsVector):
n = dataMatrix.shape[1]
alpha = 0.001
maxCycles = 500
thetas = np.ones((n, 1))
for k in range(maxCycles): # heavy on matrix operations
h = sigmoid(dataMatrix * thetas) # matrix mult
error = LabelsVector.T - h # vector subtraction
thetas = thetas + alpha * dataMatrix.T * error # matrix mult
return thetas def plotBestFit(thetas, data):
"""
:param thetas: type DataFrame , the thetas
:param data: type DtaFrame , all the data
:return:
"""
X1 = data[data[3] == 0]
X2 = data[data[3] == 1]
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(X1[1], X1[2], s=30, c='red', marker='s')
ax.scatter(X2[1], X2[2], s=30, c='green')
x = np.arange(-3.0, 3.0, 0.1)
y = (-thetas.iloc[0, 0] - thetas.iloc[1, 0] * x) / thetas.iloc[2, 0]
ax.plot(x, y)
plt.xlabel('X1')
plt.ylabel('X2')
plt.show() thetas = gradAscent(np.mat(dataMat), np.mat(labelMat))
plotBestFit(pd.DataFrame(thetas), data)

画出的图如下所示:

代码和数据下载地址:链接:http://pan.baidu.com/s/1hs6CKL2 密码:308l

参考资料

1、https://en.wikipedia.org/wiki/Maximum_likelihood_estimation

2、https://en.wikipedia.org/wiki/Logistic_function

欢迎python爱好者加入:学习交流群 667279387

数据挖掘算法(三)--logistic回归的更多相关文章

  1. 常见算法(logistic回归,随机森林,GBDT和xgboost)

    常见算法(logistic回归,随机森林,GBDT和xgboost) 9.25r早上面网易数据挖掘工程师岗位,第一次面数据挖掘的岗位,只想着能够去多准备一些,体验面这个岗位的感觉,虽然最好心有不甘告终 ...

  2. 第三集 欠拟合与过拟合的概念、局部加权回归、logistic回归、感知器算法

    课程大纲 欠拟合的概念(非正式):数据中某些非常明显的模式没有成功的被拟合出来.如图所示,更适合这组数据的应该是而不是一条直线. 过拟合的概念(非正式):算法拟合出的结果仅仅反映了所给的特定数据的特质 ...

  3. 机器学习算法-logistic回归算法

    Logistic回归算法调试 一.算法原理 Logistic回归算法是一种优化算法,主要用用于只有两种标签的分类问题.其原理为对一些数据点用一条直线去拟合,对数据集进行划分.从广义上来讲这也是一种多元 ...

  4. 神经网络、logistic回归等分类算法简单实现

    最近在github上看到一个很有趣的项目,通过文本训练可以让计算机写出特定风格的文章,有人就专门写了一个小项目生成汪峰风格的歌词.看完后有一些自己的小想法,也想做一个玩儿一玩儿.用到的原理是深度学习里 ...

  5. 【机器学习实战】第5章 Logistic回归

    第5章 Logistic回归 Logistic 回归 概述 Logistic 回归虽然名字叫回归,但是它是用来做分类的.其主要思想是: 根据现有数据对分类边界线建立回归公式,以此进行分类. 须知概念 ...

  6. logistic回归具体解释(二):损失函数(cost function)具体解释

    有监督学习 机器学习分为有监督学习,无监督学习,半监督学习.强化学习.对于逻辑回归来说,就是一种典型的有监督学习. 既然是有监督学习,训练集自然能够用例如以下方式表述: {(x1,y1),(x2,y2 ...

  7. 【机器学习实战】第5章 Logistic回归(逻辑回归)

    第5章 Logistic回归 <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/ ...

  8. 机器学习实战3:逻辑logistic回归+在线学习+病马实例

    本文介绍logistic回归,和改进算法随机logistic回归,及一个病马是否可以治愈的案例.例子中涉及了数据清洗工作,缺失值的处理. 一 引言 1 sigmoid函数,这个非线性函数十分重要,f( ...

  9. 05机器学习实战之Logistic 回归

    Logistic 回归 概述 Logistic 回归 或者叫逻辑回归 虽然名字有回归,但是它是用来做分类的.其主要思想是: 根据现有数据对分类边界线(Decision Boundary)建立回归公式, ...

随机推荐

  1. 极光推送(JPush)开篇

    Date:2019-11-11 读前思考: 极光推送是什么? 极光推送是能做什么?有什么优势? 怎么根据业务需求来实现极光推送服务呢? 简介 极光推送(JPush)是独立的第三方云推送平台,致力于为全 ...

  2. web开发基本概念

    一.什么是静态页面,什么是动态页面? 答:静态页面是不需要网络请求就可以看到的页面,保存在本地. 动态页面是需要网络请求才可以看到的页面,保存在服务器. 二.网页的运行环境? 答:浏览器 客户端 三. ...

  3. 不止面试—jvm类加载面试题详解

    面试题 带着问题学习是最高效的,本次我们将尝试回答以下问题: 什么是类的加载? 哪些情况会触发类的加载? 讲一下JVM加载一个类的过程 什么时候会为变量分配内存? JVM的类加载机制是什么? 双亲委派 ...

  4. 使用 Casbin 作为 ThinkPHP 的权限控制中间件

    PHP-Casbin 是一个强大的.高效的开源访问控制框架,它支持基于各种访问控制模型的权限管理. Think-Casbin 是一个专为 ThinkPHP5.1 定制的 Casbin 的扩展包,使开发 ...

  5. 2019年PHP面试题附答案(实战经验)

    出于一些原因近期做了一次工作变动,在职交接近一个半月时间大概面试了十五家公司,并且得到了自己比较满意的offer,最后基本上无缝衔接了新工作.总体来说,虽然准备的很充分,但面试期间还是暴露了许多问题, ...

  6. pat 1023 Have Fun with Numbers(20 分)

    1023 Have Fun with Numbers(20 分) Notice that the number 123456789 is a 9-digit number consisting exa ...

  7. 领扣(LeetCode)合并两个有序数组 个人题解

    给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n. ...

  8. C. Present(二分 + 扫描线)

    题目链接:http://codeforces.com/contest/460/problem/C 题意: n盆花,浇k次水, 每次可使花高度 + 1, 每次可浇相邻的w盆,ai 表示 i-th盆花 的 ...

  9. Project Euler 62: Cubic permutations

    立方数\(41063625 (345^3)\)的各位数重新排列形成另外两个立方数\(6623104 (384^3)\)和\(66430125 (405^3)\).事实上,\(41063625\)是满足 ...

  10. IntelliJ IDEA使用报错

    GZIPResponseStream不是抽象的, 并且未覆盖javax.servlet.ServletOutputStream中 继承了某个抽象类, 或者 实现某个接口这时候你必须 把基类或接口中的所 ...