通俗地讲讲数据降维的原理

什么是数据降维?关于这个问题,很多专家的说法都非常学术,估计很多普通人听不懂。所以,这里用通俗的语言解释一下,希望有助于更多的入门新人理解。

举一个简单的例子:假设一个小学的班级有5个学生,每个人有2们考试成绩,语文和数学。A同学的语文是100分,数学是100分;B同学的语文是90分,数学是100分;C同学的语文是80分,数学是100分;D同学的语文是70分,数学是100分;E同学的语文是60分,数学是100分。

对这个场景,我们要注意到,每位同学的数学成绩都是一样的,都是100分。

这时,如果我们提到“语文是80分,数学是100分的那个同学”,你一定知道我们指的一定是同学C。

但是,如果我们只说“语文是80分的那个同学”,你是不是也知道我们指的一定是同学C!

这就是一个将二维数据降维到一维数据的例子,因为大家的数学都是100分,所以每个同学的数学数据对区分同学之间的差异没有任何价值,仅仅使用语文数据(即一维数据)就足够了,而且用来区分同学100%够用。

所以,做数据分析时,常说的,如果一个维度的数据在各个样本之间的差异很小(用专业的话说就是方差很小)的话,这个数据维度就越没有价值。只有在各个样本之间的差异很大的数据维度(用专业的话说就是方差很大的维度),才值得保留。

这是一个非常浅显易懂的例子。稍微加入一些专业的表述,我们可以用一个二维坐标系来表示这5位同学,x轴代表语文的分数,y轴代表数学的分数,他们的坐标分别是:A(100,100), B(90,100),  C(80,100), D(70,100),  E(60,100)。

你看到了什么?没错,它们都位于y=100这条直线上,所不同的是x坐标值。


 

因此,在这个场景下,我们完全可以将一个含x轴和y轴的二维坐标系,转换为一个只含有x轴的一维坐标系。

懂了上面的道理,你就理解了降维的原理。

在上面的场景中,我们看到,语文分数和数学分数完全无关,因为无论语文分数多少,数学都是100分。用专业的语言讲,就是这两个特征是正交的(即相关系数为0)。因为是正交,我们很容易对这个场景进行处理,那就是直接在二维坐标系中删掉y轴,只保留x轴就够了。

在现实中,场景可就没这么简单了。通常,2个变量会有一定的相关度。即便是不相关,也不会像上面那个场景那么容易看出来。比如下面举个例子。

另一个班,还是5位同学,语文分数和数学分数转换为坐标分别是:A(100,60), B(90,70),  C(80,80), D(70,90),  E(60,100)。

你可能觉得,这是一个完全负相关的数据啊!没错,不过,这只是一个从当前坐标系看到的现象。

实际上,从数据降维的角度讲,我们可以将x轴和y轴的两个直角坐标轴,同时绕着原点顺时针旋转45%,这时你看到的是下面的图像。

没错,坐标轴旋转后,这个场景变成了第一个班级的场景,大家的y坐标都是 80*根号2,不同的只是x坐标值。至于坐标轴的转换公式,这里就细说,在我上一篇的文章中提到过。

其实,这就是数据降维的最基本道理,无论是用于数据降维的主成分分析技术还是因子分析技术,都是这个逻辑,只是场景不再是这么简单的小学生,而是维度更多的大数据了。

复杂的模型,背后往往都是最朴素的思考方法,希望这几个例子能让新人们理解到底数据降维是怎么回事。

(An Actuary)

<think>嗯,用户想了解串口调试助手的基本概念和使用方法,并且希望得到通俗易懂的解释。首先,我需要确定用户可能对串口通信不太熟悉,所以得从基础讲起。 首先,串口调试助手是什么?应该解释它是用于调试串口通信的软件工具,帮助开发者与硬件设备通过串口进行数据交互。然后,使用场景,比如嵌入式开发、单片机调试等。接下来,使用方法可能需要分步骤说明,比如连接设备、配置参数、发送和接收数据。 用户提供的引用内容里有几个相关的例子,比如引用[2]和[4]提到了Qt实现的串口调试助手,引用[3]是C#的例子。这些可以作为实际案例来说明如何操作。需要提到参数配置,比如波特率、数据位、停止位等,还有十六进制显示和发送的功能,这在引用[2]中有具体代码示例。 另外,用户可能想知道如何自己实现一个简单的串口调试助手,引用[3]和[4]提到了初始化串口列表和信号槽的使用,这部分可以作为扩展内容,但用户的问题主要是基本使用,所以可能需要简要提及开发方法,但重点还是使用层面。 需要注意用户要求通俗易懂,避免使用过于专业的术语,或者如果使用的话,要解释清楚。例如,解释波特率是什么,数据位的作用等。同时,用户可能关心如何连接硬件,比如使用USB转串口线,需要安装驱动等步骤,这些虽然引用里没提到,但可能是使用中的常见问题。 还要考虑用户的实际需求,比如他们可能是刚开始接触串口通信的开发者,或者是需要调试设备的技术人员。因此,需要分步骤说明,从硬件连接到软件设置,再到数据收发,每一步都简明扼要。 最后,根据用户提供的示例,生成相关问题。问题应该围绕串口调试助手的深入使用、常见问题处理、开发方法等,比如如何解析数据包、处理乱码、不同编程语言实现的差异等。</think>### 串口调试助手的基本概念与使用方法 #### 一、串口调试助手是什么? 串口调试助手是一种用于**调试串口通信**的软件工具,主要作用是通过计算机的串口(如USB转TTL、COM口)与外部硬件设备(如单片机、传感器)进行**双向数据交互**。它可以实现以下功能: - 发送指令或数据到硬件设备 - 接收并显示设备返回的数据 - 配置串口参数(如波特率、数据位) - 支持十六进制与ASCII格式转换 类似“翻译官”,在计算机和硬件之间建立沟通桥梁[^2][^3]。 --- #### 二、使用步骤(以典型操作为例) 1. **硬件连接** 使用USB转串口线连接电脑与设备,安装对应驱动程序(如CH340、CP2102)。 2. **软件配置** - 打开串口调试助手,选择对应的串口号(如COM3)[^3] - 设置参数: $$ \text{波特率} \, (9600,115200), \quad \text{数据位} \, (8), \quad \text{停止位} \, (1), \quad \text{校验位} \, (无) $$ - 勾选“十六进制显示”可解析二进制数据[^2] 3. **数据交互** - **发送数据**:在发送区输入指令(如`AT+RST`),点击“发送” - **接收数据**:设备返回的数据会实时显示在接收区(支持滚动查看) - 特殊功能:自动添加换行符、定时发送、数据保存[^4] --- #### 三、通俗理解 假设你通过微信发送消息: 1. 你的手机是“电脑端”,朋友的手机是“硬件设备” 2. 串口参数相当于约定好的“语言规则”(如中文还是英文) 3. 串口调试助手就是微信APP,负责把你说的话(数据)翻译并传递过去,再把回复显示给你 --- #### 四、开发实现(进阶) 若需自己编写串口调试助手: - **C#**:使用`System.IO.Ports`命名空间获取串口列表[^3] - **Qt**:通过`QSerialPort`类实现数据收发,用信号槽机制处理异步通信[^4] - **关键代码片段**: ```python # 伪代码示例:接收数据 def receive_data(): data = serial_port.read_all() if hex_mode: display(data.toHex()) else: display(data.decode("GBK")) # 解决中文乱码[^2] ``` --- 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值