資料降維是機器學習領域中非常重要的內容。降維就是指採用某種對映方法,將原高維空間中的資料點對映到低維度的空間中。降維的本質是學習乙個對映函式 f : x->y,其中x是原始資料點的表達,目前最多使用向量表達形式。 y是資料點對映後的低維向量表達,通常y的維度小於x的維度(當然提高維度也是可以的)。f可能是顯式的或隱式的、線性的或非線性的。
目前大部分降維演算法處理向量表達的資料,也有一些降維演算法處理高階張量表達的資料。之所以使用降維後的資料表示是因為在原始的高維空間中,包含有冗餘資訊以及噪音資訊,在實際應用例如影象識別中造成了誤差,降低了準確率;而通過降維,我們希望減少 冗餘資訊 所造成的誤差,提高識別(或其他應用)的精度。又或者希望通過降維演算法來尋找資料內部的本質結構特徵。
在很多演算法中,降維演算法成為了資料預處理的一部分,如pca。事實上,有一些演算法如果沒有降維預處理,其實是很難得到很好的效果的。
主成分分析(principal component analysis)。在pca中,資料從原來的座標系轉換到了新的座標系,新座標系的選擇是由資料本身決定的。第乙個新座標軸選擇的是原始資料中方差最大的方向,第二個新座標軸的選擇和第乙個座標軸正交且具有最大方差的方向。該過程一直重複,重複的次數為原始資料中特徵的數目。我們會發現,大部分方差都包含在最前面的幾個新座標軸中。因此,可以忽略餘下的座標軸,即對資料進行了降維處理。
pca演算法步驟:
1、輸入:樣本集d,低維空間維數d。
2、輸出:投影矩陣w。
3、演算法步驟: 對原始d維資料集做標準化
構造樣本的協方差矩陣
計算協方差矩陣的特徵值和相應的特徵向量
選擇與前k個最大特徵值對應的特徵向量,其中k為新特徵空間維度(k<=d)
通過前k個特徵向量構建對映矩陣w
通過對映矩陣w將d維的輸入資料集x轉換到新的k維特徵子空間
python示例:
scikit-learn中提供了乙個pca類來實現pca模型。其原型為:
class sklearn.decomposition.pca(n_components=none, copy=true, whiten=false)
n_components:乙個整數,指定降維後的維數。如果為none,則選擇它的值為min(n_samples, n_features)。
copy:如果為false,則直接使用原始資料來訓練,結果會覆蓋原始資料所在的陣列。
載入的資料集是iris鳶尾花資料集。iris包含150個樣本,對應資料集的每行資料。每行資料報含每個樣本的四個特徵和樣本的類別資訊,所以iris資料集是乙個150行5列的二維表。
通俗地說,iris資料集是用來給花做分類的資料集,每個樣本包含了花萼長度、花萼寬度、花瓣長度、花瓣寬度四個特徵(前4列),我們需要建立乙個分類器,分類器可以通過樣本的四個特徵來判斷樣本屬於山鳶尾、變色鳶尾還是維吉尼亞鳶尾(這三個名詞都是花的品種)。
# -*- coding: utf-8 -*-
""" 降維pca
"""import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets,decomposition
def load_data():
'''載入用於降維的資料
:return: 乙個元組,依次為訓練樣本集和樣本集的標記
'''iris=datasets.load_iris()# 使用 scikit-learn 自帶的 iris 資料集
return iris.data,iris.target
def plot_pca(*data):
'''繪製經過 pca 降維到二維之後的樣本點
:param data: 可變引數。它是乙個元組,這裡要求其元素依次為:訓練樣本集、訓練樣本的標記
:return: none
'''x,y=data
pca=decomposition.pca(n_components=2) # 目標維度為2維
pca.fit(x)
x_r=pca.transform(x) # 原始資料集轉換到二維
###### 繪製二維資料 ########
fig=plt.figure()
ax=fig.add_subplot(1,1,1)
colors=((1,0,0),(0,1,0),(0,0,1),(0.5,0.5,0),(0,0.5,0.5),(0.5,0,0.5),
(0.4,0.6,0),(0.6,0.4,0),(0,0.6,0.4),(0.5,0.3,0.2),) # 顏色集合,不同標記的樣本染不同的顏色
for label ,color in zip( np.unique(y),colors):
position=y==label
ax.scatter(x_r[position,0],x_r[position,1],label="target= %d"%label,color=color)
ax.set_xlabel("x[0]")
ax.set_ylabel("y[0]")
ax.legend(loc="best")
ax.set_title("pca")
plt.show()
if __name__=='__main__':
x,y=load_data() # 產生用於降維的資料集
plot_pca(x,y) # 呼叫 plot_pca
輸出結果:
資料降維 PCA
模型原型 class sklearn.decomposition.pca n components none,copy true,whiten false 引數 copy 如果為false,則直接使用原始資料來訓練,結果會覆蓋原始資料所在的陣列 whiten 如果為true,則會將特徵向量除以n s...
PCA降維演算法
文章由兩部分構成,第一部分主要講解pca演算法的步驟,第二部分講解pca演算法的原理。那麼首先進入第一部分 pca演算法的步驟 樣本矩陣x的構成 假設待觀察變數有m個,其實相當於乙個資料在m維各維度上的座標,我們的目標是在保證比較資料之間相似性不失真的前提下,將描述資料的維度盡量減小至l維 l樣本矩...
PCA降維原理
在之前的介紹中,一幅影象只能表示乙個物件。那麼對於w x h的灰度影象,只能表示為w x h位的向量,那麼乙個有100 100的影象就需要10000維的向量空間。對於一幅人臉而言,是否所有維的資料都是有用的呢?在矩陣論當中我們知道,矩陣可以近似的表示為乙個特徵值與特徵向量的乘積。根據這個原理,如果我...