吴恩达机器学习作业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实现一些最先进的文本分类模型

《从0到1:CTFer成长之路》书籍配套题目-[第二章 web进阶]文件上传

[第二章 web进阶]文件上传开始行动绕过第1个限制绕过第2个限制 介绍:记录一下笔记,方便以后迅速回忆使用。 《从0到1:CTFer成长之路》书籍配套题目,来源网站:《从0到1:CTFer成长之路》 先看一下题目源码: <?php header("Content-Type:text/html; charset=utf-8"); // 每5分钟会清除一次目录下上传的文件 require_once('pclzip.lib.php'); if(!$_FILES){ echo '

weixin_46703850的博客 3410

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

【分享】获取微信通讯录python代码形式实现

微信号”, “昵称”, “地区”, “备注”, “标签”, “签名”, “来源”5. 找到最后一个空格所在的位置(后一个就是真正的联系人了)当前微信号与上一个相同的时候,说明到底部了,可以跳出循环。3. 滚动鼠标到最顶部(防止已经滚动了一部分了)7.记录下上一个联系人的微信号。7. 无限循环按键盘下箭头。获取详情中的以下元素内容。6. 点击第一个联系人。4. 获取联系人列表。

程序员老狼专注开发aigc或客服系统应用 2892

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

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

qq_61706112的博客 774

【AIGC】人工智能训练师(高级)考试题库-橙点同学

例如,在嘈杂的环境中进行声音转文字,即使是优秀的模型也可能会出现一些错误,但这并不意味着该模型本身质量差,在其他较为理想的环境下,它可能会有很好的表现。例如,在一些语音应用和系统中,会使用SSML来实现对语音合成的精细控制,如调整语速、语调、音量等,而这些应用和系统的开发往往会遵循W3C的相关标准和框架,其中就包括SSML这一语音合成标记语言。例如,在语音识别等场景中,像“去火车站怎么走”这样的语音指令,没有其他嘈杂的背景声音或模糊不清的表述,就属于无噪音的数据,有利于系统准确地进行处理和分析。

RisunJan的博客 9920

避开这5个坑!STC8H DMA串口通信的实战避坑指南(115200波特率实测)

本文深入解析了STC8H单片机利用DMA实现稳定全双工串口通信的实战要点。针对115200高波特率场景,详细拆解了DMA-UART架构、关键寄存器配置、时钟精度计算、缓冲区管理及中断协同等核心环节,并提供了具体的避坑指南和调试方法,帮助开发者构建高效可靠的通信链路。

melon的博客 675

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

锐浪报表 Grid++Report 子报表 Delphi

锐浪报表 Grid++Report 是国内较好的报表控件,本人一直使用它,做出很多特色的报表。可以说你的报表设计出来,它基本上能做出来。 但是它帮助文件上,说的不深,近期因为要做一个有关社工的报表,大表中,嵌套2个子表。可以说,一个表到三个数据集,分别打印。 在认真看了帮助的基础上,网上探索,基本无此类,特别是Delphi的帮助,几乎为零。经二天摸索,做出来了。 一、设计思路 1、大表和二个小表,可以设计为三个表,分别使用三个GridppReport控件,取名...

lyhoo163的专栏 9072

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

奔跑吧蚂蚁呀 303

Vue3 + MQTT.js 实现 SCADA 实时数据通信:从不稳定到稳定的完整实践

本文介绍了SCADA组态引擎开发中MQTT协议的应用及优化实践。项目采用MQTT协议实现工业设备数据采集与可视化,但面临连接不稳定、数据格式多样化和数据绑定复杂三大问题。针对MQTT连接问题,分析发现超时设置过短(原8秒)、缺少客户端超时配置和心跳机制是主要原因。优化方案包括:协议转换(mqtt://→ws://)、双重超时保护(15秒手动+30秒客户端)、60秒心跳间隔等,显著提升了连接稳定性。通过完整代码实现展示了连接配置、认证处理和错误处理机制,为物联网数据传输提供了可靠解决方案。

weixin_36794508的博客 1398

同步调相机启动与并网控制技术方案

同步调相机起动与并网控制技术方案采用背靠背变流器系统,通过静止变频器(SFC)策略实现无原动机驱动的同步电机从静止到同步转速的平稳起动。方案详细阐述了硬件自检、模块初始化、转子位置检测等关键环节,重点解决启动转矩为零、冲击电流大等挑战。系统基于STM32或C2000系列控制器,包含网侧/机侧变流器、检测保护单元及通信接口,通过励磁脉冲和电压响应分析实现高精度转子初始定位,为后续并网提供必要条件。代码级实现涵盖了ADC自检、数字IO验证及通信端口测试等核心功能。

huanghm88的专栏 306

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

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

YunWisdom 968

【3GPP核心网】【5G】史上最全的5G协议规范总结

物理层信道定义:TS38.211(物理层信号的生成、调制,DMRS和额外DMRS,PRACH configuration index,Point A等介绍)传输信道和控制信道的数据处理:TS38.212(包括复用,信道编码,交织,DCI,DMRS端口号等)物理层控制过程:TS38.213(同步,上行功控,随机接入,UE上报和接收控制消息的过程,SSB等)物理层测量:TS38.215(UE和网络的测量控制,UE测量能力)频率、频点相关F R1:TS38.101-1。

风云说通信 3176

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

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

iCode_girl的博客 564

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

沉晨尘宸的博客 1797

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: 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、付费专栏及课程。

余额充值