吴恩达机器学习作业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

XY2-100协议解析

1.XY2-100包括四路信号 : SENDCK(时钟信号)、SYNC(同步信号)、CHANNELX(X通道)、CHANNELY(Y通道)

qq_38360574的博客 9531

Logistic Regression及python实现

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

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

【开源数据集】电动车佩戴头盔检测数据集(TWHD)

佩戴头盔检测数据集VOC格式图像与标注数量各5448张

hzg19930513的博客 5168

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

机器人路径规划:基于冠豪猪优化算法(Crested Porcupine Optimizer,CPO)的机器人路径规划(提供MATLAB代码)

移动机器人(Mobile robot,MR)的路径规划是 移动机器人研究的重要分支之,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或局部已知的局部路径规划。随着科技的快速发展以及机器人的大量应用,人们对机器人的要求也越来越高,尤其表现在对机器人的智能化方面的要求,而机器人自主路径规划是实现机器人智能化的重要步骤,路径规划是指规划机器人从起点位置出发,无碰撞、安全到达指定目标位置的最优路径。

IT猿手 1367

SAP ATP检查全解析:从配置到BAPI_RESERVATION_CREATE1应用实例

本文全面解析SAP ATP检查功能,从基础配置到BAPI_RESERVATION_CREATE1高级应用,涵盖物料可用性检查、动态规则设置及性能优化策略。通过实战案例演示如何利用BAPI_MATERIAL_AVAILABILITY实现精准库存承诺,提升供应链效率,特别适合SAP顾问和库存管理人员参考。

dropout6artist的博客 677

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

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

Cowry 3万+

基于Matlab的深度学习OFDM系统信号检测

在接收端,我们首先去除循环前缀,然后对接收到的信号进行FFT变换和QAM解调。在通信系统中,正交频分复用(Orthogonal Frequency Division Multiplexing,OFDM)是一种常用的调制技术,它可以将高速数据流分成若干个低速子载波进行传输,提高了信道利用率和抗干扰性能。接下来,我们使用训练好的神经网络对QAM调制后的数据进行检测,得到估计的FFT变换结果。深度学习方法可以通过大量的训练数据来学习信号的特征,并具有一定的适应能力,在某些情况下可能能够获得更好的检测性能。

2301_79325657的博客 296

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

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

大彤小忆的博客 2470

海康机器人visionmaster5.0全局通信西门子S7操作

德国西门子(SIEMENS)公司生产的可编程序控制器在我国的应用也相当广泛,在冶金、化工、印刷生产线等领域都有应用。西门子(SIEMENS)公司的PLC产品包括S7-200、S7-1200、S7-300、S7-400、S7-1500等。西门子S7系列PLC体积小、速度快、标准化,具有网络通信能力,功能更强,可靠性高。S7系列PLC产品可分为微型PLC(如S7-200),小规模性能要求的PLC(如S7-300)和中、高性能要求的PLC(如S7-400)等。

weixin_65316120的博客 423

一条时间轴上的商品供给:商品供给域事件全景、八大子域事件清单与事件契约规范的工程推演

本文以虚构连锁零售企业“青禾鲜市”为例,用事件风暴重新梳理商品供给域:先剖析同词异义、状态模糊、隐式依赖与被动兜底四类冲突,再以时间轴、八条子域泳道与关键事件铺出全景地图,确立一个事件只有一个户口;随后为总店商品、门店商品、价格、库存、质量、标签、变更通知与操作日志列出聚合、事件、命令与策略,并统一命名、信封结构、版本与幂等规范。程序体检把初稿14个问题清零,仿真显示按聚合版本号更新可售视图可将误判从两位数百分比降到0.019%。文末给出四轮工作坊节奏与新品引入、全国调价、批次召回走查剧本。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 5万+

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

论文阅读:ICLR 2023 FINE-TUNING ALIGNED LANGUAGE MODELS COMPROMISES SAFETY, EVEN WHEN USERS DO NOT INTEND

对大型语言模型(LLMs)进行微调以适应特定用例通常涉及对预训练的LLMs进行进一步的定制。Meta公开发布Llama模型和OpenAI的API允许在自定义数据集上微调GPT-3.5 Turbo,也鼓励这种做法。但是,这种自定义微调与安全成本有何关联?我们注意到,尽管现有的安全对齐基础设施可以在推理时限制LLMs的有害行为,但它们并未涵盖将微调权限扩展到最终用户时的安全风险。我们的红队研究发现,即使是只有几个设计有敌意的训练示例进行微调,也可以破坏LLMs的安全对齐。

CSPhD-winston的博客 811

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

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

据说大佬都喜欢黑色! 1072

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

吴恩达深度学习编程作业(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

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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

Programming Exercise 2: Logistic Regression Machine Learning

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

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

吴恩达课程 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、付费专栏及课程。

余额充值