【机器学习(二) 线性代数基础I(Linear Algebra Foundations)】

机器学习(二) 线性代数基础I(Linear Algebra Foundations)

这一节主要介绍一些线性代数的基础。

目录

  • 机器学习(二) 线性代数基础I(Linear Algebra Foundations)
    • 1. 向量 Vectors
    • 2. 复杂度 Complexity
    • 3.线性函数 Linear Function
    • 4. 模,范数 Norm
    • 5. RMS
    • 6. 切比雪夫不等式 Chebyshev inequality
    • 7. 标准差 Standard deviation
    • 作业实战应用——聚类 Clustering
      • I 理论分析题-为什么使用均值中点作为代表点
      • II 理论分析题-线性二分类
      • III 代码实践 Iris聚类
        • 3.1 Load the data
      • 3.2 K-means Algorithm
      • 3.3 画3Dscatter图
      • 主函数
    • IV MNIST 数据集聚类

1. 向量 Vectors

一般用向量来表示输入数据的特征。
向量是行表示还是列表需要根据具体的问题确定,在本系列的标记中,没有特殊说明就是列向量,例如a是列向量,则a^T是行向量
向量的运算:
addition: commutative(交换律), associative(结合律)
subtraction
scalar-verctor mutliplication: associative, left distributive, right distributive
inner product, <a,b> 或者a·b

2. 复杂度 Complexity

在这里使用的都看为浮点数运算,基础的数学运算(arithmetic operation),包括addition,subtraction,mutliplication都看作为floating point operations 或者 flops。
探索复杂度则是考虑完成某个运算或者算法需要的全部flops。
我们一般大致估算这些复杂度。

3.线性函数 Linear Function

这里直接把课堂PPT放上来。
在这里插入图片描述
在这里插入图片描述

4. 模,范数 Norm

在这里插入图片描述

5. RMS

注意到RMS是可以用于对比不同sizes的向量的。
在这里插入图片描述

6. 切比雪夫不等式 Chebyshev inequality

在这里插入图片描述
NOTE:这里是fraction,是比例,把(rms(x)/a)^2展开之后,里面有一个n,k/n刚好就是比例。

7. 标准差 Standard deviation

在这里插入图片描述
在这里插入图片描述

作业实战应用——聚类 Clustering

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

I 理论分析题-为什么使用均值中点作为代表点

在这里插入图片描述
答案:
在这里插入图片描述
在这里插入图片描述

II 理论分析题-线性二分类

在这里插入图片描述
答案:
在这里插入图片描述
在这里插入图片描述

III 代码实践 Iris聚类

在这里插入图片描述

3.1 Load the data
#LoadData
#input: path for data
#output: data(array), features(str)
def LoadData(path):
    df = pd.read_csv(path) # df contains the keys as well as the values
    feature_names = df.keys()
    X = df.iloc[:, 0:4].to_numpy()#get all the rows and column 0,1,2,3 four features
    return X,feature_names

3.2 K-means Algorithm

# author: xxx
# University: xxx
# Usage: some wheels for k-means algorithm
# theory:
#Given x1,x2...xn and z1,z2,...zk(data, representatives)
#repeat
    #update partition : assign xi to Gj, make sure ||xi-zj||^2 minimum
    #update representatives
#until z1,z2,...zk remain unchanged  #convert to J unchanged
import numpy as np
from numpy import linalg as la
def k_means(data:'array',K:"int"=3,maxiters:'int'=30,loss:'f32'=0.0001):
    N=data.shape[0]# row of data
    assignment=np.zeros(N)
    initial=np.random.choice(N,K,replace=False)
    reps=data[initial,:]#
    for j in range(K):#update assignment, otherwise some groups number is 0
        assignment[initial[j]]=j
    distance=np.zeros(N)
    Jprev=np.infty
    for iter in range(maxiters):
        for i in range(N):
            ci=np.argmin([la.norm(data[i]-reps[p])for p in range(K)])
            assignment[i]=ci
            distance[i]=la.norm(data[i]-reps[ci])
            for j in range(K):#update reprentatives
                group=[i for i in range(N) if assignment[i]==j]
                SUM=np.sum(data[group],axis=0)
                lenN=len(group)
                #print(lenN)
                reps[j]=SUM/lenN
            J=la.norm(distance)**2/N# **2 means ^2
            if(iter>maxiters) or np.abs(J-Jprev)<(loss)*J:

                break
            Jprev=J
    print("iter:",iter)
    return assignment,reps

3.3 画3Dscatter图

def showfigure(classes,features:"4+1 key",reps):

    feature_names = features
    plt.figure()
    class_N=len(classes)

    ax = plt.axes(projection='3d')
    for i in range(class_N):
        data=classes[i]
        ax.scatter(data[:, 0], data[:, 1], data[:, 2])
    ax.scatter(reps[:,0], reps[:, 1], reps[:, 2],marker='X')
    ax.set_xlabel(feature_names[0])
    ax.set_ylabel(feature_names[1])
    ax.set_zlabel(feature_names[2])
    plt.show()

主函数

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from K_MEANS import *
if __name__ == '__main__':
    path='data/iris.csv'
    class_K=3
    data,features=LoadData(path)
    assignmnet,reps=k_means(data,K=class_K)
    #print(list(enumerate(assignmnet)))
    class_data = []
    class_index=[]
    for j in range(class_K):
        class_index.append([i for i,x in enumerate(assignmnet) if x==j])
        G=np.array(data[class_index[j],:])
        class_data.append(G)
    showfigure(class_data,features,reps)

IV MNIST 数据集聚类

在这里插入图片描述

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from K_MEANS import *
plt.ion()
# read MNIST training data
def LoadData(path):
    df = pd.read_csv(path)
    X = df.iloc[:, 1:].to_numpy() / 255.0       # values are scaled to be between 0 and 1
    y = df.iloc[:, 0].to_numpy()                # labels of images
    return X,y
def ShowFigure(X,RepsLabels):
    plt.figure()
    num=X.shape[0]
    print(num)
    row=4
    column=num//row
    for i in range(num):
        ax=plt.subplot(row, column, i + 1, xticks=[], yticks=[])
        image = X[i, :].reshape((28, 28))
        ax.set_title("Repres:%d"%RepsLabels[i],loc='center')
        plt.imshow(image, cmap='gray')
    plt.tight_layout()
    plt.show()
def Classifier(repres,represlabel,testdata,testlabels):
    accuracy=0
    K=repres.shape[0]# K classes
    N=testdata.shape[0] # N test data
    CorrectNum=0
    for i in range(N):
        prediction=np.argmin([la.norm(testdata[i]-repres[p])for p in range(K)])
        if represlabel[prediction]==testlabels[i]:
            #classified successfully
            CorrectNum+=1
    accuracy=CorrectNum/N
    print("accuracy:",accuracy)
    return accuracy

if __name__ == '__main__':
    path='data\mnist_train.csv'
    data, labels = LoadData(path)
    testpath='data\mnist_test.csv'
    testdata, testlabels = LoadData(path)
    class_K = 20
    accuary=[]
    for n in range(10):
        assignmnet, reps, J_List = k_means(data, maxiters=30,K=class_K)
        np.savetxt(f"MNISTAss{n}.cvs",assignmnet,fmt="%d")
        # print(list(enumerate(assignmnet)))
        class_data = []
        class_index = []
        class_labels=[]
        for j in range(class_K):
            class_index.append([i for i, x in enumerate(assignmnet) if x == j])
            G = np.array(data[class_index[j], :])
            Prelabels=np.argmax(np.bincount(labels[class_index[j]]))
            class_labels.append(Prelabels)
            class_data.append(G)
        print(class_labels)
        ShowFigure(reps,class_labels)
        a=Classifier(reps,class_labels,testdata,testlabels)
        accuary.append(a)

    plt.figure()
    print("len(accuary)", len(accuary))
    x_axis_data = [i + 1 for i in range(len(accuary))]  # x
    y_axis_data = [accuary[i] for i in range(len(accuary))]  # y
    print(y_axis_data)
    plt.plot(x_axis_data, y_axis_data, 'b*--', alpha=0.5, linewidth=1,
             label='Classification Accuracy')  # 'bo-'表示蓝色实线,数据点实心原点标注
    ## plot中参数的含义分别是横轴值,纵轴值,线的形状('s'方块,'o'实心圆点,'*'五角星   ...,颜色,透明度,线的宽度和标签 ,

    plt.legend()  # 显示上面的label
    plt.xlabel('Test Count')  # x_label
    plt.ylabel('Accuracy')  # y_label
    plt.gca().xaxis.set_major_locator(MaxNLocator(integer=True))
    #plt.gca().yaxis.set_major_locator(MaxNLocator(integer=True))
    plt.show()
# plot the first dozen images from the data set


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】第七站:vim的使用以及配置

文章目录 一、vim1.vim的介绍2.vim基本使用3.vim的命令模式常用命令4.底行模式 二、vim的配置 一、vim 1.vim的介绍 vim编辑器&#xff0c;用来文本编写&#xff0c;可以写代码 它是一个多模式的编辑器 它有很多的模&#xff0c;不过我们暂时先只考虑这三种模式 命令模式插入模…

2023年阿里云双11有什么优惠活动?详细攻略来了!

随着双十一的临近&#xff0c;阿里云也正式开启了双11大促&#xff0c;推出了“金秋云创季”活动&#xff0c;那么&#xff0c;2023年阿里云双11的优惠活动究竟有哪些呢&#xff1f;本文将为大家详细介绍。 一、阿里云双11活动时间 1、2023年10月27日-2023年10月31日&#xff…

洛谷 B2009 计算 (a+b)/c 的值 C++代码

目录 题目描述 AC Code 切记 题目描述 题目网址&#xff1a;计算 (ab)/c 的值 - 洛谷 AC Code #include<bits/stdc.h> using namespace std; int main() {int a,b,c;cin>>a>>b>>c;cout<<(ab)/c<<endl;return 0; } 切记 不要复制题…

[论文阅读]Ghost-free High Dynamic Range Imaging with Context-aware Transformer

Ghost-free HDRI with Context-aware Transformer 背景介绍已有算法本文算法实验对比 背景介绍 高动态范围成像&#xff08;HDR&#xff09;是一种图像技术&#xff0c;它能够捕捉到比传统图像更广泛的亮度范围。1997年&#xff0c;Paul Debevec在他的论文《Recovering High D…

Netty复习:(2)IdleStateHandler的用法

一、handler定义&#xff1a; package handler;import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter;public class MyChatServerHandler3 extends ChannelInboundHandlerAdapter {Overridepublic void userEventTriggered(…

第N个斐波那契数列

第N个斐波那契数列 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 class Solution { public:int tribonacci(int n) {int a[4]{0,1,1,2};if(n<4) return a[n];int kn-3;for(int i0; i<k;i){int tmpa[3];a[3]a[1]a[2]a[3];//不是【0】开始&…

从零开始搭建Prometheus+grafana服务器组件监控系统

服务器及相关组件监控 本文档主要记录了常用企业级服务器及各种组件的监控手段和监控部署方案&#xff0c;使企业可以实时感知服务器组件的健康状态&#xff0c;并在服务器或组件出现异常时及时做出反应。 本方案采用的Prometheusgrafana的方式实现对服务器及各种组件的监控&am…

CentOS 搭建本地 yum 源方式 安装 httpd 服务

CentOS 搭建本地 yum 源方式 安装 httpd 服务 修改 yum 源 挂载光驱 mkdir -p /mnt/cdrom mount /dev/cdrom /mnt/cdromvi /etc/fstab追加以下内容&#xff1a; /dev/cdrom /mnt/cdrom iso9660 defaults 0 0手动修改CentOS-Base.repo 备份 yum 源配置文件 mv /etc/yum.re…

06 MIT线性代数-线性无关,基和维数Independence, basis, and dimension

1. 线性无关 Independence Suppose A is m by n with m<n (more unknowns than equations) Then there are nonzero solutions to Ax0 Reason: there will be free variables! A中具有至少一个自由变量&#xff0c;那么Ax0一定具有非零解。A的列向量可以线性组合得到零向…

ubuntu PX4 vscode stlink debug设置

硬件 stlink holybro debug板 pixhawk4 安装openocd 官方文档&#xff0c;但是第一步安装建议从源码安装&#xff0c;bug少很多 github链接 编译安装&#xff0c;参考 ./bootstrap (when building from the git repository)./configure [options]makesudo make install安装后…

CentOS 7 安装和配置java环境

1 安装包准备 安装包可以通过下面地址进行版本选择安装&#xff1a; https://www.oracle.com/java/technologies/downloads/#java8 2 正式开始安装 本次分享的安装方法直接通过编辑/etc/profile文件实现java的安装 2.1 新建安装包存放目录 mkdir /java cd /java/ 2.2 解压安…

【音视频|PCM】PCM格式详解

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

javascript数据类型

目录 原始数据类型 引用数据类型 类型检测 类型转换 总结 原始数据类型 JavaScript 中有六种原始数据类型&#xff0c;它们是&#xff1a; Undefined&#xff08;未定义&#xff09;: 表示一个未被赋值的变量。Null&#xff08;空值&#xff09;: 表示一个空对象指针。B…

SpringBoot 公司推广系统 公司广告系统

SpringBoot 公司推广系统 公司广告系统 系统功能 首页功能: 广告展示 方案列表 站内搜索 资讯 查看详细咨询 登录注册 收藏 咨询方案 在线客服实时聊天 后台管理功能: 系统管理分为: 用户管理 角色管理 客户管理 首页轮播管理 公告管理 方案管理: 方案管理 资讯管理: 类型管…

打包个人项目成python算法包

*免责声明&#xff1a; 1\此方法仅提供参考 2\搬了其他博主的操作方法,以贴上路径. 3* 场景一: 使用conda pack进行打包个人项目 场景二: … 场景一: 使用conda pack进行打包个人项目 1.1 导出包列表 activate jiancepip list --formatfreeze >requirements.txt 1.…

Transformers实战(二)快速入门文本相似度、检索式对话机器人

Transformers实战&#xff08;二&#xff09;快速入门文本相似度、检索式对话机器人 1、文本相似度 1.1 文本相似度简介 文本匹配是一个较为宽泛的概念&#xff0c;基本上只要涉及到两段文本之间关系的&#xff0c;都可以被看作是一种文本匹配的任务&#xff0c; 只是在具体…

【JavaEE】HTTP协议

HTTP协议 HTTP是什么?HTTP 协议格式HTTP 请求格式HTTP响应格式协议格式总结 HTTP 请求 (Request)认识 URLURL 基本格式 关于 URL encode认识 "方法" (method)1. GET 方法2. POST 方法 认识请求 "报头" (header) HTTP 响应详解认识 "状态码" (st…

Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (二)

这是继上一篇文章 “Elasticsearch&#xff1a;使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation &#xff08;一&#xff09;” 的续篇。在这篇文章中&#xff0c;我主要来讲述 ElasticVectorSearch 的使用。 我们的设置和之前的那篇文章是一样的&#xff…

idea中Run/Debug Python项目报错 Argument for @NotNull parameter ‘module‘ of ...

idea中Run/Debug Python项目报错 Argument for NotNull parameter module of ... idea中运行Python项目main.py时报错&#xff1a; Error running main: Argument for NotNull parameter module of com/intellij/openapi/roots/ModuleRootManager.getInstance must not be nu…

Flash Attention 的优点以及Softmax 归一化系数解释

文章&#xff1a;FLASHATTENTION: Fast and Memory-Efficient Exact Attention with IO-Awareness 原始Attention 计算使用gpu存储标准流程 涉及两个gpu存储器&#xff1a; 1&#xff09;SRAM&#xff08;static Random Access Memory&#xff09;:静态随机存取存储器 2&…