人工稚能之sklearn資料降維

2021-09-11 16:24:01 字數 2598 閱讀 7752

【人工稚能】,沒錯,就叫【人工稚能】。因為是入門系列,表示內容比較稚嫩,適合初學者,說我手抖了什麼的最討厭了。

機器學習模型擬合的輸入資料往往是多維資料,這個維度可能會非常龐大。比如統計一篇文章中的單詞頻率,就可以把文章看成單詞的向量。而單詞的數量又是非常龐大,每個單詞都是乙個維度,這樣大維度的資料在擬合時會非常耗費計算資源,也就是說出現了維度災難。

遇到維度災難,我們一般都會使用降維演算法來壓縮資料量,以減少模型訓練消耗的儲存資源和計算資源。

對於維度大的資料,維度之間往往會存在相關性,這種相關性導致資料產生了冗餘。比如兩條資訊,一條說這個人是個男的,第二條說這個人不是女的,那這兩條資訊就是相關的,就可以滅掉一條。降維的作用就是消除這種冗餘資訊。降維還可以用來剔去資訊量小的資訊,來實現資訊的壓縮。比如就可以使用降維演算法來實現壓縮。

一種比較常用的降維演算法是pca演算法【主成分分析】,它的原理是數學上的svd矩陣分解演算法。具體的公式這裡不能細說,因為我也不想嚇跑一半讀者。

打個比方說一張女人,我們如何判定這個女人是不是美女呢。我們會看比較關鍵的一些特徵,比如說臉好不好看,胸好不好看,屁股怎麼樣,腿怎麼樣,至於衣服上是某個花紋還是手臂上有乙個小痔還是,這些特徵我們都是不關心的,就可以過濾掉。我們關心的是主成分,也就是對結果貢獻係數較大的特徵。svd演算法的作用就是來告訴你哪些特徵是重要的,有多重要,哪些特徵是不重要的,是可以忽略的。

接下來我們使用sklearn提供的truncatedsvd模組來對美女進行壓縮。

首先我們使用matplotlib顯示一張美女png,png的格式非常簡單,每乙個畫素有三個維度的顏色值rgb,整個就是乙個「height x width x 3」維的矩陣。

我們先使用matplotlib顯示一下美女

# -*- coding: utf-8 -*-

import matplotlib.pyplot as plt

import matplotlib.image as img

# 讀入矩陣600*900*3

img_matrix = img.imread('beauty.png')

plt.imshow(img_matrix)

plt.show()

複製**

接下來我們進行svd轉換,先將影象rgb三個通道資料分別轉換到特徵空間,再從特徵空間還原會通道資料,然後將三個處理後的通道資料合併成影象資料顯示出來,對比和原始影象的差異。

# -*- coding: utf-8 -*-

import numpy as np

import matplotlib.pyplot as plt

import matplotlib.image as img

from sklearn.decomposition import truncatedsvd

# 載入png資料矩陣

img_array = img.imread('beauty.png')

shape = img_array.shape

# 高度、寬度、rgb通道數=3

height, width, channels = shape[0], shape[1], shape[2]

# 轉換成numpy array

img_matrix = np.array(img_array)

# 儲存rgb三個通道轉換後的資料

planes =

# rgb三個通道分別處理

for idx in range(channels):

# 提取通道

plane = img_matrix[:, :, idx]

# 轉成二維矩陣

plane = np.reshape(plane, (height, width))

# 保留10個主成分

svd = truncatedsvd(n_components=10)

# 擬合資料,進行矩陣分解,生成特徵空間,剔去無關緊要的成分

svd.fit(plane)

# 將輸入資料轉換到特徵空間

new_plane = svd.transform(plane)

# 再將特徵空間的資料轉換會資料空間

plane = svd.inverse_transform(new_plane)

# 存起來

# 合併三個通道平面資料

img_matrix = np.dstack(planes)

# 顯示處理後的影象

plt.imshow(img_matrix)

plt.show()

複製**

保留10個主成分效果圖,馬賽克有點嚴重,能看得出輪廓,只是看不清人臉了

保留50個主成分,有點像老式彩電的效果,差不多能辨識出是個美女了

保留100個主成分,基本很清晰了

那這個影象在不同的主成分數量下的壓縮比例大概是多少呢?

這個例子中影象的大小是600 x 900,壓縮後變成了兩個矩陣,乙個矩陣是600 x n_components,另乙個矩陣是n_components x 900,還有其它一些微量的變數資訊。那這個壓縮比大約是 n_components x 15 / 5400,那麼當保留50個主成分時,壓縮率約為14%。當保留100個主成分時,壓縮率約為28%。

機器學習之資料降維

資料降維 減少特徵數量 一 特徵選擇 1 特徵選擇原因 雜訊 部分特徵對 結果由影響 2 特徵選擇是什麼 filter 過濾式 方差大小 考慮所有樣本這個特徵的資料情況 sklearn.feature selection.variancethreshold variancethreshold thr...

sklearn之Knn實戰乳腺癌資料案例

from sklearn.datasets import load breast cancer from sklearn.neighbors import kneighborsclassifier from sklearn.model selection import train test spli...

sklearn資料集之「糖尿病病人體檢資料集」

樣本資料個數 442特徵個數 資料維度 10各特徵含義 年齡,性別,bmi指數,平均血壓,s1,s2,s3,s4,s5,s6 特徵取值範圍 0.2,0.2 標籤含義 基於病情進展一年後的定量測量 標籤取值範圍 25,346 from sklearn import datasets 載入資料集 dia...