实验一 逻辑回归

news2024/11/15 15:47:49

一、实验目的

1)学习并掌握常见的机器学习方法;

2)能够结合所学的python知识实现机器学习算法;

3)能够用所学的机器学习算法解决实际问题。

二、实验内容与要求

1)掌握线性回归及逻辑回归的原理;

2)根据所提供的代码,完成基本的逻辑回归;

3)能够正确输出结果。

三、实验过程及代码

1)数据导入及预处理

import numpy as np

import matplotlib.pyplot as plt

import h5py

from lr_utils import load_dataset

print(train_set_x_orig.shape)

print(train_set_y.shape)

print(classes.shape)

print(classes[0],classes[1])

结果:(209, 64, 64, 3) (1, 209) (2,) b'non-cat' b'cat'

2)显示图片

%matplotlib inline

plt.imshow(train_set_x_orig[0])

print(train_set_y[0][0])

plt.imshow(train_set_x_orig[2])

print(train_set_y[0][2])

print(train_set_y)

结果:

[[0 0 1 0 0 0 0 1 0 0 0 1 0 1 1 0 0 0 0 1 0 0 0 0 1 1 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 0 1 0 0 0 1 0 1 1 0 1 1 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 1 1 0 0 1 0 0 0 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 0 0 0 1 0 0 1 0 1 0 1 1 0 0 0 1 1 1 1 1 0 0 0 0 1 0 1 1 1 0 1 1 0 0 0 1 0 0 1 0 0 0 0 0 1 0 1 0 1 0 0 1 1 1 0 0 1 1 0 1 0 1 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0]]

3)进行图像判断

index = 2

print("y=" + str(train_set_y[:,index]) + ", it's a " + classes[np.squeeze(train_set_y)[index]].decode("utf-8") + "' picture")

结果:y=[1], it's a cat' picture

4)将训练集的维度降低并转置。

train_set_x_flatten  = train_set_x_orig.reshape(train_set_x_orig.shape[0],-1).T

print(train_set_x_flatten.shape)

print(train_set_y.shape)

test_set_x_flatten = test_set_x_orig.reshape(test_set_x_orig.shape[0], -1).T

print(test_set_x_flatten.shape)

print(test_set_y.shape)

结果:(12288, 209) (1, 209) (12288, 50) (1, 50)

5)预处理

预处理步骤是对数据集进行居中和标准化,这意味着可以减去每个示例中整个umpy数组的平均值,然后将每个示例除以整个numpy数组的标准偏差。

train_set_x = train_set_x_flatten / 255

test_set_x = test_set_x_flatten / 255

6)构建模型

def sigmoid(z):

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

    return s

sigmoid(0)

def initialize_with_zeros(dim):

    #Please Add Something

    w = np.zeros((dim,1))

    b = 0

    return w, b

def propagate(w, b, X, Y):

    #Please Add Something

    m = X.shape[1]

    A = sigmoid(np.dot(w.T, X) + b)

    first = -Y * np.log(A)

    second = (1 - Y) * np.log(1 - A)

    cost = np.sum(first - second) / m

    dw = (1 / m) * np.dot(X, (A - Y).T)

    db = (1 / m) * np.sum(A - Y)

    cost = np.squeeze(cost)

    grads = {

        "dw": dw,

        'db': db

    }

    return grads ,cost

def optimize(w , b , X , Y , num_iterations , learning_rate , print_cost = False):

    #Please Add Something

    costs = []

    for i in range(num_iterations):

        grads, cost = propagate(w, b, X, Y)

        dw = grads['dw']

        db = grads['db']

        w = w - learning_rate * dw

        b = b - learning_rate * db

        if (i % 100 == 0):

            costs.append(cost)

        if (print_cost & (i % 100 == 0)):

            print('迭代次数:%i  误差值%f' % (i, cost))

    params = {

        'w': w,

        'b': b

    }

    grads = {

        'dw': dw,

        'db': db

    }

    return params, grads, costs

def predict(w , b , X ):

    m  = X.shape[1] #图片的数量

    Y_prediction = np.zeros((1,m))

    w = w.reshape(X.shape[0],1)

    #计预测猫在图片中出现的概率

    A = sigmoid(np.dot(w.T , X) + b)

    for i in range(A.shape[1]):

        #将概率a [0,i]转换为实际预测p [0,i]

        Y_prediction[0,i] = 1 if A[0,i] > 0.5 else 0

    #使用断言

    assert(Y_prediction.shape == (1,m))

    return Y_prediction

def model(X_train, Y_train, X_test, Y_test, num_iterations = 2000 , learning_rate = 0.5 , print_cost = False):

    #Please Add Something

    w, b = initialize_with_zeros(X_train.shape[0])

    parameters, grads, costs = optimize(w, b, X_train, Y_train, num_iterations, learning_rate, print_cost)

    # 从字典“参数”中检索参数w和b

    w, b = parameters["w"], parameters["b"]

    # 预测测试/训练集的例子

    Y_prediction_test = predict(w, b, X_test)

    Y_prediction_train = predict(w, b, X_train)

    # 打印训练后的准确性

    print("训练集准确性:", format(100 - np.mean(np.abs(Y_prediction_train - Y_train)) * 100), "%")

    print("测试集准确性:", format(100 - np.mean(np.abs(Y_prediction_test - Y_test)) * 100), "%")

    d = {

            "costs" : costs,

            "Y_prediction_test" : Y_prediction_test,

            "Y_prediciton_train" : Y_prediction_train,

            "w" : w,

            "b" : b,

            "learning_rate" : learning_rate,

            "num_iterations" : num_iterations }

    return d

print("====================测试model====================")    

#这里加载的是真实的数据,请参见上面的代码部分。

d = model(train_set_x, train_set_y, test_set_x, test_set_y, num_iterations = 2000, learning_rate = 0.005, print_cost = True)

结果:====================测试model==================== 迭代次数:0 误差值0.693147 迭代次数:100 误差值0.584508 迭代次数:200 误差值0.466949 迭代次数:300 误差值0.376007 迭代次数:400 误差值0.331463 迭代次数:500 误差值0.303273 迭代次数:600 误差值0.279880 迭代次数:700 误差值0.260042 迭代次数:800 误差值0.242941 迭代次数:900 误差值0.228004 迭代次数:1000 误差值0.214820 迭代次数:1100 误差值0.203078 迭代次数:1200 误差值0.192544 迭代次数:1300 误差值0.183033 迭代次数:1400 误差值0.174399 迭代次数:1500 误差值0.166521 迭代次数:1600 误差值0.159305 迭代次数:1700 误差值0.152667 迭代次数:1800 误差值0.146542 迭代次数:1900 误差值0.140872 训练集准确性: 99.04306220095694 % 测试集准确性: 70.0 %

7)绘制图

costs = np.squeeze(d['costs'])

plt.plot(costs)

plt.ylabel('cost')

plt.xlabel('iterations (per hundreds)')

plt.title("Learning rate =" + str(d["learning_rate"]))

plt.show()

结果:

四、实验分析及总结

逻辑回归也称作logistic回归分析,是一种广义的线性回归分析模型,属于机器学习中的监督学习。其推导过程与计算方式类似于回归的过程,但实际上主要是用来解决二分类问题(也可以解决多分类问题)。通过给定的n组数据(训练集)来训练模型,并在训练结束后对给定的一组或多组数据(测试集)进行分类。其中每一组数据都是由p 个指标构成。

经过这次的实验初步掌握了逻辑回归算法的使用,使用逻辑回归来解决具体问题,为之后的学习打下了基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108324.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设计模式之备忘录模式

Memento design pattern 备忘录模式的概念、备忘录模式的结构、备忘录模式的优缺点、备忘录模式的使用场景、备忘录模式的实现示例、备忘录模式的源码分析 1、备忘录模式的概念 备忘录模式,又称快照模式,即在不破坏封装的前提下,获取并保存一…

【数电】Simulation Test 模拟测试

一、 选择题:(共20分,每小题2分) 1、逻辑函数的所有最小项之和等于多少? A. 0 B. 1 C. 0或1 D. 任意值 2、与非门的多余输入端应如何处理?…

MySQL面试常问问题(基础) —— 赶快收藏

目录 1. 什么是内连接、外连接、交叉连接、笛卡尔积呢? 2. 那MySQL 的内连接、左连接、右连接有有什么区别? 3.说一下数据库的三大范式? 4.varchar与char的区别? 5.blob和text有什么区别? 6.DATETIME和TIMESTAMP…

SCSS学习笔记

文章目录1.安装scss2.选择器嵌套3.属性嵌套4.父选择器&5.变量5.1变量的规范5.2变量的作用域5.3给变量设置默认值(!default)6数据类型7.运算符8.插值语法9.流程控制语句9.1 条件语句9.2循环语句9.2.1for9.2.2each9.2.3while10import10.1引入scss不编译10.2嵌套引入scss11.mi…

【软件测试】概念篇

目录 一、需求 1.1用户需求 1.2软件需求 1.3需求的重要性 二、测试用例 三、BUG 3.1什么是BUG 3.2如何描述一个BUG 4.3BUG优先级 四、软件开发模型 4.1软件生命周期 4.2开发模型 定义:软件测试就是一系列活动,这些活动是为了评估一个程序或者…

新店速递 | IU酒店带您领略“东方古罗马”

淄博,位处鲁中,是黄河三角洲生态经济和蓝色经济区的交汇处。四季分明的气候造就了这座齐国故都的生态多样性,南高北低的地理位置使其峻岭平原兼具,鲁中的位置又赋予他交通枢纽的重要性。这里历史气息浓厚,社会文化自由…

中文语法纠错全国大赛获奖分享:基于多轮机制的中文语法纠错

中文语法纠错任务旨在对文本中存在的拼写、语法等错误进行自动检测和纠正,是自然语言处理领域一项重要的任务。同时该任务在公文、新闻和教育等领域都有着落地的应用价值。但由于中文具有的文法和句法规则比较复杂,基于深度学习的中文文本纠错在实际落地…

新能源汽车市场渗透率不断提高,锂电设备需求空间较大

根据观研报告网发布的《中国新能源汽车行业发展深度研究与投资趋势调研报告(2022-2029年)》显示,近年来,随着各国开启能源转型,在汽车领域,由于电动汽车具有高效节能、零排放等优点,已逐渐成为汽…

配置小型公司网络WLAN基本业务(AC通过三层口管理AP)

组网需求: 某小型企业由于业务需要,希望员工能在企业内部随时随地的访问Internet,进行移动办公。该企业部署了一台AR路由器作为出口网关,希望同时在AR路由器上部署WLAN功能,为企业员工提供无线网络接入服务&#xff0c…

JDK,JRE,JVM的作用及关系

1.定义JDK(Java Development Kit): 是Java语言的软件开发工具包,内部包含了代码的编译工具和运行工具。JRE(Java Runtime Environment): 指Java运行时环境,包含java虚似机、以及核心类库(java帮我们写好的程序)等java运行所需的东西。JVM(Java Virtual M…

必须要学习的源码--ConcurrentHashMap

并发安全的集合? 并发不安全的集合 在 Java 中,有一些集合是不安全的,因为它们不是线程安全的。这意味着如果多个线程同时访问这些集合,那么它们可能会出现不可预料的行为。 Java 中的并发不安全的集合包括: ArrayLi…

花房集团上市,走向元宇宙新征程

12月12日,花房集团在港交所成功上市,首日便受到追捧,当日最高涨幅达28.75%。 继360、360数科、鲁大师后,这是“红衣教主”周鸿祎收获的第四个IPO。 花房集团作为直播界元老之一,两年内三次申请IPO,终于在…

(GCC)STM32进阶详解之栈回溯

接上一篇: 函数调用 由上一篇大概了解了函数是如何被调用,中断或者说异常又是如何被调用,而这一篇相当于上一篇知识的一个应用,也是上一篇遗留的思考,即在hardfault中如何判断是从何处触发这个异常的。本来打算自己写…

GO09:整型、浮点、字符类型的介绍和使用细节

基本类型的使用 基本介绍 3.8整数的各个类型 func main(){var i int 1 fmt.Println("i", i) var j int8 127 fmt.Println("j", j) }int的无符号的类型: 整型的使用细节 一、Golang各整数部分:有符号和无符号,int u…

信而泰RENIX 802.1ag功能介绍-网络测试仪实操

一、EOAM概述​ 1.以太网​ 1.1以太网优点​ 简单易用​ 价格低廉​ 高拓展性​ 大势所趋,一统天下​ 1.2以太网缺点​ 可管理性差​ 定位故障手段少​ 定位故障速度慢​ 维护成本高​ 2.以太网OAM​ ■EOAM​ 为运营商服务​ 提高以太网可靠性、可维…

非零基础自学Golang 第15章 Go命令行工具 15.6 性能分析 15.6.2 通过文件方式 15.6.3 通过HTTP方式 15.7 小结

非零基础自学Golang 文章目录非零基础自学Golang第15章 Go命令行工具15.6 性能分析15.6.2 通过文件方式15.6.3 通过HTTP方式15.7 小结第15章 Go命令行工具 15.6 性能分析 15.6.2 通过文件方式 为了能分析Go程序的性能,我们需要在程序中导入runtime/pprof来生成性…

飞鹤揭榜“十四五”项目,牵头研制新一代婴配粉

12月22日,在“鲜萃活性营养,更适合中国宝宝体质”中国飞鹤60周年战略升级发布会上,飞鹤对外公布,其牵头申报的——“基于中国母乳研究的新一代婴配乳粉制造技术研究与示范”项目成功获批。 这是继去年飞鹤与江南大学、大连工业大…

大数据基础平台搭建-(二)Hadoop集群搭建

大数据基础平台搭建-(二)Hadoop集群搭建 大数据平台系列文章: 1、大数据基础平台搭建-(一)基础环境准备 2、大数据基础平台搭建-(二)Hadoop集群搭建 大数据平台是基于Apache Hadoop_3.3.4搭建的…

不同存储资源的应用场景及优缺点介绍

容器应用应当根据应用系统的特点,综合考虑容器应用对存储类型、存储性能及数据高可用等方面的要求,选择最适合的存储资源类型。常见的存储资源应用场景包括三类:将存储挂载在外部宿主机上、将存储放置于容器内部和使用外部共享存储。下面对每…

MySQL面试常问问题(数据库架构+存储引擎) —— 赶快收藏

目录 1.说说 MySQL 的基础架构? 2.一条 SQL 查询语句在 MySQL 中如何执行的? 3.MySQL有哪些常见存储引擎? 4.那存储引擎应该怎么选择? 5.InnoDB和MylSAM主要有什么区别? 1.说说 MySQL 的基础架构? MySQL逻辑架构图主要分三…