最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python機(jī)器學(xué)習(xí)之PCA降維算法詳解

 更新時(shí)間:2021年05月19日 16:30:52   作者:ProChick  
今天帶大家復(fù)習(xí)python機(jī)器學(xué)習(xí)的知識(shí)點(diǎn),文中對(duì)PCA降維算法介紹的非常詳細(xì),對(duì)正在學(xué)習(xí)python機(jī)器學(xué)習(xí)的小伙伴們有很好地幫助,需要的朋友可以參考下

一、算法概述

  • 主成分分析 (Principal ComponentAnalysis,PCA)是一種掌握事物主要矛盾的統(tǒng)計(jì)分析方法,它可以從多元事物中解析出主要影響因素,揭示事物的本質(zhì),簡(jiǎn)化復(fù)雜的問題。
  • PCA 是最常用的一種降維方法,它的目標(biāo)是通過某種線性投影,將高維的數(shù)據(jù)映射到低維的空間中,并期望在所投影的維度上數(shù)據(jù)的方差最大,以此使用較少的維度,同時(shí)保留較多原數(shù)據(jù)的維度。
  • PCA 算法目標(biāo)是求出樣本數(shù)據(jù)協(xié)方差矩陣的特征值和特征向量,而協(xié)方差矩陣的特征向量的方向就是PCA需要投影的方向。使樣本數(shù)據(jù)向低維投影后,能盡可能表征原始的數(shù)據(jù)。
  • PCA 可以把具有相關(guān)性的高維變量合成為線性無關(guān)的低維變量,稱為主成分。主成分能夠盡可能的保留原始數(shù)據(jù)的信息。
  • PCA 通常用于高維數(shù)據(jù)集的探索與可視化,還可以用作數(shù)據(jù)壓縮和預(yù)處理等。

二、算法步驟

在這里插入圖片描述

1.將原始數(shù)據(jù)按行組成m行n列的矩陣X

2.將X的每一列(代表一個(gè)屬性字段)進(jìn)行零均值化,即減去這一列的均值

3.求出協(xié)方差矩陣

4.求出協(xié)方差矩陣的特征值及對(duì)應(yīng)的特征向量r

5.將特征向量按對(duì)應(yīng)特征值大小從左到右按列排列成矩陣,取前k列組成矩陣P

6.計(jì)算降維到k維的數(shù)據(jù)

三、相關(guān)概念

  • 方差:描述一個(gè)數(shù)據(jù)的離散程度

在這里插入圖片描述

  • 協(xié)方差:描述兩個(gè)數(shù)據(jù)的相關(guān)性,接近1就是正相關(guān),接近-1就是負(fù)相關(guān),接近0就是不相關(guān)

在這里插入圖片描述

  • 協(xié)方差矩陣:協(xié)方差矩陣是一個(gè)對(duì)稱的矩陣,而且對(duì)角線是各個(gè)維度的方差

在這里插入圖片描述

  • 特征值:用于選取降維的K個(gè)特征值
  • 特征向量:用于選取降維的K個(gè)特征向量

四、算法優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  • 僅僅需要以方差衡量信息量,不受數(shù)據(jù)集以外的因素影響。
  • 各主成分之間正交,可消除原始數(shù)據(jù)成分間的相互影響的因素。
  • 計(jì)算方法簡(jiǎn)單,主要運(yùn)算是特征值分解,易于實(shí)現(xiàn)。

缺點(diǎn)

  • 主成分各個(gè)特征維度的含義具有一定的模糊性,不如原始樣本特征的解釋性強(qiáng)。
  • 方差小的非主成分也可能含有對(duì)樣本差異的重要信息,降維丟棄的數(shù)據(jù)可能對(duì)后續(xù)數(shù)據(jù)處理有影響。

五、算法實(shí)現(xiàn)

自定義實(shí)現(xiàn)

import numpy as np


# 對(duì)初始數(shù)據(jù)進(jìn)行零均值化處理
def zeroMean(dataMat):
    # 求列均值
    meanVal = np.mean(dataMat, axis=0)
    # 求列差值
    newData = dataMat - meanVal
    return newData, meanVal


# 對(duì)初始數(shù)據(jù)進(jìn)行降維處理
def pca(dataMat, percent=0.19):
    newData, meanVal = zeroMean(dataMat)

    # 求協(xié)方差矩陣
    covMat = np.cov(newData, rowvar=0)

    # 求特征值和特征向量
    eigVals, eigVects = np.linalg.eig(np.mat(covMat))

    # 抽取前n個(gè)特征向量
    n = percentage2n(eigVals, percent)
    print("數(shù)據(jù)降低到:" + str(n) + '維')

    # 將特征值按從小到大排序
    eigValIndice = np.argsort(eigVals)
    # 取最大的n個(gè)特征值的下標(biāo)
    n_eigValIndice = eigValIndice[-1:-(n + 1):-1]
    # 取最大的n個(gè)特征值的特征向量
    n_eigVect = eigVects[:, n_eigValIndice]

    # 取得降低到n維的數(shù)據(jù)
    lowDataMat = newData * n_eigVect
    reconMat = (lowDataMat * n_eigVect.T) + meanVal

    return reconMat, lowDataMat, n


# 通過方差百分比確定抽取的特征向量的個(gè)數(shù)
def percentage2n(eigVals, percentage):
    # 按降序排序
    sortArray = np.sort(eigVals)[-1::-1]
    # 求和
    arraySum = sum(sortArray)

    tempSum = 0
    num = 0
    for i in sortArray:
        tempSum += i
        num += 1
        if tempSum >= arraySum * percentage:
            return num


if __name__ == '__main__':
    # 初始化原始數(shù)據(jù)(行代表樣本,列代表維度)
    data = np.random.randint(1, 20, size=(6, 8))
    print(data)

    # 對(duì)數(shù)據(jù)降維處理
    fin = pca(data, 0.9)
    mat = fin[1]
    print(mat)

利用Sklearn庫實(shí)現(xiàn)

import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris

# 加載數(shù)據(jù)
data = load_iris()
x = data.data
y = data.target

# 設(shè)置數(shù)據(jù)集要降低的維度
pca = PCA(n_components=2)
# 進(jìn)行數(shù)據(jù)降維
reduced_x = pca.fit_transform(x)

red_x, red_y = [], []
green_x, green_y = [], []
blue_x, blue_y = [], []

# 對(duì)數(shù)據(jù)集進(jìn)行分類
for i in range(len(reduced_x)):
    if y[i] == 0:
        red_x.append(reduced_x[i][0])
        red_y.append(reduced_x[i][1])
    elif y[i] == 1:
        green_x.append(reduced_x[i][0])
        green_y.append(reduced_x[i][1])
    else:
        blue_x.append(reduced_x[i][0])
        blue_y.append(reduced_x[i][1])

plt.scatter(red_x, red_y, c='r', marker='x')
plt.scatter(green_x, green_y, c='g', marker='D')
plt.scatter(blue_x, blue_y, c='b', marker='.')
plt.show()

六、算法優(yōu)化

PCA是一種線性特征提取算法,通過計(jì)算將一組特征按重要性從小到大重新排列得到一組互不相關(guān)的新特征,但該算法在構(gòu)造子集的過程中采用等權(quán)重的方式,忽略了不同屬性對(duì)分類的貢獻(xiàn)是不同的。

  • KPCA算法

KPCA是一種改進(jìn)的PCA非線性降維算法,它利用核函數(shù)的思想,把樣本數(shù)據(jù)進(jìn)行非線性變換,然后在變換空間進(jìn)行PCA,這樣就實(shí)現(xiàn)了非線性PCA。

  • 局部PCA算法

局部PCA是一種改進(jìn)的PCA局部降維算法,它在尋找主成分時(shí)加入一項(xiàng)具有局部光滑性的正則項(xiàng),從而使主成分保留更多的局部性信息。

到此這篇關(guān)于Python機(jī)器學(xué)習(xí)之PCA降維算法詳解的文章就介紹到這了,更多相關(guān)Python PCA降維算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • pandas中刪除列的幾種方法

    pandas中刪除列的幾種方法

    在pandas中有多種方法可以刪除列,本文主要介紹了pandas中刪除列的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • python怎么自定義捕獲錯(cuò)誤

    python怎么自定義捕獲錯(cuò)誤

    在本篇文章里小編給大家分享了關(guān)于python自定義捕獲錯(cuò)誤的方法,需要的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • 使用pytorch實(shí)現(xiàn)可視化中間層的結(jié)果

    使用pytorch實(shí)現(xiàn)可視化中間層的結(jié)果

    今天小編就為大家分享一篇使用pytorch實(shí)現(xiàn)可視化中間層的結(jié)果,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python中多線程及程序鎖淺析

    Python中多線程及程序鎖淺析

    這篇文章主要介紹了Python中多線程及程序鎖淺析,本文用一個(gè)實(shí)例講解Python的多線程和程序鎖,需要的朋友可以參考下
    2015-01-01
  • 利用Python和C++實(shí)現(xiàn)解析gltf文件

    利用Python和C++實(shí)現(xiàn)解析gltf文件

    gltf是類似于stl、obj、ply等常見的3D對(duì)象存儲(chǔ)格式,它被設(shè)計(jì)出來是為了便于渲染的數(shù)據(jù)轉(zhuǎn)換和傳輸,本文為大家介紹了使用Python和C++解析gltf文件的方法,感興趣的可以了解下
    2023-09-09
  • Python對(duì)list列表結(jié)構(gòu)中的值進(jìn)行去重的方法總結(jié)

    Python對(duì)list列表結(jié)構(gòu)中的值進(jìn)行去重的方法總結(jié)

    這篇文章主要介紹了Python對(duì)列表list中的值進(jìn)行去重的方法總結(jié),文中給出的方法都能保持去重后的順序不發(fā)生改變,需要的朋友可以參考下
    2016-05-05
  • python 爬取京東指定商品評(píng)論并進(jìn)行情感分析

    python 爬取京東指定商品評(píng)論并進(jìn)行情感分析

    本文主要講述了利用Python網(wǎng)絡(luò)爬蟲對(duì)指定京東商城中指定商品下的用戶評(píng)論進(jìn)行爬取,對(duì)數(shù)據(jù)預(yù)處理操作后進(jìn)行文本情感分析,感興趣的朋友可以了解下
    2021-05-05
  • 如何在C++中調(diào)用Python

    如何在C++中調(diào)用Python

    雖然現(xiàn)在Python編程語言十分的火爆,但是實(shí)際上非要用一門語言去完成所有的任務(wù),并不是說不可以,而是不合適。在一些特定的、對(duì)于性能要求比較高的場(chǎng)景,還是需要用到傳統(tǒng)的C++來進(jìn)行編程的。本文將用C++的代碼去調(diào)用Python函數(shù)中實(shí)現(xiàn)的一些功能
    2021-05-05
  • Django Rest framework之權(quán)限的實(shí)現(xiàn)示例

    Django Rest framework之權(quán)限的實(shí)現(xiàn)示例

    這篇文章主要介紹了Django Rest framework之權(quán)限的實(shí)現(xiàn)示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • 基于Python實(shí)現(xiàn)條形碼圖片識(shí)別程序

    基于Python實(shí)現(xiàn)條形碼圖片識(shí)別程序

    這篇文章主要為大家詳細(xì)介紹了如何基于Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的條形碼圖片識(shí)別程序,可以視頻圖片中的條形碼,感興趣的小伙伴可以跟隨小編學(xué)習(xí)一下
    2023-09-09

最新評(píng)論

拉萨市| 蚌埠市| 岐山县| 丁青县| 民勤县| 溧阳市| 乐都县| 区。| 吉林省| 巴林右旗| 泰顺县| 福州市| 宿松县| 牙克石市| 浪卡子县| 资阳市| 陵川县| 新河县| 镇安县| 龙口市| 凯里市| 中牟县| 柏乡县| 邮箱| 清徐县| 榆树市| 溆浦县| 浮山县| 永兴县| 饶河县| 嘉义县| 绥棱县| 平远县| 黔西县| 凌海市| 栾城县| 怀柔区| 玛曲县| 东明县| 苍山县| 阿鲁科尔沁旗|