[Day 7] 非監督式學習-降維 - iT 邦幫忙

文章推薦指數: 80 %
投票人數:10人

降維演算法. 常見的降維方法有兩種分別有線性方法的主成分分析(PCA)以及非線性的t-隨機鄰近嵌入 ... 2021iThome鐵人賽 DAY 7 0 AI&Data 全民瘋AI系列2.0系列第 7篇 [Day7]非監督式學習-降維 13th鐵人賽 ai 人工智慧 機器學習 10程式中 2021-09-1917:37:32596瀏覽 非監督式學習-降維 今日學習目標 降維觀念 何謂降維?降維有什麼優點? 常見兩種降維方法 PCA&t-SNE 降維(DimensionReduction) 一般資料常見的表示方法有一維(數線)、二維(XY平面)和三維(XYZ立體)。

當大於三維的資料就難以視覺化呈現,那麼我們該如何表示高維度的資料同時又不能壓縮原本資料間彼此的關連性呢?這時降維就能幫助你了!降維顧名思義,就是原本的資料處於在一個比較高的維度作標上,我們希望找到一個低維度的作標來描述它,但又不能失去資料本身的特質。

為什麼要降維? 想想看如果我們能夠把一些資料做壓縮,同時又能夠保持資料原來的特性。

因此我們可以用比較少的空間,或是計算時用比較少的資源就可以得到跟沒有做資料壓縮之前得到相似的結果。

此外資料降維可以幫助我們進行資料視覺化,二維可以用平面圖表示、三維可以用立體圖作表示,而大於三維的空間難以視覺化做呈現。

降維演算法 常見的降維方法有兩種分別有線性方法的主成分分析(PCA)以及非線性的t-隨機鄰近嵌入法(t-SNE)。

下圖例子是將28*28大小的手寫數字照片,分別透過上述兩種降維方法將一張784個像素的影像降成2維並投射在平面座標上。

我們可以發現PCA降為後可以大致將0~9的手寫數字照片在平面上分成十群,不過彼此間的界線還是很模糊。

而我們透過t-SNE方法降為後可以看到平面上很清楚的將這十個數字分成十群。

因此我們可以得知手寫數字的影像在非線性的降維轉換效果是比較好的。

Principalcomponentanalysis(PCA) T-DistributedStochasticNeighborEmbedding(t-SNE) 因為t-SNE允許非線性的轉換,此外t-SNE使用了更複雜的公式來表達高維與低維之間的關係。

因此在這種0~9有十個分類的情況下可以確保彼此間的距離會被區隔該而不會重疊。

Principalcomponentanalysis(PCA) 主成份分析(Principalcomponentanalysis,PCA)。

其主要目的是把高維的點頭影到低維的空間上,並且低維度的空間保有高維空間中大部分的性質。

透過將一個具有n個特徵空間的樣本,轉換為具有k個特徵空間的樣本,其中k必定要小於n。

此外PCA只允許線性的轉換。

如下圖所示,我們將捐尾花朵資料集進行PCA降維。

將原有四個特徵分別有花瓣與花萼的長與寬,透過線性轉換成兩維並投射在平面上。

我們可以發現三種花的類別在平面上各自都有線性的趨勢,也就是圖中紅色的線條。

PCA的主要步驟 首先一開始先求出所有資料點中心µ,也就是將每一個資料點的平均。

接著將每一個資料點減去µ,也就是做資料點的平移,平移後原點是所有點的中心。

第三步計算特徵協方差矩陣,其中矩陣對角線上分別是每個特徵的方差,而非對角線上的數值是不同特徵間彼此的協方差。

協方差是衡量兩個變數同時變化的變化程度,協方差絕對值越大兩者對彼此的影響越大。

第四步驟對矩陣進行特徵值分解,計算協方差矩陣的特徵向量和特徵值並選取特徵向量。

第五步驟將特徵值由小到大排序,並選取其中最大的k個特徵。

然後將這些k個特徵向量作為特徵向量矩陣。

最後對資料集中的每一個特徵轉換為新的特徵。

先求出所有資料點中心µ 將每一個資料點減去µ 計算特徵的協方差矩陣 對矩陣進行特徵值分解 取出最大的k個特徵值對應的特徵向量 將資料點投影到選取的特徵向量上 T-DistributedStochasticNeighborEmbedding(t-SNE) t-SNE目標跟PCA是一樣的,它們都希望把高維的資料投影到低維中,並且保留高維中的點與點之間的關係與特性。

兩者不同的點在於t-SNE允許非線性的轉換。

因為t-SNE使用了更複雜的公式來表達高維與低維之間的關係。

主要是將高維的數據用高斯分佈的機率密度函數近似,而低維數據的部分使用t分佈的方式來近似。

PCA&t-SNE整理 PCA和t-SNE是兩個不同降維的方法,PCA的優點在於簡單若新的點要映射時直接代入公式即可得出降維後的點。

若t-SNE有新的點近來時我們沒有去計算新的點和舊的點之間的關係因此我們無法將新的點投影下去。

t-SNE的優點是可以保留原本高維距離較遠的點降維後依然保持遠的距離,因此這些群降維後依然保持群的特性。

PCA允許線性的轉換 t-SNE允許非線性的轉換 [程式實作] PCA fromsklearn.decompositionimportPCA pca=PCA(n_components=2,iterated_power=1) train_reduced=pca.fit_transform(X_train) print('PCA方差比:',pca.explained_variance_ratio_) print('PCA方差值:',pca.explained_variance_) t-SNE fromsklearn.manifoldimportTSNE tsneModel=TSNE(n_components=2,random_state=42,n_iter=1000) train_reduced=tsneModel.fit_transform(X_train) t-SNE不適用於新資料。

PCA降維可以適用新資料,可呼叫transform()函式即可。

而t-SNE則不行。

因為演算法的關係在scikit-learn套件中的t-SNE演算法並沒有transform()函式可以呼叫。

Reference 深入學習主成分分析(PCA)演算法原理及其Python實現 本系列教學內容及範例程式都可以從我的GitHub取得! 留言 追蹤 檢舉 上一篇 [Day6]非監督式學習K-means分群 下一篇 [Day8]線性迴歸(LinearRegression) 系列文 全民瘋AI系列2.0 共31篇 目錄 RSS系列文 訂閱系列文 29人訂閱 27 [Day27]機器學習常犯錯的十件事 28 [Day28]儲存訓練好的模型 29 [Day29]使用PythonFlask架設API吧! 30 [Day30]使用Heroku部署機器學習API 31 [全民瘋AI系列2.0]完賽總結 完整目錄 尚未有邦友留言 立即登入留言 iT邦幫忙鐵人賽 參賽組數 1087組 團體組數 52組 累計文章數 20481篇 完賽人數 572人 鐵人賽最新文章 【Day31】新加坡工作後續的時程 重構原本的內容(golang)(Day22) Laravel-jQueryAJAX範例 2022/1/2更新 .NetCoreWebApi_筆記21_Swagger及OpenAPI介紹與配置使用方式_API管理與測試探討 .NetCoreWebApi_筆記20_api結合ADO.NET資料庫操作part8_新聞文章查詢 .NetCoreWebApi_筆記19_api結合ADO.NET資料庫操作part7_新聞文章的編輯更新與刪除 .NetCoreWebApi_筆記18_api結合ADO.NET資料庫操作part6_新聞文章表格陳列查詢 .NetCoreWebApi_筆記17_api結合ADO.NET資料庫操作part5_新聞文章新增_新聞類別元素透過API綁定方式 [Bonus系列]-使用useCallback&useMemo的正確時機是什麼? 前往鐵人賽 技術推廣專區 [Day2]抓取每日收盤價 [Day1]基本工具安裝 利用python取得永豐銀行API的Nonce [Day03]tinyML開發板介紹 永豐金融API測試員 [Day01]在享受tinyML這道美食之前 [Day3]使用ta-lib製作指標 [Day4]函數打包與買進持有報酬率試算 計算API所需要的參數:HashID 計算API所需要的參數:IV 前往鐵人賽 熱門問題 怎麼樣將系統遷移到SSD 我好像不小心把windows系統刪掉了… 伺服器HA軟體 Exchange2016&2019無法正常收信(無錯誤訊息)(已解決)(MicrosoftExchangeyear2022bug) 新手想當AI工程師請益? 想問如何讓筆電顯示出畫面 BIOS抓不到電腦有1長音2短音叫聲 共用印表機無法連線 yahoo搜尋引擎跳過php登入後的session機制,直接讀取用session保護的頁面資料 關於for迴圈取得form裡面POST的資料(更*找到錯誤了,謝謝) IT邦幫忙 站方公告 【2021iThome鐵人賽】登登登!究竟獎落誰家,2021iThome鐵人賽得獎名單正式揭曉 熱門tag 看更多 13th鐵人賽 12th鐵人賽 11th鐵人賽 鐵人賽 2019鐵人賽 2018鐵人賽 javascript 2017鐵人賽 windows php python windowsserver linux c# 程式設計 資訊安全 css vue.js sql 分享 熱門回答 怎麼樣將系統遷移到SSD 關於團隊合作 共用印表機無法連線 BIOS抓不到電腦有1長音2短音叫聲 yahoo搜尋引擎跳過php登入後的session機制,直接讀取用session保護的頁面資料 伺服器HA軟體 升級Windows11 MQTT伺服器連不上 python爬蟲書籍推薦 [已解決]急!!!csv匯入MySQLWorkbench出現錯誤訊息請問如何解決 熱門文章 2022/1/2更新 30天程式語言研究 [DAY3]SQL新手的懶人筆記 Laravel-jQueryAJAX範例 [詢問]網路分析儀 django新手村12-----黑名單 【Day31】新加坡工作後續的時程 Java學習之路08---方法 django新手村14-----添加資料 30天程式語言研究 一週點數排行 更多點數排行 海綿寶寶(antijava) Gary(mosbbs) raytracy(raytracy) 純真的人(jer5173) ㊣浩瀚星空㊣(yoching) ccenjor(ccenjor) Samuel(kuanyu) juck30808(juck30808) 居然解出來了(partyyaya) huahualiu(ffang55tw) × At 輸入對方的帳號或暱稱 Loading 找不到結果。

標記 {{result.label}} {{result.account}} 關閉



請為這篇文章評分?