吴恩达机器学习笔记(2)——Logitic 回归

机器学习个人笔记,学习中水平有限,内容如有缺漏还请多多包涵

Logictic回归是吴恩达课程的第7章,因为线性代数已经学过,而且主攻方向不是Octave,因此跳过了一些章节。目前实现了单,双变量的二分类逻辑回归,多分类的并未着手实现。

单变量,二分类的逻辑回归的python代码实现

import numpy as np
import matplotlib.pyplot as pltdef sigmoid(x):return 1/(1+np.exp(-x))def h(x,pram):#假设函数,这里等价于y=sigmoid(θTX)       temp=np.matmul(x,pram[1:].reshape(x.shape[1],1))+pram[0]return np.apply_along_axis(sigmoid, 0, temp)def logictic(a,itertimes,datax,datay):#单变量梯度下降的逻辑回归#a:学习率#itertimes:迭代次数#datax:数据集中的自变量部分#datay:数据集中的结果部分m=datax.shape[0]#训练集长度pram=np.zeros(datax.shape[1]+1)#参数,初始化为0temppram=np.zeros(datax.shape[1]+1)#临时存储本次迭代的参数for i in range(0,itertimes):#迭代过程,执行itertimes次temppram[0]=pram[0]-a*np.sum(h(datax,pram)-datay)#对参数θ0进行迭代 te=h(datax,pram)-datay.reshape(m,1)   for j in range(1,pram.shape[0]):#对剩余参数进行迭代        temppram[j]=pram[j]-a*np.sum((h(datax,pram)-datay.reshape(m,1)).reshape(1,m)*datax[...,j-1])          if i%10==0:print("迭代",i)print( "参数:",pram)print("log误差:",np.sum(-datay*np.log(h(datax,pram))-(1-datay)*np.log(1-h(datax,pram))))#每十代输出一次误差pram=tempprampassreturn pramx=np.array([range(1,11)]).T
print(x.shape[1])
y=np.array([[1,1,1,0,0,0,0,0,0,0]]).T
print(y.shape)
d=logictic(0.3, 1000, x, y)#执行逻辑回归算法,返回预测参数drawx=np.array([range(0, 100)]).T
drawx=np.apply_along_axis(lambda x:x/10, 0, drawx)
plt.figure()
plt.scatter(x, y)#绘制数据集的散点图
plt.plot(drawx, h(drawx,d),color='red')#绘制预测值的曲线图
plt.show()

运行结果

双变量,二分类的逻辑回归的python代码

import numpy as np
import matplotlib.pyplot as pltdef sigmoid(x):return 1/(1+np.exp(-x))def h(x,pram):#假设函数,这里等价于y=sigmoid(θTX)         temp=np.matmul(x,pram[1:].reshape(x.shape[1],1))+pram[0]return np.apply_along_axis(sigmoid, 0, temp)def logictic(a,itertimes,datax,datay):#逻辑回归#a:学习率#itertimes:迭代次数#datax:数据集中的自变量部分#datay:数据集中的结果部分m=datax.shape[0]#训练集长度pram=np.zeros(datax.shape[1]+1)#参数,初始化为0temppram=np.zeros(datax.shape[1]+1)#临时存储本次迭代的参数for i in range(0,itertimes):#迭代过程,执行itertimes次temppram[0]=pram[0]-a*np.sum(h(datax,pram)-datay)#对参数theta0进行迭代 te=h(datax,pram)-datayfor j in range(1,pram.shape[0]):#对剩余参数进行迭代        temppram[j]=pram[j]-a*np.sum((h(datax,pram)-datay).T*datax[...,j-1])          if i%10==0:print("迭代",i)print( "参数:",pram)                       print("log误差:",np.sum(-datay*np.log(h(datax,pram))-(1-datay)*np.log(1-h(datax,pram))))#每十代输出误差pram=tempprampassreturn pramx=np.zeros([100,2])#在10*10的样本空间中做逻辑回归
for i in range(0,10):    for j in range(0,10):       x[i*10+j][0]=ix[i*10+j][1]=j
print(x.shape[1])y=np.zeros([100,1])
for i in range(0,10):    for j in range(0,10):       if i+j-9>0:#数据集分类边界取直线y=-x+9y[i*10+j][0]=1print(y.shape)
d=logictic(0.01, 500, x, y)#执行逻辑回归算法,返回分类边界线的参数drawx=[]#设置用于绘图的坐标集合
drawy=[]
drawx1=[]
drawy1=[]
for i in range(0,100):if y[i]==1:#如果y中的第i个元素是1,则取出x中第i个样本作为坐标放入drawx列表drawx.append(x[i][0])drawy.append(x[i][1])else:#如果y中的第i个元素是0,则取出x中第i个样本作为坐标放入drawx1列表drawx1.append(x[i][0])drawy1.append(x[i][1])
plt.figure()
plt.scatter(drawx, drawy)#分别绘制数据集中drawx,drawx1两个分类的散点图
plt.scatter(drawx1, drawy1)
plt.plot(range(0,10), np.array(range(0,10))*-d[1]/d[2]-d[0]/d[2],color='red')#绘制分类线的图
plt.ylabel("var1")#注意不能设label为中文
plt.xlabel("var2")
plt.show()

实现过程记录

双变量逻辑回归的学习率要设置的比单变量时要低些,不然虽然可以计算出分类边界线的参数但计算log误差时会出现NAN值。
matplotlib设置图像的label为中文会出现乱码

公式部分

为了能在逻辑回归中继续使用梯度下降,我们定义了新的损失函数。
逻辑回归的损失函数定义为:
J ( θ ) = 1 m ∑ i = 0 m C o s t ( h θ ( x ( i ) ) − y ( i ) ) . J(\theta) =\frac{1}{m}\sum_{i=0}^m Cost(h_{\theta}(x^{(i)})-y^{(i)}). J(θ)=m1​i=0∑m​Cost(hθ​(x(i))−y(i)).
其中,Cost()函数部分定义为:
C o s t ( h θ ( x ( i ) ) − y ( i ) ) = − [ y ( i ) l o g h θ ( x ( i ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ] . Cost(h_{\theta}(x^{(i)})-y^{(i)})= -[y^{(i)} log h_{\theta}(x^{(i)})+(1-y^{(i)})log(1-h_{\theta}(x^{(i)}))]. Cost(hθ​(x(i))−y(i))=−[y(i)loghθ​(x(i))+(1−y(i))log(1−hθ​(x(i)))].
假设函数的新定义为:
h θ ( X ) = 1 1 + e − θ T X . h_\theta(X)=\frac{1}{1+e^{-\theta^{T}X}}. hθ​(X)=1+e−θTX1​.
个人认为引入sigmoid函数是为了加入分类所需的非线性特征
使用梯度下降的逻辑回归的迭代公式:

θ 0 = θ 0 − a ∗ ∑ i = 0 m ( h θ ( x ( i ) ) − y ( i ) ) . \theta_0 =\theta_0- a*\sum_{i=0}^m (h_{\theta}(x^{(i)})-y^{(i)}). θ0​=θ0​−a∗i=0∑m​(hθ​(x(i))−y(i)).
θ j = θ j − a ∗ ∑ i = 0 m ( h θ ( x ( i ) ) − y ( i ) ) ∗ x i . \theta_j =\theta_j- a*\sum_{i=0}^m (h_{\theta}(x^{(i)})-y^{(i)})*x^{i}. θj​=θj​−a∗i=0∑m​(hθ​(x(i))−y(i))∗xi.

学习视频:

逻辑回归.

其他笔记

  • 机器学习入门
    - 目录

个人机器学习笔记之逻辑回归相关推荐

  1. 机器学习笔记-基于逻辑回归的分类预测

    天池学习笔记:AI训练营机器学习-阿里云天池 基于逻辑回归的分类预测 1 逻辑回归的介绍和应用 1.1 逻辑回归的介绍 逻辑回归(Logistic regression,简称LR)虽然其中带有&quo ...

  2. 机器学习笔记(5)——逻辑回归

    上一篇:机器学习笔记(4)--多变量线性回归 逻辑回归实际是一种有监督学习中的分类算法,称为回归是历史原因 前言 前面我们已经学习了线性回归,线性回归适用于预测一个连续值,就是说预测值可能的范围存在连 ...

  3. python逻辑回归训练预测_[Python] 机器学习笔记 基于逻辑回归的分类预测

    导学问题 什么是逻辑回归(一),逻辑回归的推导(二 3),损失函数的推导(二 4) 逻辑回归与SVM的异同 逻辑回归和SVM都用来做分类,都是基于回归的概念 SVM的处理方法是只考虑 support ...

  4. 吴恩达《机器学习》学习笔记八——逻辑回归(多分类)代码

    吴恩达<机器学习>笔记八--逻辑回归(多分类)代码 导入模块及加载数据 sigmoid函数与假设函数 代价函数 梯度下降 一对多分类 预测验证 课程链接:https://www.bilib ...

  5. 吴恩达《机器学习》学习笔记七——逻辑回归(二分类)代码

    吴恩达<机器学习>学习笔记七--逻辑回归(二分类)代码 一.无正则项的逻辑回归 1.问题描述 2.导入模块 3.准备数据 4.假设函数 5.代价函数 6.梯度下降 7.拟合参数 8.用训练 ...

  6. 吴恩达《机器学习》学习笔记五——逻辑回归

    吴恩达<机器学习>学习笔记五--逻辑回归 一. 分类(classification) 1.定义 2.阈值 二. 逻辑(logistic)回归假设函数 1.假设的表达式 2.假设表达式的意义 ...

  7. 吴恩达机器学习课后习题——逻辑回归

    机器学习课后作业-逻辑回归 逻辑回归 逻辑回归算法,是一种给分类算法,这个算法的实质是:它输出值永远在0到 1 之间. 将要构建一个逻辑回归模型来预测,某个学生是否被大学录取.设想你是大学相关部分的管 ...

  8. 机器学习算法 03 —— 逻辑回归算法(精确率和召回率、ROC曲线和AUC指标、过采样和欠采样)

    文章目录 系列文章 逻辑回归 1 逻辑回归介绍 1.1 逻辑回归原理 输入 激活函数 1.2 损失以及优化 2 逻辑回归API介绍 3 案例:肿瘤良性恶性预测 4 分类模型的评估 4.1 分类评估方法 ...

  9. 机器学习:基于逻辑回归对航空公司乘客满意度的因素分析

    机器学习:基于逻辑回归对航空公司乘客满意度的因素分析 作者:i阿极 作者简介:数据分析领域优质创作者.多项比赛获奖者:博主个人首页

  10. 机器学习中二分类逻辑回归的学习笔记

    1 致谢 感谢 Andrew Ng的教导! 2 前言 逻辑回归是机器学习中很重要而且很基础的算法,它也代表了分类算法最基本的思想. 3 二分类逻辑回归逻辑回归算法 3.1 假设函数 假设函数的形式为: ...

最新文章

  1. javax.swing super()方法
  2. Visual Studio 2008/.NET Framework 3.5 WinForm窗体运用程序发布(部署)
  3. 解决Geoserver请求跨域的几种思路
  4. 牛客题霸 [比较版本号] C++题解/答案
  5. JAVA---DOS命令学习
  6. 读软件工程前三章后感
  7. 来自一个用户的体验-Alpha项目测试
  8. C# ashx生成的验证码
  9. kali 更新源遇到了证书的问题
  10. 当前的开源SLAM方案
  11. C语言自学入门方法介绍
  12. EAS 后台事务配置
  13. 在线OJ后端涉及到的知识点
  14. 小刘的BUG(json插件)
  15. android 滑动取值_Android View篇之调整字体大小滑杆的实现
  16. 头歌 初识MongoDB
  17. pd.set_option 问题
  18. 在OpenGL中创建一个球体动画,使球体在窗口内做自由落体运动,并在撞击地面后能够返回原来高度
  19. 华师大计算机在线测试,华师大英语B在线测试.doc
  20. 做本让客户念念不忘的产品手册

热门文章

  1. 3分钟告诉你量化投资为什么这么火
  2. 基于FastAPIPeewee作成2022年全车型数据库接口
  3. UG/NX二次开发 旋转视图 UF_VIEW_rotate_view
  4. autohotkey修饰符
  5. codeforces每日5题(均1600)-第三十三天
  6. 怎样拥有一个网站?从“域名注册”到“网站成功运行”全程概况总结!
  7. android智慧停车场代码,计算机视觉实战(十三)停车场车位识别(附完整代码)
  8. JDBC-06:PrepardeStatement操作BLOB类型字段
  9. Vue-案列-todelist
  10. 码农何苦为难码农(如何做平层管理)