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

news2024/9/28 1:16:50

机器学习(二) 线性代数基础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


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

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

相关文章

基于3D点云的语义分割模型调研(最新更新2023.10.30)

文章目录 3D点云分割数据集点云模型的评价指标3D点云语义分割方法发展PointSIFT模型的效果 https://blog.csdn.net/toCVer/article/details/126265782 基于深度学习的三维点云分割综述 3D点云分割数据集 传统的点云分割方法包括基于边缘检测的方法、基于区域增长的算法、基于特…

【Linux】:Linux开发工具之Linux编辑器vim的使用

&#x1f52b;1.Linux编辑器-vim使用 &#x1f4e4; vi/vim的区别简单点来说&#xff0c;它们都是多模式编辑器&#xff0c;不同的是vim是vi的升级版本&#xff0c;它不仅兼容vi的所有指令&#xff0c;而且还有一些新的特性在里面。例如语法加亮&#xff0c;可视化操作不仅可以…

deepsort算法 卡尔曼滤波 匈牙利算法

目标追踪最核心的两个算法就是卡尔曼滤波和匈牙利算法算法。 卡尔曼滤波&#xff1a;根据当前帧中的轨迹预测下一帧的轨迹。匈牙利算法:将预测的目标位置与检测到的目标位置进行匹配&#xff0c;实现对目标的准确跟踪。Sort算法 Sort算法分为以下几个步骤&#xff1a; 1.卡尔曼…

AS/400-物理文件-02

物理文件 - Physical file Physical file物理文件中的条目级别相关命令 Physical file 简介物理文件 这是一个文件。包含预定义的结构化格式的数据。它是PF类型。通过使用CRTPF命令创建PF。PF中包含的字段的最大数量为8000。最多包含120个关键字段。 PF 的结构如下 TYPE SPECIF…

【C++】多态 ⑥ ( 函数重定义涉及的问题 - 子类覆盖父类函数名 )

文章目录 一、函数重定义涉及的问题1、执行出错的代码2、代码分析3、错误原因分析 - 函数重定义问题 : 子类覆盖父类函数名4、正确调用函数的方法 一、函数重定义涉及的问题 1、执行出错的代码 错误代码示例 : #include "iostream" using namespace std;// 父类 cla…

Openssl数据安全传输平台014:OCCI环境搭建和使用:Centos8-Oracle19c代码跑通 + Window代码没跑通(不影响本项目)

文章目录 0 代码仓库1 启动Centos oracle数据库2 Winsows安装配置OCCI库2.1 下载文件2.2 VS 配置2.2.1 VC包含目录2.2.2 VC库目录2.2.3 连接器-附加依赖项2.2.4 代码测试-Oracle11g2.2.4.1 准备2.2.4.2 代码测试 3 Centos安装配置occi库3.0 强调3.1 下载instantclient库文件压缩…

国产思仪 1765A/B/C/D/E程控直流电源

1765A/B/C/D/E程控直流电源 产品综述 1765系列程控直流电源主要用于储能设备系统的测量分析和自动测试系统的加电测试。作为一种双象限直流电源&#xff0c;将电源输出和功率吸收的功能完全集成到单一系统中&#xff0c;可实现电源与负载功能的无缝转换&#xff0c;解决双向能源…

RT-Thread 内存管理(一)

内存管理 在计算系统中&#xff0c;通常存储空间可以分为两种&#xff1a;内部存储空间和外部存储空间。 内部存储空间通常访问速度比较快&#xff0c;能够按照变量地址随机访问&#xff0c;也就是我们通常所说的RAM&#xff08;随机访问存储器&#xff09;&#xff0c;可以把…

Linux gzip命令:压缩文件或目录

gzip 是 Linux 系统中经常用来对文件进行压缩和解压缩的命令&#xff0c;通过此命令压缩得到的新文件&#xff0c;其扩展名通常标记为“.gz”。 再强调一下&#xff0c;gzip 命令只能用来压缩文件&#xff0c;不能压缩目录&#xff0c;即便指定了目录&#xff0c;也只能压缩目录…

使用WebDav服务远程操作本地服务器?试试群晖NAS【内网穿透】

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《速学数据结构》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 1. 在群晖套件中心安装WebDav Server套件1.1 安装完成后&#xff0c;启动webdav服务&#xff0c;并勾选HTTP复选…

Linux 文件系统简介

文章目录 一、磁盘简介1.1 简介1.2 机械硬盘与固态硬盘1.2.1 机械磁盘&#xff08;HDD&#xff09;1.2.2 固态磁盘&#xff08;SSD&#xff09;1.2.3 I/O操作 二、文件系统简介2.1. 简介2.2 文件系统特点2.3 Linux文件系统 三、文件数据存储方式3.1 连续存储3.2 链接表存储3.3 …

Ansible中常用模块

目录 一、Ansible实现管理的方式 二、Ad-Hoc执行方式中如何获得帮助 三、Ansible命令运行方式及常用参数 四、Ansible的基本颜色代表信 五、Ansible中的常用模块 1、command模块 2、shell模块、script模块 3、copy模块、fetch模块 4、file模块 5、archive模块、unarc…

FPGA_Signal TapII 逻辑分析仪 在线信号波形抓取

FPGA_Signal TapII 逻辑分析仪 在线信号波形抓取 由于一些工程的仿真文件不易产生&#xff0c;所以我们可以利用 quartus 软件自带的 SignalTap 工具对波形进行抓取 对各个信号进行分析处理&#xff0c;让电子器件与FPGA进行正常通讯工作&#xff0c;也验证所绘制的波形图是否一…

Spring面试题:(一)IoC,DI,AOP和BeanFactory,ApplicationContext

IoC&#xff0c;DI&#xff0c;AOP思想 IOC就是控制反转&#xff0c;是指创建对象的控制权的转移。以前创建对象的主动权和时机是由自己把控的&#xff0c;而现在这种权力转移到Spring容器中&#xff0c;并由容器根据配置文件去创建实例和管理各个实例之间的依赖关系。对象与对…

NSSCTF做题第十页(1)

[GXYCTF 2019]禁止套娃 看源代码也没什么东西&#xff0c;扫一下看看 发现了git泄露 话不多说直接开整 下载下来了 flag.php 还是代码审计 <?php include "flag.php"; echo "flag在哪里呢&#xff1f;<br>"; if(isset($_GET[exp])){ if (!preg_…

怎么看电脑有几个cpu?还有cpu是几核的?

一、怎么查看电脑有几个cpu 电脑CPU是电脑的核心&#xff0c;CPU是中央处理器&#xff0c;是电脑进行线程调度的关键&#xff0c;可以通过查看电脑CPU性能个数可以判定一个电脑的性能。今天小编介绍下如何查看电脑CPU个数。 简单的方式直接查看CPU个数。启动电脑后&#xff0c;…

喜讯!合合信息顺利通过CMMI3级评估

近日&#xff0c;在擎标顾问团的咨询辅导下&#xff0c;上海合合信息科技股份有限公司&#xff08;简称“合合信息”&#xff09;顺利通过了CMMI3级评估。CMMI是国际上最流行、最实用的一种软件生产过程标准和软件企业成熟度等级认证的标准&#xff0c;通过该认证表明企业在开发…

Cesium笔记(0):Cesium简介和本地运行

一、Cesium介绍 是国外一个基于JavaScript编写的使用WebGL的地图引擎开源程序&#xff0c;可以免费用于商业和非商业 二、特点 支持3D,2D,2.5D形式的地图展示可以自行绘制图形&#xff0c;高亮区域&#xff0c;并提供良好的触摸支持支持绝大多数的浏览器和mobile动态地理空间…

【Python百练——第2练】使用Python做一个猜数字小游戏

&#x1f490;作者&#xff1a;insist-- &#x1f490;个人主页&#xff1a;insist-- 的个人主页 理想主义的花&#xff0c;最终会盛开在浪漫主义的土壤里&#xff0c;我们的热情永远不会熄灭&#xff0c;在现实平凡中&#xff0c;我们终将上岸&#xff0c;阳光万里 ❤️欢迎点…

洛谷 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; } 切记 不要复制题…