机器学习吴恩达——第二周

7 逻辑回归

7.1 分类问题

    在分类问题中,我们要预测的变量y是离散的值,比如说0,1。这时我们可以采用逻辑回归来处理问题。

    在分类问题中,我们尝试预测的是结果是否属于某一个类(例如正确或错误)。分类问题的例子有:判断一封电子邮件是否是垃圾邮件;判断一次金融交易是否是欺诈;之前我们 也谈到了肿瘤分类问题的例子,区别一个肿瘤是恶性的还是良性的。

    首先是二元的分类问题,那么结果y只有两种情况,0和1.


7786871-1579a0cead6bd7a6.png
二元分类问题

对于线性回归来说,其结果可能大于1或者小于0。但对于逻辑回归来说,其输出值永远在0和1之间。

7.2 假说表示

    逻辑回归的输出变量范围始终在0和1 之间,逻辑回归模型的假设是:h?(?) = ?(???)。其中:X表示特征向量,g表示逻辑函数中的一个常用的函数:S形函数。其公式为?(?)=(1+e的负z次方)分之1。


7786871-51b3bf6a29874bf9.png
S函数图像

    h?(?)的作用是,对于给定的输入变量,根据选择的参数计算输出变量=1 的可能性,即h?(?) = ?(? = 1|?; ?)。

    比如说h? (?)等于0.6,即说明y=1的概率为0.6,y=0的概率为0.4。

7.3 判定边界

    这里首先给出(下)决策边界的定义:

7786871-d5750e64907d08b1.png
逻辑回归函数图像

    在逻辑回归中,我们认为hx大于等于0.5时,y=1,反之y=0。而在gz图像中我们可以看出来,z=0的时候gz=0.5。z>0的时候gz大于0.5,z<0的时候gz小于0.5。即,z大于0,y=1,z小于0,y=0.

即z是判断y=0还是=1的边界。

再比如说:


7786871-1317a3c6bca27548.png
图1
7786871-af0b3c020221d12b.png
图2

在图1中凡是x1+x2的值高于中间的线的时候,都认为y=1,反之认为y=0。

在图二中这条边界线则变成了一个圆。

也就是说,在不同情况下的边界线是不相同的,那么就需要不同的判别式进行拟合。

7.4代价函数

    承接上文,我们既然要对不同对判别式进行拟合,那么如何拟合逻辑回归模型的参数?呢?这里又需要和线性回归一样,定义代价函数。

    对于线性回归,我们定义的代价函数是所有模型误差的平方和。但是对与逻辑回归的hx来说,如果同样用这样的代价函数,那么我们得到的代价函数将是一个非凸(non-convex)函数。


7786871-47e9a68d0bbf2b94.png
非凸与凸

那么代价函数就存在许多局部最小值,影响梯度下降算法寻找全局最小值。

因此我们重新定义逻辑回归的代价函数:


7786871-dc5827f23851b2b8.png
代价函数


7786871-43bee20ad5c20b71.png
cost函数

可以得出hx与cost的关系:


7786871-cbe7deddb2a07d28.png
cost与hx

从图中图像可以得知,当y=1的时候,如果hx等于1,则代价为0,如果hx小于1,则hx越小于1,代价就越大。如果hx等于0,则代价无限大。同理y=0的时候也是如此。

将构造的cost简化如下:

7786871-e78cfede6691e48b.png
简化后的cost

得到代价函数之后就可以用梯度下降算法来求得使代价函数最小的参数了。

具体算法为:


7786871-0383a297aeffb227.png
梯度下降具体做法

虽然凸性分析我们没学过,但是视频中证明了我们选的代价函数会造成一个凸优化问题,代价函数会是一个凸函数,且没有局部最优值。

注:特征缩放依旧在逻辑回归的梯度下降里必要!

一些梯度下降算法之外的选择: 除了梯度下降算法以外,还有一些常被用来令代价函数最小的算法,这些算法更加复杂和优越,而且通常不需要人工选择学习率,通常比梯度下降算法要更加快速。这些算法有:共轭梯度(Conjugate Gradient),局部优化法(Broydenfletcher goldfarb shann,BFGS)和有限内存局部优化法(LBFGS) ,fminunc 是 matlab 和 octave中都带的一个最小值优化函数,使用时我们需要提供代价函数和每个参数的求导。


7.5 简化的成本函数和梯度下降

首先这是我们对代价函数的最初的定义:


7786871-93b174dc805e0322.png
逻辑回归的代价函数

化简合并之后可得:

7786871-f75b6ec339d5cdbd.png
化简后的cost

根据这个函数,我们用梯度下降来找他的最小值时对应的参数。

    通过梯度下降,反复更新每个参数

7786871-f111e9e4517ad435.png

求导后可得:


7786871-5cc14f8fc2073f3a.png

计算后可得:


7786871-806fbdd5bf221b92.png


    需要注意的是,尽管这个更新规则和我们在线性回归上梯度下降用的类似,但是线性回归和逻辑回归并不是一个算法。因为其hx定义不同:对于线性回归,hx为h?(?)=???=?0?0 +?1?1 +?2?2+...+????。而对于逻辑回归:hx=(1+e的-???的次方)分之一

    因此,即使更新参数的规则看起来基本相同,但由于假设的定义发生了变化,所以逻辑 函数的梯度下降,跟线性回归的梯度下降实际上是两个完全不同的东西。

    当使用梯度下降法来实现逻辑回归时,我们有这些不同的参数?,就是?0 ?1 ?2 一直到??,我们需要用这个表达式来更新这些参数。我们还可以使用 for 循环来更新这些参数值。

注意,我之前强调过,特征缩放的方法,也适用于逻辑回归。如果你的特征范围差距很大的话,那么应用特征缩放的方法,同样也可以让逻辑回归中,梯度下降收敛更快。

在使用Python来安装geopandas包时,由于geopandas依赖于几个其他的Python库(如GDAL, Fiona, Pyproj, Shapely等),因此安装过程可能需要一些额外的步骤。以下是一个基本的安装指南,适用于大多数用户: 使用pip安装 确保Python和pip已安装: 首先,确保你的计算机上已安装了Python和pip。pip是Python的包管理工具,用于安装和管理Python包。 安装依赖库: 由于geopandas依赖于GDAL, Fiona, Pyproj, Shapely等库,你可能需要先安装这些库。通常,你可以通过pip直接安装这些库,但有时候可能需要从其他源下载预编译的二进制包(wheel文件),特别是GDAL和Fiona,因为它们可能包含一些系统级的依赖。 bash pip install GDAL Fiona Pyproj Shapely 注意:在某些系统上,直接使用pip安装GDAL和Fiona可能会遇到问题,因为它们需要编译一些C/C++代码。如果遇到问题,你可以考虑使用conda(一个Python包、依赖和环境管理器)来安装这些库,或者从Unofficial Windows Binaries for Python Extension Packages这样的网站下载预编译的wheel文件。 安装geopandas: 在安装了所有依赖库之后,你可以使用pip来安装geopandas。 bash pip install geopandas 使用conda安装 如果你正在使用conda作为你的Python包管理器,那么安装geopandas和它的依赖可能会更简单一些。 创建一个新的conda环境(可选,但推荐): bash conda create -n geoenv python=3.x anaconda conda activate geoenv 其中3.x是你希望使用的Python版本。 安装geopandas: 使用conda-forge频道来安装geopandas,因为它提供了许多地理空间相关的包。 bash conda install -c conda-forge geopandas 这条命令会自动安装geopandas及其所有依赖。 注意事项 如果你在安装过程中遇到任何问题,比如编译错误或依赖问题,请检查你的Python版本和pip/conda的版本是否是最新的,或者尝试在不同的环境中安装。 某些库(如GDAL)可能需要额外的系统级依赖,如地理空间库(如PROJ和GEOS)。这些依赖可能需要单独安装,具体取决于你的操作系统。 如果你在Windows上遇到问题,并且pip安装失败,尝试从Unofficial Windows Binaries for Python Extension Packages网站下载相应的wheel文件,并使用pip进行安装。 脚本示例 虽然你的问题主要是关于如何安装geopandas,但如果你想要一个Python脚本来重命名文件夹下的文件,在原始名字前面加上字符串"geopandas",以下是一个简单的示例: python import os # 指定文件夹路径 folder_path = 'path/to/your/folder' # 遍历文件夹中的文件 for filename in os.listdir(folder_path): # 构造原始文件路径 old_file_path = os.path.join(folder_path, filename) # 构造新文件名 new_filename = 'geopandas_' + filename # 构造新文件路径 new_file_path = os.path.join(folder_path, new_filename) # 重命名文件 os.rename(old_file_path, new_file_path) print(f'Renamed "{filename}" to "{new_filename}"') 请确保将'path/to/your/folder'替换为你想要重命名文件的实际文件夹路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值