• 逻辑斯蒂回归模型

定义6.1(逻辑斯蒂分布):设X是连续随机变量,X服从逻辑斯蒂分布是指X具有下列分布函数和密度函数:

式中,为位置参数,为形状参数。

  • 二项逻辑斯蒂回归模型

定义6.2(逻辑斯蒂回归模型):二项逻辑斯蒂回归模型是如下的条件概率分布:

有时为了方便,将权值向量和输入向量加以扩充,仍记作w,x,即。这时,逻辑斯蒂回归模型如下:

考察逻辑斯蒂回归模型的特点。一个事件的几率是指该事件发生的概率与该时间不发生的概率的比值。如果事件发生的概率是p,那么该事件发生的几率是,该事件的对数几率或logit函数是:

对逻辑斯蒂回归而言,

即在逻辑斯蒂回归模型中,输出Y=1的对数几率是输入x的线性函数。

换一个角度看,考虑对输入x进行分类的线性函数,其值域为实数域。注意,这里。通过逻辑斯蒂回归模型定义可以将线性函数转换为概率:

这时,线性函数的值越接近正无穷,概率值就越接近1;线性函数的值越接近负无穷,概率值就越接近0.

  • 模型参数估计

逻辑斯蒂回归模型学习时,对于给定的训练数据集,其中,,可以应用极大似然估计法估计模型参数,从而得到逻辑斯蒂回归模型。

设:

似然函数为:

对数似然函数为:

对L(w)求极大值,得到w的估计值。

具体可参考:

对数几率回归(Logistic Regression)

deeplearning.ai深度学习——构建一个LR分类器来识别猫

  • 多项逻辑斯蒂回归

假设离散型随机变量Y的取值集合是,那么多项逻辑斯蒂回归模型是:

这里,

  • 练习

已知训练数据集D,其正实例点(Y=1)是,负实例点(Y=0)是

(1)用python自编程实现逻辑斯蒂回归模型,并对点进行分类。

# coding:utf-8
"""
@author:hanmy
@file:lr.py
@time:2019/05/17
"""
import numpy as npdef sigmoid(z):s = 1 / (1 + np.exp(-z))return s# 初始化参数
def initialize(X, Y):w = np.zeros(shape=(X.shape[1], Y.shape[1]))  # (3,1)b = 0return w, b# 前向和反向传播
def propagate(w, b, X, Y):Y_hat = sigmoid(np.dot(np.transpose(w), np.transpose(X)) + b)cost = -np.mean(Y * np.log(Y_hat) + (1 - Y) * np.log(1 - Y_hat))m = len(X)dw = np.dot(np.transpose(X), np.transpose(Y_hat - Y)) / mdb = np.mean(Y_hat - Y)return dw, db, cost# 梯度下降法优化参数
def optimize(w, b, X, Y, iterations, alpha):for i in range(iterations):dw, db, cost = propagate(w, b, X, Y)w -= alpha * dwb -= alpha * dbif i % 10000 == 0:print("{0} steps' cost:{1}".format(i, cost))return w, b# 预测待分类点
def predict(w, b, X):m = len(X)Y_predition = np.zeros(shape=(1, m))Y_hat = sigmoid(np.dot(np.transpose(w), np.transpose(X)) + b)for i in range(Y_hat.shape[1]):if Y_hat[0][i] <= 0.5:Y_predition[0][i] = 0else:Y_predition[0][i] = 1return Y_preditionif __name__ == "__main__":X = np.array([[3, 3, 3],[4, 3, 2],[2, 1, 2],[1, 1, 1],[-1, 0, 1],[2, -2, 1]])  # (6,3)Y = np.array([[1, 1, 1, 0, 0, 0]])  # (1,6)test = np.array([[1, 2, -2]])iterations = 100000alpha = 0.01w, b = initialize(X, Y)w, b = optimize(w, b, X, Y, iterations, alpha)Y_prediction = predict(w, b, X)accuracy = 0for i in range(Y.shape[1]):if Y[0][i] == Y_prediction[0][i]:accuracy += 1accuracy /= Y.shape[1]print("训练集上的准确率:", accuracy)y_prediction = predict(w, b, test)print("测试点的预测分类为:Y =", np.squeeze(y_prediction).astype(np.int))

训练过程和预测结果为:

0 steps' cost:0.6931471805599451
10000 steps' cost:0.10335421644003383
20000 steps' cost:0.061108258043039126
30000 steps' cost:0.0426798495066772
40000 steps' cost:0.03255867460823466
50000 steps' cost:0.026223448952461724
60000 steps' cost:0.021907564790076998
70000 steps' cost:0.018788058230208335
80000 steps' cost:0.016432734621430706
90000 steps' cost:0.014593908080620305
训练集上的准确率: 1.0
测试点的预测分类为:Y = 0

(2)试调用sklearn.linear_model的LogisticRegression模块,对点进行分类,尝试改变参数,选择不同算法,如梯度下降法和拟牛顿法。

LogisticRegression(penalty='l2', dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='warn', max_iter=100, multi_class='warn', verbose=0, warm_start=False, n_jobs=None)

# coding:utf-8
"""
@author:hanmy
@file:lr_sklearn.py
@time:2019/05/17
"""
from sklearn.linear_model import LogisticRegression
import numpy as npif __name__=="__main__":# 训练数据集X_train = np.array([[3, 3, 3],[4, 3, 2],[2, 1, 2],[1, 1, 1],[-1, 0, 1],[2, -2, 1]])y_train = np.array([1, 1, 1, 0, 0, 0])# 选择不同solver,构建实例,进行训练、测试methods = ["liblinear", "newton-cg", "lbfgs", "sag", "saga"]res = []X_new = np.array([[1, 2, -2]])for method in methods:clf = LogisticRegression(solver=method, intercept_scaling=2, max_iter=1000)clf.fit(X_train, y_train)# 预测新数据y_predict = clf.predict(X_new)# 利用已有数据对训练模型进行评价X_test = X_trainy_test = y_traincorrect_rate = clf.score(X_test, y_test)res.append((y_predict, correct_rate))# 格式化输出methods = ["liblinear", "newton-cg", "lbfgs", "sag", "saga"]print("solver选择:{}".format(" ".join(method for method in methods)))print("{}被分类为:{}".format(X_new[0], " ".join(str(re[0]) for re in res)))print("测试{}组数据,正确率:{}".format(X_train.shape[0], " ".join(str(round(re[1], 1)) for re in res)))

输出结果为:

solver选择:liblinear newton-cg lbfgs sag saga
[ 1  2 -2]被分类为:[0] [0] [0] [0] [0]
测试6组数据,正确率:1.0 1.0 1.0 1.0 1.0

《统计学习方法》——逻辑斯蒂回归相关推荐

  1. 统计学习方法|逻辑斯蒂原理剖析及实现

    欢迎直接到我的博客查看最近文章:www.pkudodo.com.更新会比较快,评论回复我也能比较快看见,排版也会更好一点. 原始blog链接: http://www.pkudodo.com/2018/ ...

  2. 逻辑斯蒂回归_逻辑斯蒂回归详细解析 | 统计学习方法学习笔记 | 数据分析 | 机器学习...

    本文包括: 重要概念 逻辑斯蒂回归和线性回归 二项逻辑斯谛回归模型 逻辑斯蒂回顾与几率 模型参数估计 多项逻辑斯谛回归 其它有关数据分析,机器学习的文章及社群 1.重要概念: 在正式介绍逻辑斯蒂回归模 ...

  3. 统计学习方法读书笔记(六)-逻辑斯蒂回归与最大熵模型(迭代尺度法(IIS))

    全部笔记的汇总贴:统计学习方法读书笔记汇总贴 逻辑斯谛回归 (logistic regression )是统计学习中的经典分类方法.最大熵是概率模型学习的一个准则,将其推广到分类问题得到最大熵模型(m ...

  4. 李航统计学习方法 Chapter6 逻辑斯蒂回归

    第6章 逻辑斯蒂回归和最大熵模型 逻辑斯谛回归(LR)是经典的分类方法 1.逻辑斯谛回归模型是由以下条件概率分布表示的分类模型.逻辑斯谛回归模型可以用于二类或多类分类. P(Y=k∣x)=exp⁡(w ...

  5. 学习笔记——逻辑斯蒂回归与最大熵模型

    逻辑斯蒂回归(logistic regression)是统计学习中的经典分类方法.最大熵是概率模型学习的一个准则,将其推广到分类问题得到最大熵模型(maximum entropy).都属于对数线性模型 ...

  6. 数据挖掘-二项逻辑斯蒂回归模型算法的R实现

    本次为学生时期所写的实验报告,代码程序为课堂学习和自学,对网络程序有所参考,如有雷同,望指出出处,谢谢! 基础知识来自教材:李航的<统计学习方法> 本人小白,仍在不断学习中,有错误的地方恳 ...

  7. 逻辑斯蒂回归(logistic regression)原理小结

    逻辑斯蒂回归(logistic regression)原理小结 1. 模型函数 2. 损失函数 3. 学习算法 4. 加正则项的逻辑斯蒂回归 5. 多项逻辑斯蒂回归 6. 模型综合评价 7. 二分类 ...

  8. 细讲逻辑斯蒂回归与朴素贝叶斯、最大熵原理的爱恨交织(长文)

    好早之前就发现逻辑斯蒂回归好像和朴素贝叶斯里面的后验概率公式还有最大似然.信息熵.交叉熵.伯努利分布.回归分析.几率(odds)等等有着千丝万缕CZFZ(错综复杂).PSML(扑朔迷离)的关系.一直感 ...

  9. 逻辑斯蒂回归模型——逻辑斯蒂分布、二项逻辑斯蒂回归模型、参数估计与多项逻辑斯蒂回归

    本笔记整理自李航老师<统计学习方法>第二版 第六章 逻辑斯蒂回归是统计学习中经典的分类方法. 逻辑斯蒂分布 F(x)=P(X≤x)=11+e−(x−μ)/γF(x) = P(X\leq x ...

  10. 逻辑斯蒂回归(Logistic)

    一.线性回归 1.线性回归的概念   如果特征值之间存在线性关系就可以使用线性回归建模对其预测结果. (1)函数模型 (2)最小二乘法求解   何为最小二乘法,其实很简单.我们有很多的给定点,这时候我 ...

最新文章

  1. 推荐一个 Java 接口快速开发框架
  2. css y轴溢出滚动条,x轴溢出显示
  3. Py之gensim:gensim的简介、安装、使用方法之详细攻略
  4. php 存储多选项_php高并发之opcache详解
  5. 与华为交换机用access_学校机房项目交换机的配置,理解这篇,交换机配置不再难...
  6. hdu-5703 Desert(水题)
  7. QDateTimeEdit使用
  8. zuul源码分析之Request生命周期管理
  9. Java进程与子进程交互
  10. 【机器学习-斯坦福】学习笔记7 - 最优间隔分类器问题
  11. 第七代电子计算机,基于全新第七代智能英特尔®酷睿™处理器的最佳PC全面来袭...
  12. Spring的事务注解@Transactional 出现的6种失效场景
  13. 个人计算机网刻系统,诚龙网维全自动pxe网刻工具_win7网刻工具_网刻win7系统工具...
  14. 【windows】win10录屏录屏内声音
  15. Flink POJO类状态使用注意事项
  16. 【Python】爬取理想论坛单帖爬虫
  17. 使用C/C++制作简单的俄罗斯方块 一
  18. 内核模式 vs 用户模式
  19. 树莓派魔镜项目——笔记三 第三方库
  20. swing打地鼠游戏_你还记得那个超级玛丽吗?经典的单机游戏

热门文章

  1. 第二次结对编程作业——毕业导师智能匹配
  2. nginx-upload-module模块实现文件断点续传
  3. perl学习二:简单变量
  4. (转载)C#中如何获取当前路径的几种方法
  5. Python3 OpenCV
  6. ERDAS 安装完成之后如何打开软件新建工程
  7. android 中国市场份额 2015,2015年安卓芯片市场分析:不再一家独大
  8. Android仿IOS有弹性ScrollView
  9. android自定义趋势图
  10. 面试鹅厂,我被虐的体无完肤。。。