聊聊基于Alink库的主成分分析(PCA)

news2024/9/17 7:32:04

概述

主成分分析(Principal Component Analysis,PCA)是一种常用的数据降维和特征提取技术,用于将高维数据转换为低维的特征空间。其目标是通过线性变换将原始特征转化为一组新的互相无关的变量,这些新变量称为主成分,它们按照方差递减的顺序排列,以保留尽可能多的原始数据信息。
主成分分析的基本思想可以总结如下:

  1. 寻找新的特征空间:PCA通过线性变换,寻找一组新的特征空间,使得新的特征具有以下性质:
    • 主成分具有最大的方差,尽可能保留原始数据的信息。
    • 不同主成分之间彼此无关,即它们是正交的(互相垂直)。
  2. 降低数据维度:保留方差较大的主成分,舍弃方差较小的主成分,从而实现数据降维。

主成分分析的步骤如下:

  • 中心化数据:将原始数据进行中心化,使得数据的均值为零。
  • 计算协方差矩阵:计算特征之间的协方差矩阵,描述了特征之间的线性关系。
  • 计算特征值和特征向量:对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。
  • 选择主成分:按照特征值的大小选择保留的主成分数量,通常选择方差较大的前几个主成分。
  • 得到新的特征空间:将原始特征投影到选定的主成分上,得到新的特征空间。

主成分分析的应用包括降维、去除数据噪声、数据可视化、特征选择等。通过保留最重要的特征,可以在减少数据维度的同时保持对数据的关键信息进行捕获。
在实际使用中,有时会将各个变量进行标准化,此时的协方差矩阵就相当于原始数据的相关系数矩阵。所以Alink的主成分分析组件提供了两种计算选择,参数CalculationType可以设置为相关系数矩阵(CORR)或者协方差矩阵(COV),默认为相关系数矩阵,即对标准化后的数据计算其主成分。

Alink库中的实现与应用

示例

以美国50个州的7种犯罪率为例,做主成分分析。这7种犯罪分别是:“murder”, “rape”, “robbery”, “assault”, “burglary”, “larceny”, “auto”。从这7个变量出发来评价各州的治安和犯罪情况是很难的,而使用主成分分析可以把这些变量概括为2-3个综合变量(即主成分),便于更简便的分析这些数据。

/**
 * 主成分分析
 * 1.基于默认的计算方式(CORR),计算主成分
 * 2.设置K为4,将原先的7个维度降低到4个维度
 * 3.输出向量列,使用VectorToColumnsBatchOp组组件将向量列转为4个数据列,名称分别为"prin1, prin2, prin3, prin4"
 * */
static void c_1() throws Exception {

    MemSourceBatchOp source = new MemSourceBatchOp(CRIME_ROWS_DATA, CRIME_COL_NAMES);

    source.lazyPrint(10, "Origin data");

    BatchOperator <?> pca_result = new PCA()
        .setK(4)
        .setSelectedCols("murder", "rape", "robbery", "assault", "burglary", "larceny", "auto")
        .setPredictionCol(VECTOR_COL_NAME)
        .enableLazyPrintModelInfo()
        .fit(source)
        .transform(source)
        .link(
            new VectorToColumnsBatchOp()
                .setVectorCol(VECTOR_COL_NAME)
                .setSchemaStr("prin1 double, prin2 double, prin3 double, prin4 double")
                .setReservedCols("state")
        )
        .lazyPrint(10, "state with principle components");

    pca_result
        .select("state, prin1")
        .orderBy("prin1", 100, false)
        .lazyPrint(-1, "Order by prin1");

    pca_result
        .select("state, prin2")
        .orderBy("prin2", 100, false)
        .lazyPrint(-1, "Order by prin2");

    BatchOperator.execute();

}

当然还可以先将数据标准化后再做主成分分析。如下

/**
 * 主成分分析
 * 1. 先将数据标准化
 * 2. 设置计算方式为协方差计算,设置K为4,将原先的7个维度降低到4个维度
 * 3.输出向量列,使用VectorToColumnsBatchOp组组件将向量列转为4个数据列,名称分别为"prin1, prin2, prin3, prin4"
 * */
static void c_2() throws Exception {

    MemSourceBatchOp source = new MemSourceBatchOp(CRIME_ROWS_DATA, CRIME_COL_NAMES);

    Pipeline std_pca = new Pipeline()
        .add(
            new StandardScaler()
                .setSelectedCols("murder", "rape", "robbery", "assault", "burglary", "larceny", "auto")
        )
        .add(
            new PCA()
                .setCalculationType(CalculationType.COV)
                .setK(4)
                .setSelectedCols("murder", "rape", "robbery", "assault", "burglary", "larceny", "auto")
                .setPredictionCol(VECTOR_COL_NAME)
                .enableLazyPrintModelInfo()
        );

    std_pca
        .fit(source)
        .transform(source)
        .link(
            new VectorToColumnsBatchOp()
                .setVectorCol(VECTOR_COL_NAME)
                .setSchemaStr("prin1 double, prin2 double, prin3 double, prin4 double")
                .setReservedCols("state")
        )
        .lazyPrint(10, "state with principle components");
    BatchOperator.execute();

}

应用
在聚类方面的应用

主要通过降维来减少特征的维度,从而在聚类过程中降低数据的复杂度和计算成本,同时提高聚类的效果。主要实现过程如下:

  1. 使用 PCA 对数据进行降维,得到新的特征空间。设置降维后的维度,通常选择较小的维度以减少特征数。
  2. 在降维后的特征空间上应用聚类算法,比如 K-means、DBSCAN 等。
  3. 使用适当的聚类评估指标,如轮廓系数等,来评估聚类的效果。

示例代码如下:

/**
 * 聚类+主成分分析
 * 1. 将数据降维,只使用5%的维度数据
 * 2. K-Means聚类:分别将原始数据与主成分分析后的数据做聚类操作
 * */
static void c_3() throws Exception {

    AkSourceBatchOp source = new AkSourceBatchOp().setFilePath(DATA_DIR + SPARSE_TRAIN_FILE);

    source
        .link(
            new PcaTrainBatchOp()
                .setK(39)
                .setCalculationType(CalculationType.COV)
                .setVectorCol(VECTOR_COL_NAME)
                .lazyPrintModelInfo()
        )
        .link(
            new AkSinkBatchOp()
                .setFilePath(DATA_DIR + PCA_MODEL_FILE)
                .setOverwriteSink(true)
        );
    BatchOperator.execute();

    BatchOperator <?> pca_result = new PcaPredictBatchOp()
        .setVectorCol(VECTOR_COL_NAME)
        .setPredictionCol(VECTOR_COL_NAME)
        .linkFrom(
            new AkSourceBatchOp().setFilePath(DATA_DIR + PCA_MODEL_FILE),
            source
        );

    Stopwatch sw = new Stopwatch();

    KMeans kmeans = new KMeans()
        .setK(10)
        .setVectorCol(VECTOR_COL_NAME)
        .setPredictionCol(PREDICTION_COL_NAME);

    sw.reset();
    sw.start();
    kmeans
        .fit(source)
        .transform(source)
        .link(
            new EvalClusterBatchOp()
                .setVectorCol(VECTOR_COL_NAME)
                .setPredictionCol(PREDICTION_COL_NAME)
                .setLabelCol(LABEL_COL_NAME)
                .lazyPrintMetrics("KMeans")
        );
    BatchOperator.execute();
    sw.stop();
    System.out.println(sw.getElapsedTimeSpan());

    sw.reset();
    sw.start();
    kmeans
        .fit(pca_result)
        .transform(pca_result)
        .link(
            new EvalClusterBatchOp()
                .setVectorCol(VECTOR_COL_NAME)
                .setPredictionCol(PREDICTION_COL_NAME)
                .setLabelCol(LABEL_COL_NAME)
                .lazyPrintMetrics("KMeans + PCA")
        );
    BatchOperator.execute();
    sw.stop();
    System.out.println(sw.getElapsedTimeSpan());

}

最后

感谢你们的阅读和喜欢,我收藏了很多技术干货,可以共享给喜欢我文章的朋友们,如果你肯花时间沉下心去学习,它们一定能帮到你。

因为这个行业不同于其他行业,知识体系实在是过于庞大,知识更新也非常快。作为一个普通人,无法全部学完,所以我们在提升技术的时候,首先需要明确一个目标,然后制定好完整的计划,同时找到好的学习方法,这样才能更快的提升自己。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

五、面试资料

我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下。
在这里插入图片描述

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

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

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

相关文章

react中useMemo钩子函数的使用

1.使用useMemo前展示 import { useState,useMemo } from "react"function kanno(num){console.log(999,num);return num }function UseMemo(){const [count1,setCount1] useState(0)const [count2,setCount2] useState(0)const result kanno(count1)console.log(…

ELK安装(Elasticsearch+Logstash+Kibana+Filebeat)

一、简介 1.1、软件简介 ELK其实是Elasticsearch&#xff0c;Logstash 和 Kibana三个产品的首字母缩写&#xff0c;这三款都是开源产品。 1.1.1、Elasticsearch简介 Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析…

magento2 安装win环境和linux环境

win10 安装 安装前提&#xff0c;php,mysql,apach 或nginx 提前安装好 并且要php配置文件里&#xff0c;php.ini 把错误打开 display_errorsOn开始安装 检查环境 填写数据库信息 和ssl信息&#xff0c;如果ssl信息没有&#xff0c;则可以忽略 填写域名和后台地址&#xff0…

花几千上万学习Java,真没必要!(二十九)

1、基本数据类型包装类&#xff1a; 测试代码1&#xff1a; package apitest.com; //使用Integer类的不同方法处理整数。 //将字符串转换为整数&#xff08;parseInt&#xff09;和Integer对象&#xff08;valueOf&#xff09;&#xff0c; //将整数转换回字符串&#xff08;…

Linux下使用gdb进行调试入门级

个人名片&#xff1a; &#x1f393;作者简介&#xff1a;嵌入式领域优质创作者&#x1f310;个人主页&#xff1a;妄北y &#x1f4de;个人QQ&#xff1a;2061314755 &#x1f48c;个人邮箱&#xff1a;[mailto:2061314755qq.com] &#x1f4f1;个人微信&#xff1a;Vir2025WB…

网络通信---UDP

前两天做了个mplayer项目&#xff0c;今日继续学习 网络内容十分重要&#xff01;&#xff01;&#xff01; 1.OSI七层模型 应用层:要传输的数据信息&#xff0c;如文件传输&#xff0c;电子邮件等&#xff08;最接近用户&#xff0c;看传输的内容类型到底是什么&#xff09; …

Linux使用mjpg-streamer进行图像传输

图像传输是一项在Linux操作系统中比较常见的一个操作&#xff0c;在视频图传时&#xff0c;一般是采用MJPG-streamer来进行图像传输&#xff0c;本文就以树莓派为例子&#xff0c;来示范一个图像传输。 1.树莓派的摄像头激活 首先更新树莓派 sudo apt-get update sudo apt-ge…

【Java基础语法】字符修改,以及equals的用法

前言&#xff1a; 小编这里将上一期String类型进行了补充&#xff0c;添加了字符串的修改&#xff0c;以及equals的用法内容&#xff0c;和hashcode的使用&#xff1b;上一期&#xff1a;http://t.csdnimg.cn/ijiM6 1.字符串的修改 在上一期中我们说到字符串是不能被修改的&am…

详细分析 Bladex中的swagger-resources资源未授权访问的解决方法

目录 1. 问题所示2. 原理分析2.1 RouterFunctionConfiguration 类2.2 SwaggerResourceHandler 类3. 解决方法3.1 网关过滤3.2 去除配置3.3 代码修改4. 彩蛋1. 问题所示 从而也导致资源接口文件泄露 https://xxx/swagger-resources 或者 ip:端口号/swagger-resources 2. 原理分…

matlab笔记 - 最小二乘法拟合直线的原理与实现

最小二乘法拟合直线原理与实现 一、引言二、原理概述1. 建模思路2.误差函数3.求解最优参数 三、matlab实现最小二乘法拟合直线1.直接代码实现2.MATLAB内置函数实现 四、扩展统计学与回归分析经济学工程学图像处理机器学习 一、引言 最小二乘法&#xff08;Least Squares Metho…

ElasticSearch搜索

ES搜索 elastic search 一套搜索引擎技术,主要技术栈包括 Elasticsearch&#xff1a;用于数据存储、计算和搜索 Kibana&#xff1a;用于数据可视化 在数据库模糊查询中,因为不走索引,所以效率很低,而在搜索引擎中,不仅效率高,而且即使出现个别错字,或者用拼音搜索,甚至用同…

自定义Observal返回数据

在写Angular项目的时候&#xff0c;很多都是用的Observal,但是有时候我们在接口还没好 &#xff0c;或者处理有些接口我们想要通过方法在observal返回特定的数据&#xff0c;这个时候要我们可以如下处理&#xff1a; 方法一、通过of返回 方法二&#xff1a;通过Observable的cr…

【Rust】所有权OwnerShip

什么是所有权 rust使用由编译器检查的一些规则构成的所有权系统来管理内存。且这不会影响程序的运行效率。 所有权规则 rust中每一个每一个值都有一个owner。在同一时刻&#xff0c;只能有一个owner。当这个owner超过范围&#xff0c;则该值会被丢弃。 String类型 为什么需…

Unity UGUI 之 自动布局组件

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 本文在发布时间选用unity 2022.3.8稳定版本&#xff0c;请注意分别 1.什么是自动布局组件…

vue3 使用Mock

官网: http://mockjs.com/ 安装 npm install mockjs -Dsteps1: main.js 文件引入 import /api/mock.jssteps2: src/api/mock.js import Mock from mockjs import homeApi from ./mockData/home /*** 1.拦截的路径:mock拦截了正常NetWork/网络请求,数据正常响应* 2.方法* …

22 Python常用内置函数——枚举

enumerate() 函数用来枚举可迭代对象中的元素&#xff0c;返回可迭代的 enumerate 对象&#xff0c;其中每个元素都是包含索引和值的元组。 print(enumerate(abcd)) print(list(enumerate(abcd))) # 枚举字符串中的元素 print(list(enumerate([hello, world]))) # 枚举列表中…

Mongodb文档和数组的通配符索引

学习mongodb&#xff0c;体会mongodb的每一个使用细节&#xff0c;欢迎阅读威赞的文章。这是威赞发布的第97篇mongodb技术文章&#xff0c;欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题&#xff0c;欢迎在文章下面点个赞&#xff0c;或者关…

前端canvas——赛贝尔曲线

曲线之美&#xff0c;不在于曲线本身&#xff0c;而在于用的人。 所以就有了这期赛贝尔曲线。 新规矩&#xff0c;先上个GIT。 效果图 开局一张图&#xff0c;代码全靠编。 代码 画骨 先想着怎么画一个心形吧&#xff0c;等你想好了&#xff0c;就知道怎么画了。 首先就还…

SearchGPT vs Google SearchGPT vs Perplexity 2024年AI搜索引擎评价测评

medium: https://medium.com/p/f7c9481efa50 SearchGPT User ReviewsSearchGPT VS GoogleSearchGPT VS Perplexity AI搜索引擎领域越来越多玩家参与&#xff0c;比如Google的Gemini OpenAI发布的SearchGPT以及Perplexity AI。OpenAI刚刚发布和SearchGPT&#xff0c;希望通过搜…

Internet Download Manager2024功能特点优势分析及使用建议及注意事项

1. Internet Download Manager简介 2. 功能特点 3. 优势分析 4. 专家评价 5. 使用建议及注意事项 6. 常见问题解答 7. 用户反馈及案例分享 8. IDM下载器的未来发展趋势 文章&#xff1a; 在互联网快速发展的今日&#xff0c;人们对于网络资源的获取和利用越来越频繁。无论…