机器学习第7天:深入了解逻辑回归
发布日期:2021-07-01 04:21:42 浏览次数:28 分类:技术文章

本文共 2011 字,大约阅读时间需要 6 分钟。

文章目录

一、逻辑回归是什么

简单来说, 逻辑回归(Logistic Regression)是一种用于解决二分类(0 or 1)问题的机器学习方法,用于估计某种事物的可能性。比如某用户购买某商品的可能性,某病人患有某种疾病的可能性,以及某广告被用户点击的可能性等。

逻辑回归是为了解决分类问题,根据一些已知的训练集训练好模型,再对新的数据进行预测属于哪个类。

逻辑回归(Logistic Regression)与线性回归(Linear Regression)都是一种广义线性模型(generalized linear model)。逻辑回归假设因变量 y 服从伯努利分布,而线性回归假设因变量 y 服从高斯分布。

二、逻辑回归的代价函数

1. 公式:

综合起来为:

其中

2. 公式推导过程:

代价函数的推导分两步进行:

  1. 寻找一个合适的预测函数,一般表示为h函数。
  2. 构造一个cost函数,该函数表示预测的输出(h)与训练数据的类别(y)之间的偏差。

2.1. 寻找预测函数

Logistic Regression虽然名字里带“回归”,但是它实际上是一种分类方法,用于两分类问题(即输出只有两种),显然,预测函数的输出必须是两个值(分别代表两个类别),所以利用了Logistic函数(或称为Sigmoid函数)。

sigmoid函数是一个s形的曲线,它的取值在[0, 1]之间,在远离0的地方函数的值会很快接近0或者1。它的这个特性对于解决二分类问题十分重要。

Sigmoid函数:

接下来需要确定数据划分的边界类型,对于图1和图2中的两种数据分布,显然图1需要一个线性的边界,而图2需要一个非线性的边界。接下来我们只讨论线性边界的情况。

图1
图2

对于线性边界的情况,边界形式如下:

构造预测函数为:

hθ(x)函数的值有特殊的含义,它表示结果取1的概率,因此对于输入x分类结果为类别1和类别0的概率分别为:

2.2. 构造代价函数

上面的n改成m,笔误。

三、梯度下降法求J(θ)的最小值

θ更新过程可以写成:

四、代码展示

def LogisticRegression():    data = loadtxtAndcsv_data("data2.txt", ",", np.float64)     X = data[:,0:-1]    y = data[:,-1]        plot_data(X,y)  # 作图        X = mapFeature(X[:,0],X[:,1])           #映射为多项式    initial_theta = np.zeros((X.shape[1],1))#初始化theta    initial_lambda = 0.1                    #初始化正则化系数,一般取0.01,0.1,1.....        J = costFunction(initial_theta,X,y,initial_lambda)  #计算一下给定初始化的theta和lambda求出的代价J        print(J)  #输出一下计算的值,应该为0.693147    #result = optimize.fmin(costFunction, initial_theta, args=(X,y,initial_lambda))    #直接使用最小化的方法,效果不好    '''调用scipy中的优化算法fmin_bfgs(拟牛顿法Broyden-Fletcher-Goldfarb-Shanno)    - costFunction是自己实现的一个求代价的函数,    - initial_theta表示初始化的值,    - fprime指定costFunction的梯度    - args是其余测参数,以元组的形式传入,最后会将最小化costFunction的theta返回     '''    result = optimize.fmin_bfgs(costFunction, initial_theta, fprime=gradient, args=(X,y,initial_lambda))        p = predict(X, result)   #预测    print(u'在训练集上的准确度为%f%%'%np.mean(np.float64(p==y)*100))   # 与真实值比较,p==y返回True,转化为float           X = data[:,0:-1]    y = data[:,-1]        plotDecisionBoundary(result,X,y)    #画决策边界

感觉有困难可以先放着,后期会进行更加具体的介绍,知道这么几个公式就好了。

参考文章:

转载地址:https://mtyjkh.blog.csdn.net/article/details/82884764 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:实战项目三:爬取QQ群中的人员信息
下一篇:机器学习第6天:数据可视化神器--Matplotlib

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年03月15日 00时50分33秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

linux修改文件权限为所有人都可以访问,Linux 笔记分享八:文件权限的设定 2021-06-24
linux中卸载ambri-servle,Kerberos 命令使用 2021-06-24
linux二进制反编译,Xori:一款来自BlackHat 2018的二进制反汇编和静态分析工具 2021-06-24
linux两台主机添加信任,Linux两台机器间添加信任,实现不用密码问,互传文件... 2021-06-24
linux 自动获取ssl证书,linux生成自验证ssl证书的具体命令和步骤 2021-06-24
linux基础命令20个,20-linux中基础命令 2021-06-24
重置网络配置 android,重置Android移动网络信号? 2021-06-24
java约瑟夫环pta上_cdoj525-猴子选大王 (约瑟夫环) 2021-06-24
java++记录+运行_记录java+testng运行selenium(三)---xml、ini、excel、日志等配置 2021-06-24
mysql居左查询abcd_MySql速查手册 2021-06-24
loadrunner 错误: 无法找到 java.exe_LoadRunner错误及解决方法总结 2021-06-24
Java小魔女芭芭拉_沉迷蘑菇不可自拔,黏土人《小魔女学园》苏西·曼芭芭拉 图赏... 2021-06-24
php+mysql记事本_一个简单记事本php操作mysql辅助类创建 2021-06-24
300小时成为java程序员_直击面试现场: Java程序员3轮6小时面试, 成功拿到阿里offer!... 2021-06-24
中国网建java发送短信_短信验证登陆-中国网建提供的SMS短信平台 2021-06-24
隔行变色java代码_jquery入门—选择器实现隔行变色实例代码 2021-06-24
角标越界 Java_【新人求助】利用占位符操作数据库是总是提示数组角标越界是怎么回事 - Java论坛 - 51CTO技术论坛_中国领先的IT技术社区... 2021-06-24
java类中声明log对象_用于Android环境,java环境的log打印,可打印任何类型数据 2021-06-24
db2与mysql编目_DB2编目、联邦数据库 - Goopand's OS Space - OSCHINA - 中文开源技术交流社区... 2021-06-24
atomikosdatasourcebean mysql_SpringBoot2整合JTA组件实现多数据源事务管理 2021-06-24