百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

机器学习100天-Day1503训练模型-逻辑回归

toyiye 2024-04-27 03:47 26 浏览 0 评论

说明:本文依据《Sklearn 与 TensorFlow 机器学习实用指南》完成,所有版权和解释权均归作者和翻译成员所有,我只是搬运和做注解。 第四章是对模型训练内部工作流程的了解,帮助炼丹师们找到恰当的学习模型、算法、数据集。

为了尽量简单(懒),在这里默认已经了解线性回归、多项式回归、损失函数、梯度下降

1. 简单的线性回归模型,讨论两种不同训练方法的最优解

  • 封闭方程求根运算,得到模型在当前训练集上的最优解。
  • 迭代优化(梯度下降GD),调整模型参数获取最小损失函数。批量梯度下降、随机梯度下降、小批量梯度下降。
  • 2. 多项式回归,用来拟合非线性数据集
  • 介绍正则方式减少过拟合的出现
  • 3. 介绍Logistic回归
  • 4. 介绍Softmax回归

3. 逻辑回归

逻辑回归用于估计实例属于某个类别的概率,其实就是二分类器。

概率估计

逻辑回归模型计算输入的特征加权总和,再输入logistic函数进行处理后输出。生成一个逻辑方法图示,根据逻辑回归模型的输出值预测y

训练和损失函数

训练是为了得到θ使正例概率增大,负例概率减小,可以通过单个训练实例X的损失函数实现。 公式 逻辑回归损失函数(对数损失)

OK,得到这个损失函数之后如何求解?

无解的,因为没有等价的正态方程,但是这个损失函数是凸函数,可以通过求偏导数优化获取全局最小值。

决策边界

在这里使用iris数据库来分析逻辑回归。

iris中有三种Setosa,Versicolor,Virginica,可以建立一个分类器,通过花瓣宽度特征来识别Virginica。

1.加载数据

可以看到data项目中有四种字段[5.1, 3.5, 1.4, 0.2],这里只获取data中第三列数据。

对y数据进行处理,将label转为虚拟变量,这部分在机器学习Day3(机器学习100天-Day3) 中有介绍。

from sklearn import datasets
from sklearn.linear_model import LogisticRegression
iris=datasets.load_iris()
list(iris.keys())
X=iris['data'][:,3:]
y=(iris["target"] == 2).astype(np.int)

2.训练模型

log_reg=LogisticRegression()
log_reg.fit(X,y)

3.评估模型

评估模型,设定花瓣宽度从0到3厘米

X_new=np.linspace(0,3,1000).reshape(-1,1)
y_proba=log_reg.predict_proba(X_new)
plt.plot(X_new,y_proba[:,1],"g-",label="Iris-virginica")
plt.plot(X_new,y_proba[:,0],"b--",label="Not Iris-virginica")
plt.show()

4.确定决策边界

Virginica 花的花瓣宽度在1.4厘米到2.5厘米之间,而其他种类的花通常具有较小的花瓣宽度,范围从0.1厘米到1.8厘米。因此,分类器在发现2厘米以上时会给出高概率值,在1厘米以下时会给出低概率值,基于上图,进一步绘制决策边界来观察。可以发现1.6厘米时一个决策边界。当数值大于1.6的时候判定为是,小于1.6是判定为否。

X_new=np.linspace(0,3,1000).reshape(-1,1)
y_proba=log_reg.predict_proba(X_new)
# X_new[y_proba[:,1]>=0.5]指label高于50%的label,就是预测确定为Iris-virginica
decision_boundary=X_new[y_proba[:,1]>=0.5][0]
plt.figure(figsize=(8,3))
#低概率,blue,square=>bs
plt.plot(X[y==0],y[y==0],"bs")
#高概率,green,^=>g^
plt.plot(X[y==1],y[y==1],"g^")
#决策边界
plt.plot([decision_boundary,decision_boundary],[0,2],"k:",linewidth=2)
plt.plot(X_new,y_proba[:,1],"g-",label="Iris-virginica")
plt.plot(X_new,y_proba[:,0],"b--",label="Not Iris-virginica")
#箭头标识
plt.arrow(decision_boundary, 0.08, -0.3, 0, head_width=0.05, head_length=0.1, fc='b', ec='b')
plt.arrow(decision_boundary, 0.92, 0.3, 0, head_width=0.05, head_length=0.1, fc='g', ec='g')
plt.xlabel("Petal width (cm)", fontsize=14)
plt.ylabel("Probability", fontsize=14)
plt.legend(loc="center left", fontsize=14)
plt.axis([0, 3, -0.02, 1.02])
plt.show()
#可以发现决策边界为1.6156
print(decision_boundary) #=>1.61561562
log_reg.predict([[1.62],[1.58]]) #array([1, 0])

接下来教程引入两个特征来进行预测。图很骚啊,这段代码要好好看

X_double=iris['data'][:,(2,3)]
y_double=(iris["target"] == 2).astype(np.int)
log_reg_double=LogisticRegression(solver="liblinear", C=10**10, random_state=42)
log_reg_double.fit(X_double,y_double)
x0,x1=np.meshgrid(
 np.linspace(2.9, 7, 500).reshape(-1, 1),
 np.linspace(0.8, 2.7, 200).reshape(-1, 1),
 )
#ravel():将多维数组转为一维数组,如果没有必要,不会产生源数据的副本 
X_new_double=np.c_[x0.ravel(),x1.ravel()]
y_proba=log_reg_double.predict_proba(X_new_double)
plt.figure(figsize=(10, 4))
plt.plot(X_double[y_double==0, 0], X_double[y_double==0, 1], "bs")
plt.plot(X_double[y_double==1, 0], X_double[y_double==1, 1], "g^")
zz=y_proba[:,1].reshape(x0.shape)
contour=plt.contour(x0,x1,zz,cmap=plt.cm.brg)
left_right=np.array([2.9,7])
#生成决策边界
boundary=-(log_reg_double.coef_[0][0] * left_right + log_reg_double.intercept_[0]) / log_reg_double.coef_[0][1]
plt.clabel(contour,inline=1,fontsize=12)
plt.plot(left_right, boundary, "k--", linewidth=3)
#文字描述和标签描述
plt.text(3.5, 1.5, "Not Iris-Virginica", fontsize=14, color="b", ha="center")
plt.text(6.5, 2.3, "Iris-Virginica", fontsize=14, color="g", ha="center")
plt.xlabel("Petal length", fontsize=14)
plt.ylabel("Petal width", fontsize=14)
plt.axis([2.9, 7, 0.8, 2.7])
plt.show()

相关推荐

「linux专栏」top命令用法详解,再也不怕看不懂top了

在linux系统中,我们经常使用到的一个命令就是top,它主要是用来显示系统运行中所有的进程和进程对应资源的使用等信息,所有的用户都可以使用top命令。top命令内容量丰富,可令使用者头疼的是无法全部...

Linux 中借助 perf 对 php 程序模拟CPU高的案例分析

导语本文是一篇Linux借助工具分析CPU高的优化案例,没有任何干货内容,很详细的展示了优化CPU高的具体步骤,非常适合初中级读者阅读!...

centos漏洞处理方法(centos podman)

centos服务器最近有诸多漏洞,修复命令及对应的漏洞整理后,分享给大家RHSA-2020:1176-低危:avahi安全更新yumupdateavahi-libsRHSA-2017:326...

Linux上的free命令详解(Buffer和Cache)

解释一下Linux上free命令的输出。下面是free的运行结果,一共有4行。为了方便说明,我加上了列号。这样可以把free的输出看成一个二维数组FO(FreeOutput)。例如:FO[2][1]...

linux 命令行之你真的会用吗?--free 基本用法篇

free命令行统计内存使用率及swap交换分区的使用率数据。是由sourceforge负责维护的,在ubuntu上其包名为procps,这个源码包中,除了free还有ps,top,vmstat,ki...

kong api gateway 初体验(konga github)

kongapigateway初体验(firstsight?)。Kong是一个可扩展的开源API层(也称为API网关或API中间件)。Kong运行在任何RESTfulAPI的前面,并通过插件...

在Ubuntu下开启IP转发的方法(ubuntu20 ip)

IP地址分为公有ip地址和私有ip地址,PublicAddress是由INIC(internetnetworkinformationcenter)负责的,这些IP地址分配给了注册并向INIC提...

基于 Kubernetes 的 Serverless PaaS 稳定性建设万字总结

作者:许成铭(竞霄)数字经济的今天,云计算俨然已经作为基础设施融入到人们的日常生活中,稳定性作为云产品的基本要求,研发人员的技术底线,其不仅仅是文档里承诺的几个九的SLA数字,更是与客户切身利益乃...

跟老韩学Ubuntu Linux系列-sysctl 帮助文档

sysctl一般用于基于内核级别的系统调优,man帮助手册如下。...

如何在 Linux/Unix/Windows 中发现隐藏的进程和端口

unhide是一个小巧的网络取证工具,能够发现那些借助rootkit、LKM及其它技术隐藏的进程和TCP/UDP端口。这个工具在Linux、UNIX类、MS-Windows等操作系统下都...

跟老韩学Ubuntu Server 2204-Linux性能管理-uptime指令帮助手册

uptime指令是每个从事Linux系统工作的相关同学必知必会的指令之一,如下是uptime指令的帮助手册。UPTIME(1)...

Openwrt+Rclone+emby+KODI搭建完美家庭影音服务器

特别声明:本篇内容参考了波仔分享,在此表示感谢!上一篇《Openwrt+emby+KODI搭建家庭影音服务器》只适用影音下载到本地的情形,不能播放云盘中的影音,内容较少,缺少了趣味性,也不直观。...

Linux Shell脚本经典案例(linux shell脚本例子)

编写Shell过程中注意事项:开头加解释器:#!/bin/bash语法缩进,使用四个空格;多加注释说明。命名建议规则:变量名大写、局部变量小写,函数名小写,名字体现出实际作用。默认变量是全局的,在函数...

解决 Linux 性能瓶颈的黄金 60 秒

如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?来看Netflix性能工程团队的这篇博文,看它们通过十条命令在一分钟内对机器性能问题进行诊断。...

跟老韩学Ubuntu Server 2204-Linux性能管理-vmstat指令帮助手册

vmstat可查看ubuntlinux的综合性能,是每个从事Linux人员必知必会、需掌握的核心指令之一。vmstat指令帮助手册如下。VMSTAT(8)...

取消回复欢迎 发表评论:

请填写验证码