降维

降维

机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。降维的本质是学习一个映射函数 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

相关文章
相关标签/搜索