降維

降維

機器學習領域中所謂的降維就是指採用某種映射方法,將原高維空間中的數據點映射到低維度的空間中。降維的本質是學習一個映射函數 f : x->y,其中x是原始數據點的表達,目前最多使用向量表達形式。 y是數據點映射後的低維向量表達,一般y的維度小於x的維度(固然提升維度也是能夠的)。算法

降維有什麼做用呢?機器學習

  1. 數據在低維下更容易處理、更容易使用;
  2. 相關特徵,特別是重要特徵更能在數據中明確的顯示出來;若是隻有兩維或者三維的話,更便於可視化展現;
  3. 去除數據噪聲
  4. 下降算法開銷
 常見的降維算法有主成分分析(principal component analysis,PCA)、LDA(線性判別分析 ),其中PCA是目前應用最爲普遍的方法。下面將會介紹這幾種方法:

PCA

PCA是不考慮樣本類別輸出的無監督降維技術。函數

總結一下PCA的算法步驟:學習

設有m條n維數據。spa

1)將原始數據按列組成n行m列矩陣X.net

2)將X的每一行(表明一個屬性字段)進行零均值化,即減去這一行的均值code

3)求出協方差矩陣component

4)求出協方差矩陣的特徵值及對應的特徵向量orm

5)將特徵向量按對應特徵值大小從上到下按行排列成矩陣,取前k行組成矩陣Pblog

6)即爲降維到k維後的數據

實例分析(以二維特徵舉例):

如今假設有一組數據以下:

主成分分析(PCA)原理詳解

      行表明了樣例,列表明特徵,這裏有10個樣例,每一個樣例兩個特徵。

第一步,分別求x和y的平均值,而後對於全部的樣例,都減去對應的均值。這裏x的均值是1.81,y的均值是1.91,獲得

主成分分析(PCA)原理詳解

     第二步,求特徵協方差矩陣,若是數據是3維,那麼協方差矩陣是

主成分分析(PCA)原理詳解

     由於這裏只有x和y,因此協方差矩陣爲

主成分分析(PCA)原理詳解

     對角線上分別是x和y的方差,非對角線上是協方差。協方差是衡量兩個變量同時變化的變化程度。協方差大於0表示x和y若一個增,另外一個也增;小於0表示一個增,一個減。若是x和y是統計獨立的,那麼兩者之間的協方差就是0;可是協方差是0,並不能說明x和y是獨立的。協方差絕對值越大,二者對彼此的影響越大,反之越小。協方差是沒有單位的量,所以,若是一樣的兩個變量所採用的量綱發生變化,它們的協方差也會產生樹枝上的變化。

第三步,求協方差的特徵值和特徵向量,獲得

主成分分析(PCA)原理詳解

      上面是兩個特徵值,下面是對應的特徵向量,這裏的特徵向量都歸一化爲單位向量。

第四步,將特徵值按照從大到小的順序排序,選擇其中最大的k個,而後將其對應的k個特徵向量分別做爲列向量組成特徵向量矩陣。

這裏特徵值只有兩個,咱們選擇其中最大的那個,這裏是1.28402771,對應的特徵向量是(-0.677873399, -0.735178656)T。

第五步,將樣本點投影到選取的特徵向量上。

    獲得的結果是

*   (-0.677873399, -0.735178656)T=    主成分分析(PCA)原理詳解

      這樣,就將原始樣例的n維特徵變成了k維,這k維就是原始特徵在k維上的投影。

代碼實現:

from sklearn.decomposition import PCA
import numpy as np
from sklearn.preprocessing import StandardScaler

x=np.array([[10001,2,55], [16020,4,11], [12008,6,33], [13131,8,22]])
x_scaler = StandardScaler()
x = X
x_scaler.fit_transform(x) pca
= PCA(n_components=2) pca.fit(x) Z=pca.transform(x)

 

 

 LDA

 LDA是一種監督學習的降維技術,也就是說它的數據集的每一個樣本是有類別輸出的。這點和PCA不一樣。LDA的思想能夠用一句話歸納,就是「投影后類內方差最小,類間方差最大」。什麼意思呢? 咱們要將數據在低維度上進行投影,投影后但願每一種類別數據的投影點儘量的接近,而不一樣類別的數據的類別中心之間的距離儘量的大。

LDA算法步驟:

1) 計算類內散度矩陣

2) 計算類間散度矩陣

3) 計算矩陣

4)計算的最大的d個特徵值和對應的d個特徵向量,獲得投影矩陣[Math Processing Error]W

5) 對樣本集中的每個樣本特徵,轉化爲新的樣本

6) 獲得輸出樣本集

部分代碼實現:

# -*- coding: utf-8 -*-
"""
Created on Fri Dec  1 10:49:37 2017
LDA_learning
@author: BruceWong
"""
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn import datasets
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
import numpy as np

def main():
    iris = datasets.load_iris() #典型分類數據模型
    #這裏咱們數據統一用pandas處理
    data = pd.DataFrame(iris.data, columns=iris.feature_names)
    data['class'] = iris.target

    #這裏只取兩類
#     data = data[data['class']!=2]
    #爲了可視化方便,這裏取兩個屬性爲例
    X = data[data.columns.drop('class')]
    Y = data['class']

    #劃分數據集
    x_train, x_test, y_train, y_test =train_test_split(X, Y)
    lda = LinearDiscriminantAnalysis(n_components=2)
    lda.fit(x_train, y_train)

    #顯示訓練結果
    print(lda.means_) #中心點
    print(lda.score(x_test, y_test)) #score是指分類的正確率
    print(lda.scalings_)#score是指分類的正確率

    x_2d = lda.transform(X) #如今已經降到二維X_2d=np.dot(X-lda.xbar_,lda.scalings_)
    #對於二維數據,咱們作個可視化
    #區域劃分
    lda.fit(x_2d,Y)
    h = 0.02
    x_min, x_max = x_2d[:, 0].min() - 1, x_2d[:, 0].max() + 1
    y_min, y_max = x_2d[:, 1].min() - 1, x_2d[:, 1].max() + 1
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
                         np.arange(y_min, y_max, h))
    Z = lda.predict(np.c_[xx.ravel(), yy.ravel()])
    Z = Z.reshape(xx.shape)
    plt.contourf(xx, yy, Z, cmap=plt.cm.Paired)

    #作出原來的散點圖
    class1_x = x_2d[Y==0,0]
    class1_y = x_2d[Y==0,1]
    l1 = plt.scatter(class1_x,class1_y,color='b',label=iris.target_names[0])
    class1_x = x_2d[Y==1,0]
    class1_y = x_2d[Y==1,1]
    l2 = plt.scatter(class1_x,class1_y,color='y',label=iris.target_names[1])
    class1_x = x_2d[Y==2,0]
    class1_y = x_2d[Y==2,1]
    l3 = plt.scatter(class1_x,class1_y,color='r',label=iris.target_names[2])

    plt.legend(handles = [l1, l2, l3], loc = 'best')

    plt.grid(True)
    plt.show()

if __name__ == '__main__':
    main()

 

 二者對比

一、相同點

(1)二者的做用是用來降維的

(2)二者都假設符合高斯分佈

二、不一樣點

(1)LDA是有監督的降維方法,PCA是無監督的。

(2)LDA降維最多降到類別數K-1的維數,PCA沒有這個限制。

(3)LDA更依賴均值,若是樣本信息更依賴方差的話,效果將沒有PCA好。

(4)LDA可能會過擬合數據。

 

參考博客:https://blog.csdn.net/Chenzhi_2016/article/details/79451201

相關文章
相關標籤/搜索