个人机器学习笔记之逻辑回归
吴恩达机器学习笔记(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(θ)=m1i=0∑mCost(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.
学习视频:
逻辑回归.
其他笔记
- 机器学习入门
- 目录
个人机器学习笔记之逻辑回归相关推荐
- 机器学习笔记-基于逻辑回归的分类预测
天池学习笔记:AI训练营机器学习-阿里云天池 基于逻辑回归的分类预测 1 逻辑回归的介绍和应用 1.1 逻辑回归的介绍 逻辑回归(Logistic regression,简称LR)虽然其中带有&quo ...
- 机器学习笔记(5)——逻辑回归
上一篇:机器学习笔记(4)--多变量线性回归 逻辑回归实际是一种有监督学习中的分类算法,称为回归是历史原因 前言 前面我们已经学习了线性回归,线性回归适用于预测一个连续值,就是说预测值可能的范围存在连 ...
- python逻辑回归训练预测_[Python] 机器学习笔记 基于逻辑回归的分类预测
导学问题 什么是逻辑回归(一),逻辑回归的推导(二 3),损失函数的推导(二 4) 逻辑回归与SVM的异同 逻辑回归和SVM都用来做分类,都是基于回归的概念 SVM的处理方法是只考虑 support ...
- 吴恩达《机器学习》学习笔记八——逻辑回归(多分类)代码
吴恩达<机器学习>笔记八--逻辑回归(多分类)代码 导入模块及加载数据 sigmoid函数与假设函数 代价函数 梯度下降 一对多分类 预测验证 课程链接:https://www.bilib ...
- 吴恩达《机器学习》学习笔记七——逻辑回归(二分类)代码
吴恩达<机器学习>学习笔记七--逻辑回归(二分类)代码 一.无正则项的逻辑回归 1.问题描述 2.导入模块 3.准备数据 4.假设函数 5.代价函数 6.梯度下降 7.拟合参数 8.用训练 ...
- 吴恩达《机器学习》学习笔记五——逻辑回归
吴恩达<机器学习>学习笔记五--逻辑回归 一. 分类(classification) 1.定义 2.阈值 二. 逻辑(logistic)回归假设函数 1.假设的表达式 2.假设表达式的意义 ...
- 吴恩达机器学习课后习题——逻辑回归
机器学习课后作业-逻辑回归 逻辑回归 逻辑回归算法,是一种给分类算法,这个算法的实质是:它输出值永远在0到 1 之间. 将要构建一个逻辑回归模型来预测,某个学生是否被大学录取.设想你是大学相关部分的管 ...
- 机器学习算法 03 —— 逻辑回归算法(精确率和召回率、ROC曲线和AUC指标、过采样和欠采样)
文章目录 系列文章 逻辑回归 1 逻辑回归介绍 1.1 逻辑回归原理 输入 激活函数 1.2 损失以及优化 2 逻辑回归API介绍 3 案例:肿瘤良性恶性预测 4 分类模型的评估 4.1 分类评估方法 ...
- 机器学习:基于逻辑回归对航空公司乘客满意度的因素分析
机器学习:基于逻辑回归对航空公司乘客满意度的因素分析 作者:i阿极 作者简介:数据分析领域优质创作者.多项比赛获奖者:博主个人首页
- 机器学习中二分类逻辑回归的学习笔记
1 致谢 感谢 Andrew Ng的教导! 2 前言 逻辑回归是机器学习中很重要而且很基础的算法,它也代表了分类算法最基本的思想. 3 二分类逻辑回归逻辑回归算法 3.1 假设函数 假设函数的形式为: ...
最新文章
- javax.swing super()方法
- Visual Studio 2008/.NET Framework 3.5 WinForm窗体运用程序发布(部署)
- 解决Geoserver请求跨域的几种思路
- 牛客题霸 [比较版本号] C++题解/答案
- JAVA---DOS命令学习
- 读软件工程前三章后感
- 来自一个用户的体验-Alpha项目测试
- C# ashx生成的验证码
- kali 更新源遇到了证书的问题
- 当前的开源SLAM方案
- C语言自学入门方法介绍
- EAS 后台事务配置
- 在线OJ后端涉及到的知识点
- 小刘的BUG(json插件)
- android 滑动取值_Android View篇之调整字体大小滑杆的实现
- 头歌 初识MongoDB
- pd.set_option 问题
- 在OpenGL中创建一个球体动画,使球体在窗口内做自由落体运动,并在撞击地面后能够返回原来高度
- 华师大计算机在线测试,华师大英语B在线测试.doc
- 做本让客户念念不忘的产品手册
热门文章
- 3分钟告诉你量化投资为什么这么火
- 基于FastAPIPeewee作成2022年全车型数据库接口
- UG/NX二次开发 旋转视图 UF_VIEW_rotate_view
- autohotkey修饰符
- codeforces每日5题(均1600)-第三十三天
- 怎样拥有一个网站?从“域名注册”到“网站成功运行”全程概况总结!
- android智慧停车场代码,计算机视觉实战(十三)停车场车位识别(附完整代码)
- JDBC-06:PrepardeStatement操作BLOB类型字段
- Vue-案列-todelist
- 码农何苦为难码农(如何做平层管理)