亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python實現(xiàn)PCA降維的示例詳解

 更新時間:2020年02月24日 13:07:41   作者:WANG_DDD  
今天小編就為大家分享一篇python實現(xiàn)PCA降維的示例詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

概述

本文主要介紹一種降維方法,PCA(Principal Component Analysis,主成分分析)。降維致力于解決三類問題。

1. 降維可以緩解維度災(zāi)難問題;

2. 降維可以在壓縮數(shù)據(jù)的同時讓信息損失最小化;

3. 理解幾百個維度的數(shù)據(jù)結(jié)構(gòu)很困難,兩三個維度的數(shù)據(jù)通過可視化更容易理解。

PCA簡介

在理解特征提取與處理時,涉及高維特征向量的問題往往容易陷入維度災(zāi)難。隨著數(shù)據(jù)集維度的增加,算法學習需要的樣本數(shù)量呈指數(shù)級增加。有些應(yīng)用中,遇到這樣的大數(shù)據(jù)是非常不利的,而且從大數(shù)據(jù)集中學習需要更多的內(nèi)存和處理能力。另外,隨著維度的增加,數(shù)據(jù)的稀疏性會越來越高。在高維向量空間中探索同樣的數(shù)據(jù)集比在同樣稀疏的數(shù)據(jù)集中探索更加困難。

主成分分析也稱為卡爾胡寧-勒夫變換(Karhunen-Loeve Transform),是一種用于探索高維數(shù)據(jù)結(jié)構(gòu)的技術(shù)。PCA通常用于高維數(shù)據(jù)集的探索與可視化。還可以用于數(shù)據(jù)壓縮,數(shù)據(jù)預(yù)處理等。PCA可以把可能具有相關(guān)性的高維變量合成線性無關(guān)的低維變量,稱為主成分( principal components)。新的低維數(shù)據(jù)集會盡可能的保留原始數(shù)據(jù)的變量。

PCA將數(shù)據(jù)投射到一個低維子空間實現(xiàn)降維。例如,二維數(shù)據(jù)集降維就是把點投射成一條線,數(shù)據(jù)集的每個樣本都可以用一個值表示,不需要兩個值。三維數(shù)據(jù)集可以降成二維,就是把變量映射成一個平面。一般情況下,nn維數(shù)據(jù)集可以通過映射降成kk維子空間,其中k≤nk≤n。

假如你是一本養(yǎng)花工具宣傳冊的攝影師,你正在拍攝一個水壺。水壺是三維的,但是照片是二維的,為了更全面的把水壺展示給客戶,你需要從不同角度拍幾張圖片。下圖是你從四個方向拍的照片:

第一張圖里水壺的背面可以看到,但是看不到前面。第二張圖是拍前面,可以看到壺嘴,這張圖可以提供了第一張圖缺失的信息,但是壺把看不到了。從第三張俯視圖里無法看出壺的高度。第四張圖是你真正想要的,水壺的高度,頂部,壺嘴和壺把都清晰可見。

PCA的設(shè)計理念與此類似,它可以將高維數(shù)據(jù)集映射到低維空間的同時,盡可能的保留更多變量。PCA旋轉(zhuǎn)數(shù)據(jù)集與其主成分對齊,將最多的變量保留到第一主成分中。假設(shè)我們有下圖所示的數(shù)據(jù)集:

數(shù)據(jù)集看起來像一個從原點到右上角延伸的細長扁平的橢圓。要降低整個數(shù)據(jù)集的維度,我們必須把點映射成一條線。下圖中的兩條線都是數(shù)據(jù)集可以映射的,映射到哪條線樣本變化最大?

顯然,樣本映射到黑色虛線的變化比映射到紅色點線的變化要大的多。實際上,這條黑色虛線就是第一主成分。第二主成分必須與第一主成分正交,也就是說第二主成分必須是在統(tǒng)計學上獨立的,會出現(xiàn)在與第一主成分垂直的方向,如下圖所示:

后面的每個主成分也會盡量多的保留剩下的變量,唯一的要求就是每一個主成分需要和前面的主成分正交。

現(xiàn)在假設(shè)數(shù)據(jù)集是三維的,散點圖看起來像是沿著一個軸旋轉(zhuǎn)的圓盤。

這些點可以通過旋轉(zhuǎn)和變換使圓盤完全變成二維的?,F(xiàn)在這些點看著像一個橢圓,第三維上基本沒有變量,可以被忽略。

當數(shù)據(jù)集不同維度上的方差分布不均勻的時候,PCA最有用。(如果是一個球殼形數(shù)據(jù)集,PCA不能有效的發(fā)揮作用,因為各個方向上的方差都相等;沒有丟失大量的信息維度一個都不能忽略)。

python實現(xiàn)PCA降維代碼

# coding=utf-8
from sklearn.decomposition import PCA 
from pandas.core.frame import DataFrame
import pandas as pd 
import numpy as np 
l=[]
with open('test.csv','r') as fd:
 
  line= fd.readline()
  while line:
    if line =="":
      continue
 
    line = line.strip()
    word = line.split(",")
    l.append(word)
    line= fd.readline()
 
data_l=DataFrame(l)
print (data_l)
dataMat = np.array(data_l) 
 
 
pca_sk = PCA(n_components=2) 
newMat = pca_sk.fit_transform(dataMat) 
 
 
data1 = DataFrame(newMat)
data1.to_csv('test_PCA.csv',index=False,header=False)

以上這篇python實現(xiàn)PCA降維的示例詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python 檢查數(shù)組元素是否存在類似PHP isset()方法

    Python 檢查數(shù)組元素是否存在類似PHP isset()方法

    isset方法來檢查數(shù)組元素是否存在,在Python中無對應(yīng)函數(shù),在Python中一般可以通過異常來處理數(shù)組元素不存在的情況,而無須事先檢查
    2014-10-10
  • 詳解Django中Request對象的相關(guān)用法

    詳解Django中Request對象的相關(guān)用法

    這篇文章主要介紹了詳解Django中Request對象的相關(guān)用法,Django是Python重多人氣框架中最著名的一個,需要的朋友可以參考下
    2015-07-07
  • Django打印出在數(shù)據(jù)庫中執(zhí)行的語句問題

    Django打印出在數(shù)據(jù)庫中執(zhí)行的語句問題

    這篇文章主要介紹了Django打印出在數(shù)據(jù)庫中執(zhí)行的語句,文中給大家提到了Django 查看執(zhí)行的sql語句方法,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • Python的json.loads() 方法與json.dumps()方法及使用小結(jié)

    Python的json.loads() 方法與json.dumps()方法及使用小結(jié)

    json.loads() 是一個非常有用的方法,它允許你在處理 JSON 數(shù)據(jù)時,將其轉(zhuǎn)換為 Python 數(shù)據(jù)類型,以便于在代碼中進行操作和處理,這篇文章給大家介紹Python的json.loads() 方法與json.dumps()方法及使用小結(jié),感興趣的朋友一起看看吧
    2024-03-03
  • Python字符串本身作為bytes進行解碼的問題

    Python字符串本身作為bytes進行解碼的問題

    這篇文章主要介紹了解決Python字符串本身作為bytes進行解碼的問題,文末給大家補充介紹了,Python字符串如何轉(zhuǎn)為bytes對象?Python字符串和bytes類型怎么互轉(zhuǎn),需要的朋友可以參考下
    2022-11-11
  • 讓你一文弄懂Pandas文本數(shù)據(jù)處理

    讓你一文弄懂Pandas文本數(shù)據(jù)處理

    文本數(shù)據(jù)具有數(shù)據(jù)維度高、數(shù)據(jù)量大且語義復雜等特點,是一種較為復雜的數(shù)據(jù)類型,下面這篇文章主要給大家介紹了關(guān)于Pandas文本數(shù)據(jù)處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-08-08
  • Python超詳細講解元類的使用

    Python超詳細講解元類的使用

    在Python里一切都是對象(object),基本數(shù)據(jù)類型,如數(shù)字,字符串,函數(shù)都是對象。對象可以由類(class)進行創(chuàng)建。那么既然一切都是對象,那么類是對象嗎?是的,類也是對象,那么又是誰創(chuàng)造了類呢?答案也很簡單,也是類,一個能創(chuàng)作類的類,稱之為(type)元類
    2022-06-06
  • python+requests實現(xiàn)接口測試的完整步驟

    python+requests實現(xiàn)接口測試的完整步驟

    這篇文章主要給大家介紹了關(guān)于python+requests實現(xiàn)接口測試的完整步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • python保存字符串到文件的方法

    python保存字符串到文件的方法

    這篇文章主要介紹了python保存字符串到文件的方法,實例分析了Python文件與字符串操作的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • python如何在文件中部插入信息

    python如何在文件中部插入信息

    這篇文章主要介紹了python如何在文件中部插入信息問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論