Day20 常見降維算法分析

一、常見的降維算法

  1. LDA線性判別
  2. PCA主成分分析
  3. t-sne降維

二、降維算法原理

2.1 LDA 線性判別
  • 原理 :LDA(Linear Discriminant Analysis)線性判別分析是一種有監督的降維方法。它的目標是找到一個投影方向,使得不同類別的數據在投影后盡可能分開,同一類別的數據盡可能聚集。通過最大化類間散度與類內散度的比值,來確定最優的投影方向。
  • 數學公式 :設 S b S_b Sb? 為類間散度矩陣, S w S_w Sw? 為類內散度矩陣,LDA 就是求解廣義特征值問題 S b w = λ S w w S_bw = \lambda S_ww Sb?w=λSw?w,其中 w w w 為投影方向, λ \lambda λ 為特征值。
2.2 PCA 主成分分析
  • 原理 :PCA(Principal Component Analysis)主成分分析是一種無監督的降維方法。它通過對數據進行線性變換,將原始數據投影到一組新的正交坐標軸上,這些坐標軸稱為主成分。主成分按照方差大小排序,方差越大表示該主成分包含的信息越多。PCA 選擇前 k k k 個方差最大的主成分作為新的特征,從而實現降維。
  • 數學公式 :首先計算數據的協方差矩陣 Σ \Sigma Σ,然后對 Σ \Sigma Σ 進行特征值分解 Σ = U Λ U T \Sigma = U\Lambda U^T Σ=UΛUT,其中 U U U 是特征向量矩陣, Λ \Lambda Λ 是特征值對角矩陣。選擇前 k k k 個特征向量組成投影矩陣 W W W,將原始數據 X X X 投影到新的空間 Y = X W Y = XW Y=XW
2.3 t - SNE 降維
  • 原理 :t - SNE(t - Distributed Stochastic Neighbor Embedding)是一種非線性降維方法,主要用于高維數據的可視化。它通過構建高維數據點和低維數據點之間的概率分布,使得高維空間中相似的數據點在低維空間中也盡可能相似。t - SNE 使用 t 分布來計算低維空間中的相似度,從而解決了傳統降維方法在處理局部結構時的不足。
  • 數學公式 :t - SNE 定義了高維空間中數據點之間的相似度 p i j p_{ij} pij? 和低維空間中數據點之間的相似度 q i j q_{ij} qij?,通過最小化這兩個分布之間的 KL 散度 C = K L ( P ∣ ∣ Q ) = ∑ i ∑ j p i j log ? p i j q i j C = KL(P||Q) = \sum_{i}\sum_{j}p_{ij}\log\frac{p_{ij}}{q_{ij}} C=KL(P∣∣Q)=i?j?pij?logqij?pij?? 來找到最優的低維表示。

三、實驗過程

3.1 數據預處理
  • 讀取 heart.csv 數據集,將特征數據和目標變量分離。
  • 對特征數據進行標準化處理,使得每個特征的均值為 0,方差為 1,以避免特征尺度對降維結果的影響。
import pandas as pd
from sklearn.preprocessing import StandardScaler# 讀取數據
data = pd.read_csv('./csv/heart.csv')
X = data.drop('target', axis=1)  # 特征數據
y = data['target']  # 目標變量# 數據標準化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
3.2 降維實驗
  • LDA 線性判別 :使用 sklearn 庫中的 LinearDiscriminantAnalysis 類進行降維,將數據降維到 1 維(因為目標變量是二分類,LDA 最多可將數據降維到 C ? 1 C - 1 C?1 維, C C C 為類別數)。
from sklearn.discriminant_analysis import LinearDiscriminantAnalysislda = LinearDiscriminantAnalysis(n_components=1)
X_lda = lda.fit_transform(X_scaled, y)
  • PCA 主成分分析 :使用 sklearn 庫中的 PCA 類進行降維,將數據降維到 2 維,以便可視化。
from sklearn.decomposition import PCApca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
  • t - SNE 降維 :使用 sklearn 庫中的 TSNE 類進行降維,將數據降維到 2 維,以便可視化。
from sklearn.manifold import TSNEtsne = TSNE(n_components=2)
X_tsne = tsne.fit_transform(X_scaled)
3.3 結果可視化
  • 分別繪制 LDA、PCA 和 t - SNE 降維后的數據散點圖,不同類別的數據用不同顏色表示,以便直觀觀察降維效果。
import matplotlib.pyplot as plt# LDA 可視化
plt.figure(figsize=(15, 5))
plt.subplot(131)
plt.scatter(X_lda, [0] * len(X_lda), c=y, cmap='viridis')
plt.title('LDA')# PCA 可視化
plt.subplot(132)
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis')
plt.title('PCA')# t - SNE 可視化
plt.subplot(133)
plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y, cmap='viridis')
plt.title('t - SNE')plt.show()

在這里插入圖片描述

四、實驗結果分析

4.1 可視化結果分析
  • 觀察 LDA 降維后的散點圖,分析不同類別數據在 1 維空間中的分離情況,判斷 LDA 是否能夠有效區分不同類別的數據。
  • 觀察 PCA 降維后的散點圖,分析數據在 2 維空間中的分布情況,判斷 PCA 是否能夠保留數據的主要信息。
  • 觀察 t - SNE 降維后的散點圖,分析數據在 2 維空間中的局部結構和聚類情況,判斷 t - SNE 是否能夠揭示數據的潛在分布。
4.2 降維效果評估
  • 可以使用一些評估指標來量化降維效果,如保留的方差比例(PCA)、分類準確率(使用降維后的數據進行分類任務)等。
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 使用 PCA 降維后的數據進行分類
X_train_pca, X_test_pca, y_train, y_test = train_test_split(X_pca, y, test_size=0.2, random_state=42)
model_pca = LogisticRegression()
model_pca.fit(X_train_pca, y_train)
y_pred_pca = model_pca.predict(X_test_pca)
accuracy_pca = accuracy_score(y_test, y_pred_pca)# 同理可對 LDA 和 t - SNE 降維后的數據進行分類評估print(f"PCA 降維后分類準確率: {accuracy_pca}")

五、結論

總結三種降維算法在 heart.csv 數據集上的優缺點和適用場景。例如,LDA 作為有監督的降維方法,在分類任務中可能更能突出類別間的差異;PCA 是無監督的線性降維方法,計算效率高,適合處理大規模數據;t - SNE 作為非線性降維方法,在可視化方面表現較好,但計算復雜度較高。根據實驗結果,為不同的數據分析需求推薦合適的降維算法。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/79335.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79335.shtml
英文地址,請注明出處:http://en.pswp.cn/web/79335.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python----機器學習(模型評估:準確率、損失函數值、精確度、召回率、F1分數、混淆矩陣、ROC曲線和AUC值、Top-k精度)

一、模型評估 1. 準確率(Accuracy):這是最基本的評估指標之一,表示模型在測試集上正確 分類樣本的比例。對于分類任務而言,準確率是衡量模型性能的直觀標準。 2. 損失函數值(Loss)&#xff1…

cdn 是什么?

內容分發網絡,Content Delivery Network 介紹 CDN(Content Delivery Network)是一種將內容分發到靠近用戶的邊緣服務器,以加速訪問速度、減少延遲、降低源站壓力的網絡系統。 CDN 把網站的靜態資源(如 HTML、JS、CSS、…

BUCK基本原理學習總結-20250509

一、電感伏秒平衡特性 處于穩定狀態的電感,開關導通時間(電流上升段)的伏秒數須與開關關斷(電流下降段)時的伏秒數在數值上相等,盡管兩者符號相反。這也表示,繪出電感電壓對時間的曲線,導通時段曲線的面積必須等于關斷時段曲線的面積。 二、BUCK的基本概念和原理 基…

【K8S系列】Kubernetes常用 命令

以下為的 Kubernetes 超全常用命令文檔,涵蓋集群管理、資源操作、調試排錯等核心場景,結合示例與解析, 高效運維 Kubernetes 環境。 一、集群與節點管理 1. 集群信息查看 查看集群基本信息kubectl cluster-info # 顯示API Server、DNS等核…

【Django】REST 常用類

ModelSerializer serializers.ModelSerializer 是 Django REST framework(DRF)里的一個強大工具,它能極大簡化序列化和反序列化 Django 模型實例的流程。下面從多個方面詳細介紹它: 1. 基本概念 序列化是把 Django 模型實例轉化…

GuassDB如何創建兼容MySQL語法的數據庫

GaussDB簡介 GaussDB是由華為推出的一款全面支持OLTP和OLAP的分布式關系型數據庫管理系統。它采用了分布式架構和高可靠性設計,可以滿足大規模數據存儲和處理的需求。GaussDB具有高性能、高可靠性和可擴展性等特點,適用于各種復雜的業務場景&#xff0c…

【無標題】I/O復用(epoll)三者區別▲

一、SOCKET-IO復用技術 定義:SOCKET - IO復用技術是一種高效處理多個套接字(socket)的手段,能讓單個線程同時監聽多個文件描述符(如套接字)上的I/O事件(像可讀、可寫、異常)&#x…

spring中的@Qualifier注解詳解

1. 核心作用 Qualifier是Spring框架中用于解決依賴注入歧義性的關鍵注解。當容器中存在多個相同類型的Bean時,Autowired默認按類型自動裝配會拋出NoUniqueBeanDefinitionException異常,此時通過Qualifier指定Bean的唯一標識符(名稱或自定義限…

Python爬蟲實戰:獲取文學網站四大名著并保存到本地

一、引言 1.1 研究背景 中國古典四大名著承載著深厚的文化底蘊,是中華民族的寶貴精神財富。在互聯網時代,網絡文學資源雖豐富多樣,但存在分散、質量參差不齊等問題 。部分文學網站存在訪問限制、資源缺失等情況,用戶難以便捷獲取完整、高質量的經典著作內容。開發專業的爬…

【一】瀏覽器的copy as fetch和copy as bash的區別

瀏覽器的copy as fetch和copy as bash的區別 位置:devTools->network->請求列表右鍵 copy as fetch fetch("https://www.kuaishou.com/graphql", {"headers": {"accept": "*/*","accept-language": &qu…

渠道銷售簡歷模板范文

模板信息 簡歷范文名稱:渠道銷售簡歷模板范文,所屬行業:其他 | 職位,模板編號:KRZ3J3 專業的個人簡歷模板,邏輯清晰,排版簡潔美觀,讓你的個人簡歷顯得更專業,找到好工作…

Java大數據可視化在城市空氣質量監測與污染溯源中的應用:GIS與實時數據流的技術融合

隨著城市化進程加速,空氣質量監測與污染溯源成為智慧城市建設的核心議題。傳統監測手段受限于數據離散性、分析滯后性及可視化能力不足,難以支撐實時決策。2025年4月27日發布的《Java大數據可視化在城市空氣質量監測與污染溯源中的應用》一文&#xff0c…

《面向對象程序設計-C++》實驗五 虛函數的使用及抽象類

程序片段編程題 1.【問題描述】 基類shape類是一個表示形狀的抽象類&#xff0c;area( )為求圖形面積的函數。請從shape類派生三角形類(triangle)、圓類&#xff08;circles&#xff09;、并給出具體的求面積函數。注&#xff1a;圓周率取3.14 #include<iostream> #in…

用c語言實現——一個交互式的中序線索二叉樹系統,支持用戶動態構建、線索化、遍歷和查詢功能

知識補充&#xff1a;什么是中序線索化 中序遍歷是什么 一、代碼解釋 1.結構體定義 Node 結構體&#xff1a; 成員說明&#xff1a; int data&#xff1a;存儲節點的數據值。 struct Node* lchild&#xff1a;該節點的左孩子 struct Node* rchild&#xff1a;該節點的右孩子…

高擬人化客服機器人顯著提升用戶接受度

高擬人化客服機器人顯著提升用戶接受度 目錄 高擬人化客服機器人顯著提升用戶接受度思維導圖詳細總結一、研究背景與目的二、理論基礎與變量設計三、研究方法與實驗設計四、核心結論與策略建議五、研究局限與未來方向關鍵問題與答案高擬人化客服機器人顯著提升用戶接受度,且與…

202534 | KafKa簡介+應用場景+集群搭建+快速入門

Apache Kafka 簡介 一、什么是 Kafka&#xff1f; Apache Kafka 是一個高吞吐量、分布式、可擴展的流處理平臺&#xff0c;用于構建實時數據管道和流應用程序。它最初由 LinkedIn 開發&#xff0c;并于 2011 年開源&#xff0c;目前由 Apache 軟件基金會進行維護。 Kafka 具備…

Blender 初學者指南 以及模型格式怎么下載

glbxz.com glbxz.com 可以直接下載Blender格式模型 第 1 步&#xff1a;打開 這就是 blender 打開時的樣子。 您面對的是左側和右側的工具欄&#xff0c;頂部是文件作&#xff0c;底部是時間軸&#xff0c;中間是 3D 視圖。 Blender 的默認起始網格是一個立方體&#xff0c…

RV1126 ROS2環境交叉編譯及部署(基于官方Docker)

RV1126 ROS2環境交叉編譯及部署(基于官方Docker) 0 前言1 SDK源碼更新1.1 啟動Docker容器1.2 更新SDK源碼1.3 SDK更新問題2 ROS2編譯配置3 Buildroot rootfs編譯ROS2的依賴包3.1 編譯問題解決4 使用Docker交叉編譯ROS24.1 準備Linux(Ubuntu) PC機的依賴環境4.1.1 Ubuntu PC機…

Go 面向對象,封裝、繼承、多態

Go 面向對象&#xff0c;封裝、繼承、多態 經典OO&#xff08;Object-oriented 面向對象&#xff09;的三大特性是封裝、繼承與多態&#xff0c;這里我們看看Go中是如何對應的。 1. 封裝 封裝就是把數據以及操作數據的方法“打包”到一個抽象數據類型中&#xff0c;這個類型…

無線網絡設備中AP和AC是什么?有什么區別?

無線網絡設備中AP和AC是什么&#xff1f;有什么區別&#xff1f; 一. 什么是AP&#xff1f;二. 什么是AC&#xff1f;三. AP與AC的關系 前言 肝文不易&#xff0c;點個免費的贊和關注&#xff0c;有錯誤的地方請指出&#xff0c;看個人主頁有驚喜。 作者&#xff1a;神的孩子都…