吴恩达机器学习作业3:Multi-class Classification and Neural Networks python实现

基于Adaboot算法与神经网络的Python实现 一、AdaBoost算法描述 输入:训练集T=(x1,y1),(x2,y2),...,(xn,yn)T=(x_{1},y_{1}),(x_{2},y_{2}),...,(x_{n},y_{n})T=(x1​,y1​),(x2​,y2​),...,(xn​,yn​),y=−1,1y={-1,1}y=−1,1 输出:最终分类器G(x)G(x)G(x) (1)初始化权值分布 D1=(w11,w12,..... 阅读详情

一 、 多分类器

1.数据可视化

#加载数据
path1 = r'ex3data1.mat'
data1 = scio.loadmat(path1)
x = data1['X']
y = data1['y']

#数据可视化
m = x.shape[0]
random = np.random.permutation(range(m))
temp = random[0:100]
select = x[temp, :]
displaydata(select)

数据可视化的难点是将x矩阵的每个example(1 * 200)恢复成 (20 *20)的格式,然后以 (20 *20)的格式嵌入每个显示图片的小格子中,一共显示100个example,小格子结构为( 10 *10)。

然而在实现的过程中一直有个转置的点无法理解:

import matplotlib.pyplot as plt
import numpy as np

def displaydata(x):

    #计算每个example的尺寸
    m, n = x.shape
    height = np.sqrt(n).astype(int)
    width = (n / height).astype(int)

    #计算display example的行个数、列个数
    rows = np.sqrt(m).astype(int)
    cols = (m / rows).astype(int)

    #设置example之间的间隙大小
    pad = 1

    #初始化display图像的矩阵

    dis_mat = np.zeros((pad + rows*(pad + width), pad + cols*(pad + height)))

    #将x的每一行信息输入example矩阵中

    for i in range(rows):

        for j in range(cols):
            temp = x[i*10 + j, :].reshape(width, height) 

#无法理解这里为什么不用转置!!!!!!!!!!!!!!!
            dis_mat[pad + i*(pad + height) + np.arange(height), pad + j*(pad + width) + np.arange(width)[:, np.newaxis]] = \
            temp.reshape(width, height)


    plt.figure()
    plt.imshow(dis_mat, cmap='gray', extent=[-1, 1, -1, 1])
    plt.axis('off')
    plt.title('Random Seleted Digits')
    plt.show()

代码中:

dis_mat[pad + i*(pad + height) + np.arange(height), pad + j*(pad + width) + np.arange(width)[:, np.newaxis]] = \
            temp.reshape(width, height)

这样选取的位置矩阵应该为:
[(0,) (1,) (2,) (3,)…(19,)]
[(0,) (1,) (2,) (3,)…(19,)]
…
[(0,) (1,) (2,) (3,)…(19,)] (行坐标)

[(,0) (,1) (,2) (,3)…(,19)]
[(,0) (,1) (,2) (,3)…(,19)]
…
[(,0) (,1) (,2) (,3)…(,19)]
(列坐标)

组合成的位置矩阵:

[ (0,0) (1,0) (2,0)…(19,0)]
[ (0,1) (1,1) (2,1)…(19,1)]
[ (0,2) (1,2) (2,2)…(19,2)]
…
[(0,19) (1,19) (2,19)…(19,19)]

reshape过结构为(20*20)的example按位置矩阵的坐标对应入座。然而位置矩阵是正常矩阵的转置形式,比如example的第一行第二点像素(0,1)在位置矩阵相同位置找到的坐标是(1,0),所以会去第二行的第一点组成图像。这么一来,所有的example形成的图像也是转置过的!

然而问题来了,每个数字并没有转置:

在这里插入图片描述
原因是:matlab的reshape和python的reshape是不一样的。
matlab的reshape的按列排序,而python的reshape的按行排列!!!!

因此mat格式的每个example(1 * 400)并不是在(20 * 20)的图像依次取一行拼成一行400个点,而是取一列20点依次拼接成400点!

2.代价函数、梯度下降

代价函数

import numpy as np
from Sigmod import sigmod


def costfunction(theta, x, y, mylambda):

    m = x.shape[0]
    hx = sigmod(np.dot(x, theta))
    y = y.flatten()
    temp1 = np.multiply(y, np.log(hx))
    temp2 = np.multiply(1-y, np.log(1-hx))
    temp3 = mylambda / (2 * m) * np.sum(np.power(theta[1:], 2))
    cost = -np.mean(temp1 + temp2) + temp3

    return cost

梯度下降:

import numpy as np
from Sigmod import sigmod


def gradinet(theta, x, y, mylambda):

    m = x.shape[0]
    hx = sigmod(np.dot(x, theta))
    y = y.flatten()

    grad = np.dot(x.T, hx - y)/m
    temp = mylambda/m * np.array(theta[1:])
    grad[1:] = grad[1:] + temp
    return grad

梯度下降注意返回值是一维数组,否则在优化函数传入时会报错

3.分类器的构建

其实就是求10个theta ,每个theta用来计算某个example的是某个数字的概率有多大。
比如,我拿到一个example,用这个example的特征和theta0、theta1…theta9 进行计算,然后得到10个概率,选取概率最大的那个对应分类作为识别的结果。

def onevsall(theta, x, y, num_class, mylambda):

    m = num_class
    n = x.shape[1]
    theta_mat = np.zeros([m, n])

    for i in range(m):
        if i == 0:
            y_this_class = np.where(y == 10, 1, 0)
        else:
            y_this_class = np.where(y == i, 1, 0)

        theta_temp = opt.minimize(fun=costfunction, x0=theta,
                                  args=(x, y_this_class, mylambda), method='TNC', jac=gradinet).x
        theta_mat[i, :] = theta_temp

    return theta_mat

4.预测模块

对每个example进行识别,计算准确率

import numpy as np
from Sigmod import sigmod


def prediction(theta, x, y):
    pred_mat = sigmod(np.dot(x, theta.T))
    m, n = pred_mat.shape

    pred = np.zeros(m)

    for i in range(m):
        pred[i] = 0
        flag = -1
        for j in range(n):

            if pred_mat[i, j] > flag:
                pred[i] = j
                flag = pred_mat[i, j]

        if pred[i] == 0:
            pred[i] = 10

    pred = np.array(pred).reshape([m, 1])
    temp = np.where(y == pred, 1, 0)
    corret = np.mean(temp)

    return corret

theta_train = onevsall(initial_theta, x, y, num_class, lambda_test)
corret = prediction(theta_train, x, y)
print(corret)

结果:96.46 % 的准确率
在这里插入图片描述

二、神经网络

1.前向传递、准确率预测

在练习中,已经给出神经网络的参数Theta1、Theta2,只需要利用这两个权重矩阵计算 hx 即可。

前向传递:

import numpy as np
from Sigmod import sigmod


def prediction_nn(theta1, theta2, x, y):

    m, n = x.shape
    pred = np.zeros(m)

#第二层神经网络的激活因子
    z2 = np.dot(theta1, x.T)
    a2 = sigmod(z2)
    one = np.ones([1, m])
    a2 = np.vstack([one, a2])

#第三层神经网络的激活因子
    z3 = np.dot(theta2, a2)
    hx = sigmod(z3).T

#接下

准确率预测

num_class = hx.shape[1]
    for i in range(m):
        pred[i] = 0
        flag = -1
        for j in range(num_class):

            if hx[i, j] > flag:
                pred[i] = j + 1
                flag = hx[i, j]

    pred = np.array(pred).reshape([m, 1])
    temp = np.where(y == pred, 1, 0)
    corret = np.mean(temp)

    return corret

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

机器学习作业3编程作业(python):Multi-class Classification and Neural Networks 英文文档图片均来自原档作业pdf截图 网址https://www.coursera.org/learn/machine-learning/programming/8f3qT/linear-regression* 1 Multi-class Classification 阅读详情

相关推荐

Ex3_机器学习_吴恩达课程作业(Python):多分类和神经网络(Multi-class Classification & Neural Networks)

Ex3_机器学习_吴恩达课程作业(Python):多分类和神经网络(Multi-class Classification & Neural Networks) 文章目录Ex3_机器学习_吴恩达课程作业(Python):多分类和神经网络(Multi-class Classification & Neural Networks)0. Pre-condition00. Self-created FunctionsloadData(path):读取.mat数据loadWeight(path):用于前

ZZay's 2058

编程作业(python)| 吴恩达机器学习(3)多分类与神经网络

Coursera 吴恩达机器学习 课后作业题 3/8

fun1024 5090

吴恩达 深度学习课后作业系列 3

吴恩达 深度学习课后作业 深度学习系列课后作业系列1 ,week2课后作业原题 看完视频还是得多多练习。

神经网络 python 多类别_机器学习入门16 - 多类别神经网络 (Multi-Class Neural Networks)...

多类别分类,这种模型可从多种可能的情况中进行选择。1- 一对多一对多提供了一种利用二元分类的方法。鉴于一个分类问题会有 N 个可行的解决方案,一对多解决方案包括 N 个单独的二元分类器,每个可能的结果对应一个二元分类器。在训练期间,模型会训练一系列二元分类器,使每个分类器都能回答单独的分类问题。以一张狗狗的照片为例,可能需要训练五个不同的识别器,其中四个将图片看作负样本(不是狗狗),一个将图片看作...

weixin_39581099的博客 438

python 3.6 simple_classification.py 机器学习简单分类例子 带注释 帮助理解

python 3.6 simple_classification.py 机器学习简单分类例子,用训练数据拟合分类器模型,用训练好的分类器去预测数据集的标签, 带注释帮助理解 。

Python-该代码实现了一个简单的CNN模型用于利用tensorflow进行文档分类

DocumentClassification - 该代码实现了一个简单的CNN模型,用于利用tensorflow进行文档分类

吴恩达机器学习作业3(python)

分类(识别)手写数字图片

weixin_43739110的博客 321

classification

使用tensorflow实现对图片的分类。里面自带数据集的下载。数据集大概3000张。

吴恩达机器学习(八)—— ex3:Multi-class Classification and Neural Networks(MATLAB+Python)

一、多类别分类1.1 数据集1.2 可视化数据1.3 向量化Logistic回归1.3.1 向量化代价函数1.3.2 向量化梯度1.3.3 向量化Logistic回归的正则化1.4 一对多分类1.4.1 一对多预测二、神经网络2.1 模型表示2.2 前馈传播和预测三、Python实现   本次练习对应的文档说明和提供的MATLAB代码→\rightarrow→ 提取码:mwww 。 一、多类别分类   在本练习中,我们将使用Logistic回归和神经网络识别手写数字(从0到9)。如今自动手写数字识别已广.

大彤小忆的博客 2720

Python-TextClassification使用TensorFlow实现一些最先进的文本分类模型

Text-Classification:使用TensorFlow实现一些最先进的文本分类模型

【校招】SHL 的 General Ability (GA, 通用能力测试)

SHL 的 General Ability (GA, 通用能力测试) 文章目录SHL 的 General Ability (GA, 通用能力测试)1、归纳推理题1.1 圈圈线条推理1.2 图形颜色位置推理1.3 箭头指向推理2. 数字推理题攻略3. 语言推理题 1、归纳推理题   归纳推理题我把它总结为三种类型:圈圈线条推理;图形颜色位置推理;箭头指向推理。 1.1 圈圈线条推理   你别看这个题目看起来很复杂,其实很简单,而且这个题型的题目背后原理都一样!我把我的 tips 偷偷分享给你们嘿嘿~先从 A

Sunnyside_ 2万+

吴恩达机器学习ex3 Multi-class Classfication and Neural Networks(python)

Programming Exercise 3: Multi-class Classfication and Neural Networks Machine Learning 目录Introduction1 Multi-class Classfication1.1 Dataset1.2 Visualizing the data1.3 Vectorizing Logistic Regression1.3.1 Vectorizing the regularized cost function1.3.2 .

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

计算机组成原理汉字编码与校验设计实验报告(汉字国标码转区位码实验、汉字机内码获取实验、海明编码电路设计与海明解码)

这次实验利用logisim进行设计,进行了以下这四个实验,其中分为汉字国标码转区位码实验、汉字机内码获取实验、海明编码电路设计与海明解码,实验报告分为四个部分,在这四个部分中依次对四个实验的方案设计,设计思路进行了介绍

zhang2gongzi的博客 6万+

Machine Learning-Ex3(吴恩达课后习题)Multi-class Classification and Neural Networks

多分类器逻辑线性回归+神经网络(前向传播)

qq_61706112的博客 774

virtuoso根据原理图绘制版图并联接_virtuoso画原理图

Virtuoso Schematic Editor 电路仿真一、Virtuoso Schematic Editor 实验目的:掌握电原理图(schematic)设计输入方法。 [1]启动 IC Design 软件 启动 软件: 开机后运行......2.绘制原理图 新建工程后打开的是默认的原理图文件 SCHEMATIC1 PAG...存盘 完成原理图的绘制后,将原理图存盘. 三 . 用 Check...

weixin_33536190的博客 4144

6-2 GPU GART 绑定机制与 TLB 失效

本文详细解析了AMD GPU的GART(Graphics Address Remapping Table)绑定机制实现。主要内容包括: 绑定流程:从ttm_tt_bind()到硬件PTE更新的完整调用链,重点分析amdgpu_gart_bind()函数实现。 关键函数: amdgpu_gart_bind():执行安全检查、记录映射关系、更新页表等操作 amdgpu_gart_map():将CPU页映射为多个GPU页并填充PTE amdgpu_gmc_set_pte_pde():处理硬件特定的PTE格式 内存

图形/计算GPU的驱动与虚拟化技术分享园地 2647

吴恩达-机器学习-Multi-class Classification and Neural Networks (多类分类和神经网络)

Multi-class Classification and Neural Networks 1 Multi-class Classification 1.1 Dataset import matplotlib.pyplot as plt import numpy as np import scipy.io as sio import matplotlib import scipy.optimiz...

qq_30182357的博客 602

[nvidia-GB200-安装]ubuntu24.04高端GPU gb200 570.158.01驱动安装解读及gb200一键化安装脚本,复制即可安装

【代码】[nvidia-GB200]高端GPU gb200 驱动安装解读及gb200一键化安装脚本,复制即可安装。

jundao1997的专栏 872

吴恩达机器学习(三):Multi-class Classification and Neural Networks

奔跑吧蚂蚁呀 303

《QGIS快速入门与应用基础》239:指北针样式选择(预设/自定义)

系统解析指北针设计的核心规范与实操方法。文章首先强调行业规范红线,包括强制要求N字标注、箭头辨识度等关键要素,通过正误示例对比强化合规意识。其次详细讲解QGIS内置预设样式的分类应用,提供极简箭头、标准三角箭头等4类样式的选型对照表,并配图说明适用场景。最后介绍从基础微调到SVG导入的进阶自定义方法,帮助用户实现从合规到专业的样式设计。全文贯穿"合规优先、可读为本、美观为辅"原则,配有详细操作截图与规范对照表,适合从GIS新手到专业制图人员参考。

LuckyHanMo的博客 528

提升YOLOv8性能:用Swin Transformer替换Backbone的详细实现与分析【YOLOv8】

YOLOv8作为目标检测领域的最新版本,在速度和精度之间取得了良好的平衡。然而,随着计算机视觉任务的复杂性不断增加,YOLOv8的标准主干网络(Backbone)在处理高分辨率图像或多尺度目标时,可能存在一定的局限性。为了进一步提升YOLOv8的性能,我们可以引入Swin Transformer替换其主干网络,以增强模型的全局感知能力和多尺度特征提取能力。本文将详细介绍如何在YOLOv8中用Swin Transformer替换原有的Backbone,提供代码示例,并深入探讨其中的原理和效果。

博客 1717

Python机器学习:从零基础到项目实战

当您翻开此书,您正踏入一场数据与智慧的修行。机器学习,并非冰冷的符码,而是机器模拟人类洞察世界的法门。本书将带您,以Python为舟,泛游于算法之海。我们不只传授“术”,更探求其后的“道”——从数据的生灭流转中观照规律,于模型的迭代演进里体悟得失。愿您合上书卷时,收获的不仅是驾驭数据的技能,更有一双洞悉复杂、化繁为简的“智慧之眼”。现在,让我们一同启程。

YunWisdom 968

12、信号采样与Z变换的全面解析

本文全面解析了信号采样和Z变换的核心概念与应用。内容涵盖采样基础、采样频率与奈奎斯特率的关系、离散时间处理模拟信号的方法、采样率转换技术,以及Z变换的定义、性质、常见变换对和逆变换计算。通过实例分析和流程图展示,帮助读者深入理解数字信号处理的关键步骤,为相关领域的学习与应用打下坚实基础。

Jerry的专栏 118

01. 神经网络和深度学习 —— week3浅层神经网络(编程作业)

1. 任务 用一个隐含层的神经网络实现一个二分类。 利用非线性的激活函数单元。 计算交叉熵损失函数。 实现向前传播和向后传播。 2. 网络结构 3. 建立神经网络的方法 定义神经网络的结构(输入层,输出层,隐含层个数)。 初始化模型参数。 循环: —实现向前传播。 —计算损失函数。 —为了得到梯度值,实现向后传播。 —更新参数(梯度下降) 4. 代码 import numpy as np...

iCode_girl的博客 564

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

吴恩达机器学习作业3(多分类问题)

多分类问题一.复习二 .题目三.代码1.导入需要的包2. sigmoid 函数3.向量化的梯度函数 一.复习 二 .题目 对于此练习,我们将使用逻辑回归来识别手写数字(0到9)。 我们将扩展我们在练习2中写的逻辑回归的实现,并将其应用于一对一的分类。 让我们开始加载数据集。 它是在MATLAB的本机格式,所以要加载它在Python,我们需要使用一个SciPy工具。 三.代码 1.导入需要的包 import numpy as np import pandas as pd import matplotlib.

沉晨尘宸的博客 1797

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

python分类算法_python中的项目从头开始创建多类分类算法的逐步指南

python分类算法Logistic regression is a very popular machine learning technique. We use logistic regression when the dependent variable is categorical. This article will focus on the implementation of logi...

weixin_26750481的博客 975

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

上一篇: python-矩阵内某个小矩阵的替换
下一篇: 吴恩达机器学习作业4:Neural Networks Learning python实现
zsiming
博客等级 码龄7年 43粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值