ccc-台大林轩田机器学习基石-hw1

news2024/11/25 22:42:07

文章目录

      • Question1-14
      • Question15-PLA
      • Question16-PLA平均迭代次数
      • Question17-不同迭代系数的PLA
      • Question18-Pocket_PLA
      • Question19-PLA的错误率
      • Question20-修改Pocket_PLA迭代次数

Question1-14

image-20230213222138283
对于有明确公式和定义的不需要使用到ml

image-20230213222256170
智能系统在与环境的连续互动中学习最优行为策略的机器学习问题,学习最优的序贯决策
image-20230213222314214
无标签分类
image-20230213222319181
从标注数据 学习预测模型
image-20230213222342472
主动地提出一些标注请求,将一些经过筛选的数据提交给专家进行标注
image-20230213222358722

  • 解题关键是计算N+1到N+L上的偶数个数
  • 0到N的偶数个数是 ⌊ N ⌋ 2 \frac{ ⌊N⌋}{2} 2N
  • 问题转化成(0到N+L的偶数个数-0到N的偶数个数)
    image-20230213222616934
    generate了D,但是N+1到N+L上L个点没有generate。每个点都有{被generate,没被generate}两种可能,所以是 2 L 2^L 2L
    image-20230213222648857
    由“无免费午餐定理”可知,任何算法在没有噪声时对于未知样本期望相等
    image-20230213222916263
    P ( 5 o r a n g e & 5 e l s e ) = C 10 5 2 10 P(5orange\&5else)=\frac{C_{10}^5}{2^{10}} P(5orange&5else)=210C105

在这里插入图片描述

from scipy.special import comb
print(comb(10,5)/2**10)

image-20230213222910522
P ( 9 o r a n g e & 1 e l s e ) = C 10 9 0. 9 9 × 0.1 P(9orange\&1else)=\frac{C_{10}^9}{0.9^{9}\times0.1} P(9orange&1else)=0.99×0.1C109
在这里插入图片描述

print(comb(10,9)*((0.9)**9)*0.1)

image-20230213222906378

  • 分v=0.1和0时讨论
    P = C 10 1 ( 9 10 ) 1 ( 1 10 ) 9 + C 10 0 ( 1 10 ) 10 P=C_{10}^1{(\frac 9{10})^{1}{(\frac 1 {10})}^{9} }+C_{10}^0{{(\frac 1 {10})}^{10}} P=C101(109)1(101)9+C100(101)10
    在这里插入图片描述
    image-20230213222902507
    H o e f f d i n g : P [ ∣ μ − v ∣ > ϵ ] ≤ 2 e − 2 ϵ 2 N P [ v ≤ 0.1 ] = P [ 0.9 − v ≥ 0.8 ] = P [ μ − v ≥ 0.8 ] ≤ P [ ∣ μ − v ∣ ≥ 0.8 ] ≤ 2 e − 2 × 0. 8 2 × 10 ≈ 5.5215451440744015 × 1 0 − 6 Hoeffding:\mathbb P[| \mu-v|>\epsilon]\le 2e^{-2\epsilon ^2N}\\ \begin{aligned} \mathbb P[v\le 0.1] &=P[0.9-v\ge 0.8]\\ &=P[\mu-v\ge 0.8]\\ &\le P[|\mu-v|\ge 0.8]\\ &\le 2e^{-2\times 0.8^2\times 10}\\ &\approx5.5215451440744015\times 10^{-6} \end{aligned} Hoeffding:P[μv>ϵ]2e2ϵ2NP[v0.1]=P[0.9v0.8]=P[μv0.8]P[μv0.8]2e2×0.82×105.5215451440744015×106
    image-20230213222854537
  • A:奇数绿,偶数橙
  • B:奇数橙,偶数绿
  • C:1-3橙,4-6绿
  • D:1-3绿,4-6橙

5个橙1,只可能是BC中,所以 1 32 = 8 256 \frac{1}{32}=\frac{8}{256} 321=2568

image-20230213222848025

  • 1全橙:BC
  • 2全橙:AC
  • 3全橙:BC
  • 4全橙:AD
  • 5全橙:BD
  • 6全橙:AD
  • 全A,B,C,D被重复算了一遍,要减去4
    P = 4 × 2 5 − 4 4 5 = 31 256 P=\frac{4\times2^5-4}{4^5}=\frac {31}{256} P=454×254=25631
    image-20230213222842952

Question15-PLA

image-20230213222842952
data链接
在这里插入图片描述

代码部分:
utils函数:

import numpy as np
#判别函数,判断所有数据是否分类完成
def Judge(X, y, w):
    n = X.shape[0]
    num = np.sum(X.dot(w) * y > 0)
    return num == n


def PLA(X, y, eta=1, max_step=np.inf):
    # 获取维度
    n, d = X.shape
    # 初始化
    w = np.zeros(d)
    # 迭代次数
    t = 0
    # 元素的下标
    i = 0
    # 错误的下标
    last = 0
    while not (Judge(X, y, w)) :
        if np.sign(X[i, :].dot(w) * y[i]) <= 0:
            t += 1
            w += eta * y[i] * X[i, :]
            # 更新错误
            last = i

        # 移动到下一个元素,如果达到n,则重置为0
        i += 1
        if i == n:
            i = 0

    return t, last, w

主函数:

import numpy as np
import utils as util

#读取数据
data = np.genfromtxt("hw1_15_train.dat")
#获取维度
n, d = data.shape
#分离X
X = data[:, :-1]
#添加偏置项1
X = np.c_[np.ones(n), X]
#分离y
y = data[:, -1]
print(util.PLA(X, y))

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

Question16-PLA平均迭代次数

image-20230213222936932
代码部分:
utils函数:

import numpy as np
import matplotlib.pyplot as plt

def Judge(X, y, w):
    n = X.shape[0]
    num = np.sum(X.dot(w) * y > 0)
    return num == n

def PLA(X, y, eta=1):
    n, d = X.shape
    w = np.zeros(d)
    t = 0
    i = 0
    last = 0
    while not (Judge(X, y, w)):
        if np.sign(X[i, :].dot(w) * y[i]) <= 0:
            t += 1
            w += eta * y[i] * X[i, :]
            last = i

        i += 1
        if i == n:
            i = 0

    return t, last, w

#运行g算法n次并返回平均的迭代次数
def average_of_n(g, X, y, n, eta=1):
    result = []
    data = np.c_[X, y]
    for i in range(n):
        np.random.shuffle(data)
        X = data[:, :-1]
        y = data[:, -1]
        result.append(g(X, y, eta=eta)[0])

    plt.hist(result)
    plt.xlabel("迭代次数")
    plt.title("平均运行次数为" + str(np.mean(result)))
    plt.show()

主函数:

import numpy as np
import utils as util
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False #显示负号

data = np.genfromtxt("hw1_15_train.dat")
#获取维度
n, d = data.shape
#分离X
X = data[:, :-1]
#添加偏置项1
X = np.c_[np.ones(n), X]
#分离y
y = data[:, -1]
util.average_of_n(util.PLA, X, y, 2000, 1)

在这里插入图片描述

Question17-不同迭代系数的PLA

image-20230213223011814
修改迭代系数即可:

util.average_of_n(util.PLA, X, y, 2000, 0.5)

在这里插入图片描述

Question18-Pocket_PLA

image-20230213223018992
utils函数:

import matplotlib.pyplot as plt
import numpy as np
#统计错误数量
def count(X, y, w):

    num = np.sum(X.dot(w) * y <= 0)
    return np.sum(num)

#预处理
def preprocess(data):
    # 获取维度
    n, d = data.shape
    # 分离X
    X = data[:, :-1]
    # 添加偏置项1
    X = np.c_[np.ones(n), X]
    # 分离y
    y = data[:, -1]

    return X, y

def Pocket_PLA(X, y, eta=1, max_step=np.inf):#max_step 限制迭代次数

    #获得数据维度
    n, d = X.shape
    #初始化
    w = np.zeros(d)
    #记录最优向量
    w0 = np.zeros(d)
    #记录次数
    t = 0
    #记录最少错误数量
    error = count(X, y, w0)
    #记录元素的下标
    i = 0
    while (error != 0 and t < max_step):
        if np.sign(X[i, :].dot(w) * y[i]) <= 0:
            w += eta * y[i] * X[i, :]
            #迭代次数增加
            t += 1
            #记录当前错误
            error_now = count(X, y, w)
            if error_now < error:
                error = error_now
                w0 = np.copy(w)


        #移动到下一个元素
        i += 1
        #如果达到n,则重置为0
        if i == n:
            i = 0
    return error, w0

#运行g算法n次,1代表训练集,2代表测试集
def average_of_n(g, X1, y1, X2, y2, n, eta=1, max_step=np.inf):
    result = []
    data = np.c_[X1, y1]
    m = X2.shape[0]
    for i in range(n):
        np.random.shuffle(data)
        X = data[:, :-1]
        y = data[:, -1]
        w = g(X, y, eta=eta, max_step=max_step)[-1]
        result.append(count(X2, y2, w) / m)

    plt.hist(result)
    plt.xlabel("错误率")
    plt.title("平均错误率为"+str(np.mean(result)))
    plt.show()

主函数:

import matplotlib.pyplot as plt
import numpy as np
import utils as util
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

data_train = np.genfromtxt("hw1_18_train.dat")
data_test = np.genfromtxt("hw1_18_test.dat")

X_train, y_train = util.preprocess(data_train)
X_test, y_test = util.preprocess(data_test)

util.average_of_n(util.Pocket_PLA, X_train, y_train, X_test, y_test, 2000, max_step=50)

image-20230226150256716

Question19-PLA的错误率

image-20230213223033644
utils函数:

import matplotlib.pyplot as plt
import numpy as np

def count(X, y, w):
    #判断是否同号
    num = np.sum(X.dot(w) * y <= 0)
    return np.sum(num)

def Judge(X, y, w):
    n = X.shape[0]
    #判断是否同号
    num = np.sum(X.dot(w) * y > 0)
    return num == n


def preprocess(data):
    """
    数据预处理
    """
    # 获取维度
    n, d = data.shape
    # 分离X
    X = data[:, :-1]
    # 添加偏置项1
    X = np.c_[np.ones(n), X]
    # 分离y
    y = data[:, -1]

    return X, y

def PLA(X, y, eta=1,max_step=np.inf):
    n, d = X.shape
    w = np.zeros(d)
    t = 0
    i = 0
    last = 0
    while not (Judge(X, y, w)) and t<max_step:
        if np.sign(X[i, :].dot(w) * y[i]) <= 0:
            t += 1
            w += eta * y[i] * X[i, :]
            last = i

        i += 1
        if i == n:
            i = 0

    return t, last, w

#运行g算法n次,1代表训练集,2代表测试集
def average_of_n(g, X1, y1, X2, y2, n, eta=1, max_step=np.inf):
    result = []
    data = np.c_[X1, y1]
    m = X2.shape[0]
    for i in range(n):
        np.random.shuffle(data)
        X = data[:, :-1]
        y = data[:, -1]
        w = g(X, y, eta=eta, max_step=max_step)[-1]
        result.append(count(X2, y2, w) / m)

    plt.hist(result)
    plt.xlabel("错误率")
    plt.title("平均错误率为"+str(np.mean(result)))
    plt.show()

主函数:

import matplotlib.pyplot as plt
import numpy as np
import utils as util
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

data_train = np.genfromtxt("hw1_18_train.dat")
data_test = np.genfromtxt("hw1_18_test.dat")

X_train, y_train = util.preprocess(data_train)
X_test, y_test = util.preprocess(data_test)


util.average_of_n(util.PLA, X_train, y_train, X_test, y_test, 2000, max_step=50)

Question20-修改Pocket_PLA迭代次数

image-20230213223038905
utils函数:

import matplotlib.pyplot as plt
import numpy as np

def count(X, y, w):
    #判断是否同号
    num = np.sum(X.dot(w) * y <= 0)
    return np.sum(num)

def Judge(X, y, w):
    n = X.shape[0]
    #判断是否同号
    num = np.sum(X.dot(w) * y > 0)
    return num == n


def preprocess(data):
    """
    数据预处理
    """
    # 获取维度
    n, d = data.shape
    # 分离X
    X = data[:, :-1]
    # 添加偏置项1
    X = np.c_[np.ones(n), X]
    # 分离y
    y = data[:, -1]

    return X, y

def Pocket_PLA(X, y, eta=1, max_step=np.inf):#max_step 限制迭代次数

    #获得数据维度
    n, d = X.shape
    #初始化
    w = np.zeros(d)
    #记录最优向量
    w0 = np.zeros(d)
    #记录次数
    t = 0
    #记录最少错误数量
    error = count(X, y, w0)
    #记录元素的下标
    i = 0
    while (error != 0 and t < max_step):
        if np.sign(X[i, :].dot(w) * y[i]) <= 0:
            w += eta * y[i] * X[i, :]
            #迭代次数增加
            t += 1
            #记录当前错误
            error_now = count(X, y, w)
            if error_now < error:
                error = error_now
                w0 = np.copy(w)


        #移动到下一个元素
        i += 1
        #如果达到n,则重置为0
        if i == n:
            i = 0
    return error, w0

#运行g算法n次,1代表训练集,2代表测试集
def average_of_n(g, X1, y1, X2, y2, n, eta=1, max_step=np.inf):
    result = []
    data = np.c_[X1, y1]
    m = X2.shape[0]
    for i in range(n):
        np.random.shuffle(data)
        X = data[:, :-1]
        y = data[:, -1]
        w = g(X, y, eta=eta, max_step=max_step)[-1]
        result.append(count(X2, y2, w) / m)

    plt.hist(result)
    plt.xlabel("错误率")
    plt.title("平均错误率为"+str(np.mean(result)))
    plt.show()

主函数:

import matplotlib.pyplot as plt
import numpy as np
import utils as util
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

data_train = np.genfromtxt("hw1_18_train.dat")
data_test = np.genfromtxt("hw1_18_test.dat")

X_train, y_train = util.preprocess(data_train)
X_test, y_test = util.preprocess(data_test)


util.average_of_n(util.Pocket_PLA, X_train, y_train, X_test, y_test, 2000, max_step=100)

image-20230226151901586

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

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

相关文章

Android OTA 相关工具(四) 查看 payload 文件信息

文章目录1. payload_info.py 的使用1. 环境2. 帮助信息2. 查看 payload 文件信息1. 不带选项查看2. 使用 stats 选项查看3. 使用 signagures 选项4. 使用 list_ops 选项查看3. 其它一直以来&#xff0c;很多人都表达过很想去研究一下 Android OTA 的 payload 文件&#xff0c;看…

CSDN原力增长规则解读 实测一个月

CSDN原力越来越难了&#xff0c;当然&#xff0c;这对生态发展来说也是好事。介绍下原力增长有哪些渠道吧。发布原创文章&#xff1a;10分/次&#xff0c;每日上限为15分、2篇回答问题&#xff1a;1分/次&#xff0c;每日上限2分&#xff0c;2回答发动态&#xff1a;1分/次&…

MyBatis 的工作原理解析

文章目录前言一、mybatis工作原理1.1 流程图1.2 步骤解析1.3 代码实现前言 本文记录 Mybatis 的工作原理&#xff0c;做到知识梳理总结的作用。 一、mybatis工作原理 Mybatis 的总体工作原理流程图如下图所示 1.1 流程图 1.2 步骤解析 Mybatis 框架在工作时大致经过8个步骤…

【ArcGIS Pro二次开发】(9):GeoProcessing工具和自定义工具的调用

ArcGIS Pro自带了1000种以上的GeoProcessing工具&#xff0c;几乎可以实现所有你想要做的事。 ArcGIS Pro的二次开发并不需要我们从底层做起&#xff0c;很多功能只要学会调用工具并组合使用&#xff0c;就完全可以实现。 下面介绍如何调用系统自带的GeoProcessing工具&#x…

pmp考试费用要多少?

PMP所带来的费用分为三种&#xff1a;PMP考试费用&#xff0c;PMP培训费用&#xff0c;以及PMP续证费用一、PMP 费用⭕PMP考试费用这个属于PMP本身的考试费用&#xff0c;由PMI机构收取&#xff0c;然后是交给人才管理中心的&#xff0c;费用是3900元人民币&#xff0c;补考的话…

蓝桥杯 考勤打卡

问题描述 小蓝负责一个公司的考勤系统, 他每天都需要根据员工刷卡的情况来确定 每个员工是否到岗。 当员工刷卡时, 会在后台留下一条记录, 包括刷卡的时间和员工编号, 只 要在一天中员工刷过一次卡, 就认为他到岗了。 现在小蓝导出了一天中所有员工的刷卡记录, 请将所有到岗…

机器学习可解释性一(LIME)

随着深度学习的发展&#xff0c;越来越多的模型诞生&#xff0c;并且在训练集和测试集上的表现甚至于高于人类&#xff0c;但是深度学习一直被认为是一个黑盒模型&#xff0c;我们通俗的认为&#xff0c;经过训练后&#xff0c;机器学习到了数据中的特征&#xff0c;进而可以正…

Python 多进程多线程线程池进程池协程

目录 一、线程与进程很简单的介绍 1.1 线程与进程的区别 二、多进程Process 2.1 多进程与多线程的区别 2.2 多进程为啥要使用队列 2.3 控制进程运行顺序 2.3.1 join &#xff0c; 2.3.1 daemon 守护进程 2.4 进程id 2.5 进程 存活状态is_alive() 2.5 实现自定义多…

python“r e 模块“常见函数详解

正则表达式&#xff1a;英文Regular Expression,是计算机科学的一个重要概念&#xff0c;她使用一种数学算法来解决计算机程序中的文本检索&#xff0c;匹配等问题&#xff0c;正则表达式语言是一种专门用于字符串处理的语言。在很多语言中都提供了对它的支持&#xff0c;re模块…

python+pytest接口自动化(2)-HTTP协议基础

HTTP协议简介HTTP 即 HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09;&#xff0c;是互联网上应用最为广泛的一种网络协议。所有的 WWW 文件都必须遵守这个标准。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。HTTP 协议在 OSI 模型中属…

外贸人用远程工具进行跟单的详细操作

大多了外贸企业为了能保证公司的正常运作&#xff0c;是允许员工远程办公甚至居家办公的。那么作为外贸人员如何用远程软件跟单&#xff1f;怎么用远程软件进行跟单操作&#xff1f; 今天就分享外贸人用远程工具进行跟单的详细操作。 首先我们需要远程连接到我们办公的电脑或服…

JavaScript:严格模式

一、理解严格模式 1.1、JavaScript 是一门弱类型语言&#xff0c;为了防止导致不可预测的错误&#xff0c;增加代码规范&#xff0c;为了使编写的代码变得更合理、更安全、更严谨&#xff0c;ECAMscript5 提出了"严格模式"&#xff0c;处于严格模式下运行的 JavaScr…

Mybatis 分页插件 PageHelper

Mybatis 分页插件 PageHelper 使用步骤&#xff1a;(不咋好用) 1.导入依赖&#xff1a; <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.3.0</version&g…

《图机器学习》-GNN 《A Single Layer of a GNN》

这里写目录标题一、A Single Layer of a GNN二、Classical GNN Layer1、GCN2、GraphSAGE3、GAT三、GNN Layer in Practice一、A Single Layer of a GNN 单层的神经网络包括两个部分&#xff1a; 消息转换(Message)信息聚合(Aggregation) GNNLayerMessageAggregationGNN\ Laye…

物联网的新应用--触摸物联网

摘要&#xff1a;本文介绍一下触摸物联网的新进展--电子皮肤的物联网应用。还以为物联网的作用领域单单是从现场采集数据或者传输命令到执行设备吗&#xff1f;不&#xff0c;物联网的应用范围远比控制一盏灯大的多。据网上报道&#xff0c;香港城市大学&#xff08;城大&#…

【软件测试面试题】大厂头条:如何定位bug?实际案例拿offer还不简单......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 问题&#xff1a; 用…

【数据结构】二叉树的四种遍历方式——必做题

写在前面学完上一篇文章的二叉树的遍历之后&#xff0c;来尝试下面的习题吧开始做题144. 二叉树的前序遍历 - 力扣&#xff08;LeetCode&#xff09;94. 二叉树的中序遍历 - 力扣&#xff08;LeetCode&#xff09;145. 二叉树的后序遍历 - 力扣&#xff08;LeetCode&#xff09…

Git使用笔记

分支branch切换到另一个分支git checkout 你要切换到的分支的名字git checkout master将本地的这个分支branch1和gitee上的branch1进行合并&#xff08;本地的branch1有的&#xff0c;gitee上branch1没有的增加上去&#xff09;git merge branch1git merge 分支的名字查看本地是…

图解LeetCode——剑指 Offer 25. 合并两个排序的链表

一、题目 输入两个递增排序的链表&#xff0c;合并这两个链表并使新链表中的节点仍然是递增排序的。 二、示例 2.1> 示例1&#xff1a; 【输入】1->2->4, 1->3->4 【输出】1->1->2->3->4->4 限制&#xff1a; 0 < 链表长度 < 1000 三、…

1、RocketMQ概述

文章目录1 MQ概述1.1 MQ简介1.2 MQ用途1.3 常见MQ产品1.4 MQ常见协议2 RocketMQ概述2.1 RocketMQ简介2.2 RocketMQ发展历程尚硅谷RocketMQ教程-讲师&#xff1a;Reythor雷&#xff08;老雷&#xff09; 我们缺乏的不是知识&#xff0c;而是学而不厌的态度 1 MQ概述 1.1 MQ简介…