数据挖掘算法(三)--logistic回归
数据挖掘算法学习笔记汇总
数据挖掘算法(一)–K近邻算法 (KNN)
数据挖掘算法(二)–决策树
数据挖掘算法(三)–logistic回归
在介绍logistic回归之前先复习几个基础知识点,有助于后面的理解。
基本数学知识点
1、对数似然函数
若总体X为离散型,其概率分布列为
其中θ为未知参数。设 (X1,X2,...,Xn) 是取自总体样本容量为n的样本,则(X1,X2,...,Xn)的联合概率分布率为
又设(X1,X2,...,Xn)的一组观测值为(x1,x2,...,xn),易知样本X1,X2,...,Xn取到观测值 x1,x2,...,xn 的概率为
这一概率随 θ 的取值而变化,它是 θ 的函数,称 L(θ) 为样本的似然函数。但是由于来连乘的函数处理起来比较麻烦,所以对 L(θ) 取自然对数变成加法来处理要简单点。
2、logistic函数
logistic函数或logistic曲线是常见的“S”形(sigmoid curve ,S形曲线),方程式如下:
其中
- e自然对数
- x0 S形中点的x值
- L曲线的 最大值
- k曲线的陡度
上图是L=1,k=1,x0=0时的图像
这里主要说明下这个函数的导数的性质,后面推导的时候会用到。f(x)=11+e−x=ex1+exddxf(x)=ex(1+ex)−exex(1+ex)2ddxf(x)=ex(1+ex)2=f(x)(1−f(x))
logistic回归数学推导
先看一个简单的例子:
我们将平面上的点分为两类,中间的红色线条为边界。
预测类别y=1 如果−3+x1+x2≥0预测类别y=0 如果−3+x1+x2<0
此例子中
对更多维的数据进行分类时,线性边界的情况,边界形式如下:
根据logistic回归可知预测函数为:
hθ(x(i)函数的值有特殊的含义,它表示结果取1的概率,因此对于输入x分类结果为类别1和类别0的概率分别为:
合起来写则可以得到下式:
取似然函数得到下式:
求自然对数得到对数似然函数:
最大似然估计就是要求得使l(θ)取最大值时的θ,利用梯度上升法求解,求得的θ就是要求的最佳参数。下面是利用梯度上升法求解过程。
求利用梯度上升法求解l(θ)的最大值时,根据梯度上升法知道θ的更新公式如下:
下面先求出l(θ)的偏导数:
因为g(θTxi)是logistic函数
所以我们利用前面讲的logistic函数的导数性质可以将l(θ)的偏导数转化
这样就得到了更新的过程
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回归的更多相关文章
- 常见算法(logistic回归,随机森林,GBDT和xgboost)
常见算法(logistic回归,随机森林,GBDT和xgboost) 9.25r早上面网易数据挖掘工程师岗位,第一次面数据挖掘的岗位,只想着能够去多准备一些,体验面这个岗位的感觉,虽然最好心有不甘告终 ...
- 第三集 欠拟合与过拟合的概念、局部加权回归、logistic回归、感知器算法
课程大纲 欠拟合的概念(非正式):数据中某些非常明显的模式没有成功的被拟合出来.如图所示,更适合这组数据的应该是而不是一条直线. 过拟合的概念(非正式):算法拟合出的结果仅仅反映了所给的特定数据的特质 ...
- 机器学习算法-logistic回归算法
Logistic回归算法调试 一.算法原理 Logistic回归算法是一种优化算法,主要用用于只有两种标签的分类问题.其原理为对一些数据点用一条直线去拟合,对数据集进行划分.从广义上来讲这也是一种多元 ...
- 神经网络、logistic回归等分类算法简单实现
最近在github上看到一个很有趣的项目,通过文本训练可以让计算机写出特定风格的文章,有人就专门写了一个小项目生成汪峰风格的歌词.看完后有一些自己的小想法,也想做一个玩儿一玩儿.用到的原理是深度学习里 ...
- 【机器学习实战】第5章 Logistic回归
第5章 Logistic回归 Logistic 回归 概述 Logistic 回归虽然名字叫回归,但是它是用来做分类的.其主要思想是: 根据现有数据对分类边界线建立回归公式,以此进行分类. 须知概念 ...
- logistic回归具体解释(二):损失函数(cost function)具体解释
有监督学习 机器学习分为有监督学习,无监督学习,半监督学习.强化学习.对于逻辑回归来说,就是一种典型的有监督学习. 既然是有监督学习,训练集自然能够用例如以下方式表述: {(x1,y1),(x2,y2 ...
- 【机器学习实战】第5章 Logistic回归(逻辑回归)
第5章 Logistic回归 <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/ ...
- 机器学习实战3:逻辑logistic回归+在线学习+病马实例
本文介绍logistic回归,和改进算法随机logistic回归,及一个病马是否可以治愈的案例.例子中涉及了数据清洗工作,缺失值的处理. 一 引言 1 sigmoid函数,这个非线性函数十分重要,f( ...
- 05机器学习实战之Logistic 回归
Logistic 回归 概述 Logistic 回归 或者叫逻辑回归 虽然名字有回归,但是它是用来做分类的.其主要思想是: 根据现有数据对分类边界线(Decision Boundary)建立回归公式, ...
随机推荐
- 详解Spring Security的formLogin登录认证模式
一.formLogin的应用场景 在本专栏之前的文章中,已经给大家介绍过Spring Security的HttpBasic模式,该模式比较简单,只是进行了通过携带Http的Header进行简单的登录验 ...
- python06-列表表达式、生成器表达式及其面试题、解耦简单介绍、函数递归相关
目录: 一.列表推导式 二.生成器表达式 三.集合生成器 四.生成器面试题 五.解耦简单介绍 六.函数递归相关 一.列表推导式 需求:将[1,3,5]中的每个元素平方 正常思路: new_list = ...
- nyoj 25-A Famous Music Composer(字符串)
25-A Famous Music Composer 内存限制:64MB 时间限制:1000ms Special Judge: No accepted:4 submit:9 题目描述: Mr. B i ...
- nyoj 29-求转置矩阵问题 (行,列位置调换)
29-求转置矩阵问题 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:8 submit:18 题目描述: 求一个三行三列的转置矩阵. 输入描述: 第一 ...
- 微信小程序-rpx
rpx 是微信小程序解决自适应屏幕尺寸的尺寸单位.微信小程序规定屏幕的宽度为750rpx. 微信小程序同时也支持rem尺寸单位, rem 规定屏幕的宽度为20rem, 所以 1rem = (750/2 ...
- deepin安装pip
sudo apt install python3-venv python3-pip 升级最新版 pip3 install --upgrade pip 更新完以后就报错网上的解决办法没有好使的 退回版 ...
- PHP变量的初始化以及赋值方式介绍
什么是变量 变量通俗的来说是一种容器.根据变量类型不同,容器的大小不一样,自然能存放的数据大小也不相同.在变量中存放的数据,我们称之为变量值. PHP 中的变量用一个美元符号后面跟变量名来表示.变量名 ...
- php为什么需要异步编程?php异步编程的详解(附示例)
本篇文章给大家带来的内容是关于php为什么需要异步编程?php异步编程的详解(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 我对 php 异步的知识还比较混乱,写这篇是为了 ...
- Python中lambda的使用,与它的三个好基友介绍!
匿名函数lambda 除了def语句,python还提供了一种生成函数对象的表达式形式.由于它与LISP语言中的一个工具类似,所以称为lambda. 就像def一样,这个表达式创建了一个之后能够调用的 ...
- Tomcat安装和使用
1.Tomcat简介 Tomcat是Apache开源组织下的开源免费的中小型Web应用服务器,支持javaEE中的servlet和jsp规范. 2.Windows版安装和使用 下载地址:http:// ...