吴恩达机器学习作业2:Logistic Regression python实现

吴恩达 机器学习课程 coursera 第二次编程作业(Logistic Regression) python实现 本文是吴恩达机器学习课程的第二次编程作业:Logistic Regression 的基础作业,用python实现。 本作业包含5个文件,分别是: ex2.py :程序的主入口 costFunction.py :计算代价函数 gradientDescent.py :梯度向下算法 predict.py :预测算法 ex2data1.txt :训练集 作业文件和训练集数据下载地... 阅读详情

吴恩达机器学习作业 python 实现:Logistic Regression

1.检查加载数据,进行可视化

定义函数对数据可视化

def plotdata(path):
    data1 = np.loadtxt(path, delimiter=',')

    pos_index = np.where(data1[:, 2] == 1)
    neg_index = np.where(data1[:, 2] == 0)

    plt.scatter(data1[pos_index, 0], data1[pos_index, 1], c='b', marker='x', label='Addmited')
    plt.scatter(data1[neg_index, 0], data1[neg_index, 1], c='r', marker='o', label='Unaddmited')
    plt.xlabel('Feature 1')
    plt.ylabel('Feature 2')

    plt.legend()

加载数据

path = r'ex2data1.txt'
data1 = np.loadtxt(path, delimiter=',')
plotdata(path)
plt.show()

根据散点图显示的边界确定使用线性边界,所以不用进行特征缩放
在这里插入图片描述

2.定义Sigmod函数

注意传入的参数Z可以是一个矩阵(在python中为二维数组)

def sigmod(z):

    ans = 1 / (1 + np.exp(-z))

    return ans

3.代价函数 Cost Function

在实现代价函数的过程中,仍然使用向量化来避免for循环的使用

def computecost(theta, X, y):

    hx = sigmod(np.dot(X, theta))
    cost = -np.mean(np.multiply(y, np.log(hx)) + np.multiply(1-y, np.log(1-hx)))

    return cost

4.梯度下降

梯度下降的实现依旧是使用向量化来避免循环

值得注意:hx 是一个一维数组,hx.shape = (100,),如果传入的y在初始化数据时就进行reshape变成(100,1),这时  err.shape = (100,100)而不是(100,1)。原因是 hx 自动扩充为(100,100)的二维数组。解决的办法是传入 y 之前不要 reshape 即可。而对 hx 进行 reshape 让 err 维度正确 却会导致返回的 grad 是二维数组(在下面自动优化函数中二维数组将会导致优化函数的传参失败)
def gradient(theta, X, y):

    m = X.shape[0]
    hx = sigmod(np.dot(X, theta))
    err = hx - y

    grad = np.dot(X.T, err) / m

计算的无正则化、theta 为0向量时的代价与得到的梯度
在这里插入图片描述

5. fminunc 函数在python 中的替代

result = op.minimize(fun=computecost, x0=initial_theta, args=(X, y), method='TNC', jac=gradient)

在开头引用的库

import scipy.optimize as op

minimize函数传入的参数解释:

  1. fun - 表示要求得最小值的函数 因此代价函数传给 fun
  2. x0 - 表示 fun 中的初始自变量 即对应的代价函数中的 theta 为 初始自变量
  3. args - 表示 fun 中除了自变量自外的固定变量
  4. method - 表示优化的算法
  5. jac - 表示 fun 函数自变量的梯度算法

注意:initial_theta 、gradient返回值 是一维数组!!!!
reshape之后变成二维数组传入自动优化函数将会bug (对应4中提到的维度问题)

确定minimiz函数的参数维度无误 :

print(X.shape, initial_theta.shape, y.shape)
print(np.shape(grad))

运行结果:
在这里插入图片描述
最优化函数结果 :

  1. x 表示最终自变量的使得fun最小的取值 ,即让costFunction最小的theta
  2. 如果message输出:Linear search failed 是计算代价函数使用的log里面出现了负数(在第二部分的练习才会出现)

在这里插入图片描述

5.预测被录取的概率

print(sigmod(np.dot(result.x, [1, 45, 85])))

在这里插入图片描述

6.决策边界 (类似 ax+by+c= 0,求出y即可)

xplot_points = [X[:, 1].min(), X[:, 2].max()]
yplot_points = [X[:, 1].min()*op_theta[1]+op_theta[0], X[:, 1].max()*op_theta[1]+op_theta[0]]/(-op_theta[2])

plotdata(path)
plt.plot(xplot_points, yplot_points, c='y', label='Boundary Line')
plt.legend()
plt.show()

结果:
在这里插入图片描述

第二部分练习:

1.代价函数和梯度下降

没有太大变化,只是加入了正则化对theta进行惩罚:

def computecost2(theta, x, y, lambda_test):

    hx = sigmod(np.dot(x, theta))
    cost = -np.mean(np.multiply(y, np.log(hx)) + np.multiply(1-y, np.log(1-hx))) + lambda_test * np.mean(theta[1:])

    return cost


def gradient2(theta, x, y, lambda_test):

    m = X.shape[0]
    hx = sigmod(np.dot(X, theta))
    err = hx - y

    grad = np.dot(X.T, err) / m
    grad[1:] = grad[1:] + (lambda_test/m) * np.array(theta[1:])
    return grad

2.特征变量的映射

进行映射的原因是发现对data2进行数据可视化之后,线性的决策边界并不能将两个类别分开,因此选择更多的特征来描述边界:
在这里插入图片描述
映射代码:

def mapfeature(x1, x2):
    #若  m = x1.shape[0]
    # 当输入的不是一维的数组或者多维的矩阵时,m不存在,转换成矩阵后则为0
    temp = np.mat(x1)
    m = temp.shape[1]

    out = np.ones(m)

# 每个Featuer的最高次数等于6
    degree = 6
    for i in range(1, degree+1):

        for j in range(i+1):
            add = np.power(x1, i-j) * np.power(x2, j)
            out = np.vstack([out, add])

    return out.T

3.自动寻找 cost Function 为最小值的theta

result = op.minimize(fun=computecost2, args=(X, y, lambda_test), jac=gradient2, x0=initial_theta2, method='TNC')

与上面的优化函数使用没有什么不同
结果:

     fun: 0.04733255576368678
     jac: array([ 4.57959287e-04, -6.00677802e-05,  5.13905638e-05,  3.16235378e-05,
       -6.58358654e-05,  2.65673577e-04, -2.46359925e-05, -1.96059695e-05,
       -7.00014378e-05, -8.48880946e-05, -5.47619182e-05, -1.31191872e-04,
       -2.31736077e-05,  6.84331601e-06, -7.28501958e-05,  2.97037692e-05,
       -2.98836862e-05, -9.32059615e-05, -6.10395839e-06,  2.51302987e-05,
       -1.57621275e-04, -1.13892355e-05, -7.45965584e-05, -3.00943452e-05,
       -5.94147294e-05, -1.36079733e-05,  4.72813245e-05, -1.35909497e-04])
 message: 'Linear search failed'
    nfev: 59
     nit: 3
  status: 4
 success: False
       x: array([ 1.27422003,  0.62478645,  1.18590385, -2.02173837, -0.9170824 ,
       -1.41319104,  0.12444365, -0.36770527, -0.36458182, -0.18067802,
       -1.46506508, -0.06288704, -0.61999798, -0.27174439, -1.20129288,
       -0.23663762, -0.20901446, -0.05490418, -0.27804409, -0.29276915,
       -0.46790817, -1.04396472,  0.02082839, -0.29638539,  0.00961552,
       -0.32917183, -0.13804216, -0.93550855])
 

message: ‘Linear search failed’ 虽然出现了,不过已经接近最优解了

4.绘制等高图

xx = np.linspace(-1, 1.5, 30)
yy = np.linspace(-1, 1.5, 30)

z = np.zeros((xx.size, yy.size))

for i in range(0, xx.size):
    for j in range(0, yy.size):
        z[i][j] = np.dot(mapfeature(xx[i], yy[j]), theta_opt)

z = z.T
cs = plt.contour(xx, yy, z, [0], colors='b')
注意使用矩阵Z的转置步骤,这里yy表示原特征(没有映射之前)第二个特征的取值范围,理应是对应矩阵Z的列,但是在for中随之变化的是行向量,因此进行转置,这样才能和1中的点对应。

结果:
在这里插入图片描述
至此,吴恩达机器学习第二部分练习总体完成。

吴恩达 机器学习课程 coursera 第二次编程作业(Logistic Regression Regularized) python实现 本文是吴恩达机器学习课程的第二次编程作业:Logistic Regression Regularized 的扩展作业,用python实现。 本作业包含5个文件,分别是: ex2_reg.py 主程序入口 predict.py 预测函数 gradientReg.py 梯度下降算法 costFunctionReg.py 代价函数算法 sigmoid.py 函数计算方法 作业文... 阅读详情

相关推荐

吴恩达机器学习Logistic回归算法的Python实现

根据吴恩达作业ex2的Logistic Regression用Python代码实现。 首先贴上公式,整个算法的实现主要依靠两个公式。一个是计算代价函数的公式,一个是进行梯度下降的公式。 计算logistic回归的代价函数定义如下。值得注意的是,这里的h(x)与线性回归的h(x)并不一样,在带入公式时尤其注意。 同样,与线性回归类似,为了最小化代价函数J,需要进行迭代计算相应的theta。...

qq_41618978的博客 631

吴恩达机器学习代码及相关知识点总结--ex4(NN back propagation(神经网络反向传播))

数据可视化 还是像前一个联系一样,首先进行数据可视化: import matplotlib.pyplot as plt import numpy as np import scipy.io as sio import matplotlib import scipy.optimize as opt from sklearn.metrics import classification_report#这...

qq_41462598的博客 1034

Python学习--Machine-Learning 吴恩达机器学习编程作业 (第二周)

Machine-Learning 编程作业 Programming Exercise 2:Logistic Regression 1. 逻辑回归 1.1 读取数据并显示 1.2 定义代价函数 1.3 定义梯度下降函数 1.4 计算数据集的预测能力 2. 正则化逻辑回归 2.1 读取数据并显示 2.2 定义代价函数 2.3 定义梯度下降函数 2.4 计算数据集的预测能力 3. 调用sklearn库...

qq_43232373的博客 1587

吴恩达机器学习课程-作业3-多分类和神经网络(python实现)

吴恩达机器学习课程-作业3-多分类和神经网络(python实现) 椰汁笔记 Multi-class Classification 1.1 Dataset 这里的数据存储变成了.mat的格式,这样的数据选择借助scipy.io.loadmat()实现 import scipy.io as sio data = sio.loadmat("ex3data1.mat") print(data.ke...

weixin_44027820的博客 2686

李宏毅机器学习Lesson2——Logistic Regression实现收入预测

李宏毅机器学习Lesson2——Logistic Regression实现收入预测数据集介绍加载数据集、标准化定义相关函数交叉验证训练模型(小小地实现了一下损失函数惩罚项中系数的选择) 数据集介绍 数据集来源于Kaggle,是一个美国公民收入的数据集,本次任务的目标是根据多个特征准确区分样本的收入属于哪一个类别(大于50k美元/小于50k美元),从网上下载的数据集中有六个文件 前三个是原始数据集,本次任务使用后三个,这是助教已经根据原始数据集进行一定数据清洗后可以直接拿来建模的数据。 加载数据集、标准化 X

mk2345的博客 981

【机械视觉】C#+VisionPro实战:位深图(CogImage8Grey)与Bitmap互转技巧及工业检测应用

本文详细介绍了在工业检测中如何使用C#和VisionPro实现位深图(CogImage8Grey)与Bitmap的高效互转技巧。通过实战代码示例和工业应用案例,帮助开发者解决图像处理中的常见问题,提升检测精度和系统性能,适用于半导体、汽车零部件等高精度检测场景。

weixin_29250573的博客 186

Logistic Regression及python实现

本文所有代码都是基于python3.6的,数据及源码下载:传送门引言本次分享,我们将介绍一个经典的二分类算法——逻辑回归。逻辑回归虽然不在十大数据挖掘算法之列,但是这个算法是机器学习从统计学领域借鉴的一种算法,其算法最经典之处是使用到了最优化算法。关于线性回归与逻辑回归的详细介绍与数学推导,在我前面翻译的CS229讲义里都有提到:CS229 Lecture Note 1(监督学习、线性回归)、 CS

分享人工智能学习心得与实践经验,探讨应用场景,见证变革与进步 1万+

nsight-system教程

参考nsight-compute使用教程-优快云博客。

youzjuer的博客 1894

Python 简单逻辑回归可视化

from sklearn.datasets import load_iris from sklearn.linear_model import LogisticRegression import numpy as np import matplotlib.pyplot as plt iris = load_iris() X = iris.data[:,[2, 3]] y = iris.target...

wwxy1995的博客 5230

信息流广告ROI线性预测看板&投放分析监控看板展示&数据处理入库全流程

此看板数据量太大,在tableau public部署运行速度极慢,因此用图片作展示 数据清洗

Larry_Westside的博客 2316

Winform从入门到精通(1)——Label(史上最全)

本篇文章是对专栏《winform控件从入门到精通》的详细介绍

qq_34059233的博客 4万+

吴恩达机器学习作业Python实现(二):logistic回归

## 1 Logistic regression 在这部分的练习中,你将建立一个逻辑回归模型来预测一个学生是否能进入大学。假设你是一所大学的行政管理人员,你想根据两门考试的结果,来决定每个申请人是否被录取。你有以前申请人的历史数据,可以将其用作逻辑回归训练集。对于每一个训练样本,你有申请人两次测评的分数以及录取的结果。为了完成这个预测任务,我们准备构建一个可以基于两次测试评分来评估录取可能性的分...

Cowry 3万+

置顶必读(1) | 2026最新首发,全网最全 Spring Boot 学习宝典(附思维导图)

从0到1以知识点+实例+项目的教学模式对SpringBoot框架由浅入深进行学习,快来跟bug菌一起学习吧。

**My Coding Family** 16万+

吴恩达机器学习(六)—— ex2:Logistic Regression(MATLAB+Python)

一、Logistic回归        本次练习对应的文档说明和提供的MATLAB代码→\rightarrow→ 提取码:iuvr 。 一、Logistic回归        在本部分练习中,我们将建立一个Logistic回归模型,以预测学生是否被大学录取。假设你是大学部门的管理员,并且您想根据每位申请人的两次考试成绩来确定他们的录取机会。您拥有以前申请人的历史数据.

大彤小忆的博客 2470

高通平台 Android T 蓝牙技术全解析:架构、代码与实现原理

协议栈、配置文件和服务都运行在一个独立的用户空间进程。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 100

KCP(快速可靠UDP)——用带宽换延迟的极致艺术

想象你是一个外卖平台的调度员。这就是KCP的本质——

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 202

Ex2_机器学习_吴恩达课程作业(Python):逻辑回归(Logistic Regression)

Ex2_机器学习_吴恩达课程练习作业 文章目录Ex2_机器学习_吴恩达课程练习作业0. Pre-condition00. Self-created Functionssigmoid(z):激活函数cost(theta, X, y):计算损失gradient(theta, X, y):计算梯度predict(theta, X):给定参数与数据集,做出预测featureMapping(x1, x2, power):特征映射costReg(theta, X, y, l=1):正规化logistic回归的损失函数g

ZZay's 1179

069、自动曝光(AE)测光策略:全局/中心/点测光与曝光时间增益分配

本文深入探讨了自动曝光(AE)测光策略的技术细节与实际应用。作者通过多个真实案例(手机前置摄像头、车载ADAS、安防监控等)分析了全局测光、中心测光和点测光的优缺点,指出不同场景应采用不同策略。重点剖析了曝光时间与增益分配的"跷跷板效应",提出要根据传感器特性选择最优分配方案。文章强调测光策略应动态调整,并给出5条实用建议:结合场景切换测光模式、关注传感器增益拐点、点测光需防抖处理、全局测光不宜迷信、调试要观察亮度直方图。最后指出AE调试需要结合具体硬件特性进行实测优化,没有通用解决方案。

zzfmlxs的博客 100

吴恩达机器学习作业(二)实现:logistic回归

对于这一类分类问题: 拿到数据先将它绘制出来,看数据在图片的分布,如果明显是两极化的,就用普通的逻辑回归, 比如下图: 如果数据的分布比较特别,就加入正则化,所谓正则化就是加入惩罚项,使得结果不容易过度拟合,所以两者只有代价函数不一样 比如下图: 当然还有更高级的回归算法,这是比较常用且简单的算法 1.1 plotData.m 这个函数是用来绘制数据的 function plotData(X,...

据说大佬都喜欢黑色! 1072

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

吴恩达深度学习编程作业(1-1):Logistic Regression with a Neural Network mindset

1. 作业简介2. 工具包3. 数据集3.1 数据说明3.2 数据预处理4. Logistics介绍5. 创建算法5.1 算法的创建基本流程5.2 程序实现步骤6. 学习率优化7. 实现代码 1. 作业简介   本次作业的内容是使用Logistic回归通过训练来判断一副图像是否为猫。   主要内容:如何利用Python的来实现Logistic函数。包括:初始化、计算代价函数和梯度、使用梯度下降算法进行优化等并把他们整合成为一个函数。 2. 工具包   在这个过程中,我们将会用到如下库: numpy:Py.

大彤小忆的博客 1931

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

吴恩达机器学习ex2 Logistic Regression (python)

Programming Exercise 2: Logistic Regression Machine Learning

风信子的猫Redamancy的快乐星球 8627

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

吴恩达课程 Logistic Regression python实现

吴恩达 Logistic Regression python实现 1.Logistic Regression import numpy as np import matplotlib.pyplot as plt import os import random import time import pandas as pd exam_data = np.genfromtxt('ex2data...

weixin_44900846的博客 394

吴恩达机器学习课后作业-02逻辑回归(02-logistic_regression)

吴恩达机器学习课后作业-02逻辑回归(02-logistic_regression) 切记!!!下载第二次课后作业的题目和数据包(ex2data1.txt和ex2data2.txt),数据包一定要下载,并且导入到项目所在文件夹,用Ancona或者pycharm编译都可以成功! (后续会慢慢补充并且完善逻辑回归知识点) 一、线性可分 (案例图,假设函数,sigmoid函数y=0或y=1,损失函数,代...

南有芙蕖 1149

吴恩达学习—Logistic Regression

吴恩达机器学习第一课便是Logistic Regression,这个算法是一种常见的分类算法,因其使用了logistic函数,由此得名。Logistic Regression可以看成0个隐层的神经网络,学通该算法,对研究神经网络有很大帮助。1.正向传播 Logistic Regression 算法如下图所示,假设与y的相关的特征为x,通过输入特征x各分量的线性相加,再经非线性函数变换,就可以得到y

hdg34jk的专栏 1973

吴恩达机器学习课后作业(2):Logistic regression

作业题目1 Logistic regression 在这部分的练习中,你将建立一个逻辑回归模型来预测一个学生是否能进入大学。假设你是一所大学的行政管理人员,你想根据两门考试的结果,来决定每个申请人是否被录取。你有以前申请人的历史数据,可以将其用作逻辑回归训练集。对于每一个训练样本,你有申请人两次测评的分数以及录取的结果。为了完成这个预测任务,我们准备构建一个可以基于两次测试评分来评估录取可能性的分类模型。 准备数据 # Kyrie Irving # !/9462... import numpy as np

weixin_43886282的博客 865

编程作业2 logistic_regression(逻辑回归)(吴恩达)

文章目录编程作业2 logistic_regression(逻辑回归)1.准备数据2.sigmoid 函数3.cost function(代价函数)4.gradient descent(梯度下降)5.拟合参数6.用训练集预测和验证7.寻找决策边界8.推导 编程作业2 logistic_regression(逻辑回归) 推荐运行环境:python 3.6 建立一个逻辑回归模型来预测一个学生是否被...

youif的博客 1096
下一篇: python-矩阵内某个小矩阵的替换
zsiming
博客等级 码龄7年 43粉丝 74原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值