热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

机器学习总结(二):逻辑回归

上一篇博客我简要总结了线性回归的知识点,这篇博客将主要回顾逻辑回归的知识点,作为线性模型的另一种,逻辑回归主要用于分类问题,即用于因变量是离散类型的场景,在实际的应用中尤其是二分类问题中

上一篇博客我简要总结了线性回归的知识点,这篇博客将主要回顾逻辑回归的知识点,作为线性模型的另一种,逻辑回归主要用于分类问题,即用于因变量是离散类型的场景,在实际的应用中尤其是二分类问题中比较常见。

逻辑回归知识点


  • 逻辑回归损失函数及其梯度的推导
  • 决策边界(decision boundary)
  • 高级优化算法
  • 多类别分类问题
  • 逻辑回归代码实现
  • 正则化后的逻辑回归

以上知识点因为数学公式较多,编辑困难的原因,我都采用手写的形式呈现出来,具体可见最后面的附加笔记部分。

逻辑回归代码实现

import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model, discriminant_analysis, cross_validation

def load_data():
iris = datasets.load_iris()
y_train = iris.target
#在此最后一个参数stratify表示分层采样,因为原始的iris数据集前50个样本类别都是0,中间50个样本类别是1
#最后50个样本的类别是2,如果不采用分层采样的话,会造成测试数据集不是无偏的情况
return cross_validation.train_test_split(iris.data, iris.target, test_size=0.25, random_state=0, stratify=y_train)

def test_logisticRegression(*data):
X_train, X_test, y_train, y_test = data
logisticRegression = linear_model.LogisticRegression()
logisticRegression.fit(X_train, y_train)
print("权重向量:%s, b的值为:%s" % (logisticRegression.coef_, logisticRegression.intercept_))
print("预测性能得分: %.2f" % logisticRegression.score(X_test, y_test))

# 测试multi_class参数对分类结果的影响,multi_class参数可以设置成ovr即one-vs-rest策略和multinomial两种
# 默认采用的是one-vs-rest策略,但是逻辑回归是支持多类分类的,在我们设置multi_class='multinomial'使用
# LogisticRegression的时候,只有solver参数为牛顿法或者拟牛顿法才能配合其使用,否则会报错。
def test_logisticRegression_multinomial(*data):
X_train, X_test, y_train, y_test = data
logisticRegression = linear_model.LogisticRegression(multi_class='multinomial', solver='lbfgs')
logisticRegression.fit(X_train, y_train)
print("权重向量:%s, b的值为:%s" % (logisticRegression.coef_, logisticRegression.intercept_))
print("预测性能得分: %.2f" % logisticRegression.score(X_test, y_test))

#测试参数C对分类结果的影响,参数C表示正则化系数的倒数,他越小则正则化项的权重越大。
def test_logisticRegression_C(*data):
X_train, X_test, y_train, y_test = data
# 创建从10的-2次方开始,10的4次方结束的100个数组成的等比数列,注意logspace函数默认是用10作为幂的
# 如果想要修改幂的话,可以设置base参数
Cs = np.logspace(-2, 4, num=100)
scores = []
for C in Cs:
logisticRegression = linear_model.LogisticRegression(C=C)
logisticRegression.fit(X_train, y_train)
scores.append(logisticRegression.score(X_test, y_test))
return Cs, scores

def show_plot(Cs, scores):
figure = plt.figure()
axe = figure.add_subplot(1, 1, 1)
axe.plot(Cs, scores)
axe.set_xlabel(r"C")
axe.set_ylabel(r"score")
axe.set_xscale('log')
axe.set_title("LogisticRegression")
plt.show()

if __name__== '__main__':
#使用默认的参数情况下的逻辑回归
X_train, X_test, y_train, y_test = load_data()
test_logisticRegression(X_train, X_test, y_train, y_test)

#设置参数multi_class='multinomial',参数solver='lbfgs'情况下的逻辑回归
test_logisticRegression_multinomial(X_train, X_test, y_train, y_test)

#测试参数C对逻辑回归分类结果的影响,并绘制出C值与预测准确率之间的图像
Cs, scores = test_logisticRegression_C(X_train, X_test, y_train, y_test)
show_plot(Cs, scores)

注释:test_logisticRegression方法使用的是默认参数的逻辑回归;test_logisticRegression_multinomial方法使用的是设置了multi_class和solver参数的逻辑回归;test_logisticRegression_C方法使用的是设置了参数C的逻辑回归。

示例输出

权重向量:[[ 0.39310895 1.35470406 -2.12308303 -0.96477916]
[ 0.22462128 -1.34888898 0.60067997 -1.24122398]
[-1.50918214 -1.29436177 2.14150484 2.2961458 ]]
, b的值为:[ 0.24122458 1.13775782 -1.09418724]
预测性能得分: 0.97
权重向量:[[-0.38369615 0.85492705 -2.27255078 -0.98450966]
[ 0.34345813 -0.3737305 -0.03022902 -0.86134613]
[ 0.04023802 -0.48119655 2.3027798 1.84585579]]
, b的值为:[ 8.80069791 2.46878114 -11.26947905]
预测性能得分: 1.00

这里写图片描述

可以看到,使用默认参数的逻辑回归,准确率能达到97%;设置multi_class以及solver参数之后的逻辑回归,准确率居然能达到100%;而对于设置了不同C值的逻辑回归,随着C值的变大(正则化项变小,因为C值是正则化系数的倒数,系数变大,为了保证损失函数变小,正则化项只能变小啦),预测的准确率是呈现上升趋势的,当C值增大到一定程度之后,准确率也维持在一个相对稳定的状态了。

附加笔记

这里写图片描述这里写图片描述这里写图片描述这里写图片描述

参考文献

  • python大战机器学习
  • Andrew Ng 机器学习公开课
  • http://www.jianshu.com/p/f374de37efc3
  • http://blog.csdn.net/programmer_wei/article/details/52072939

推荐阅读
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
author-avatar
mobiledu2502855247
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有