精华内容
下载资源
问答
  • *降维的意义:克服维数灾难,获取本质特征,节省存储空间,去除无用噪声,实现数据可视化 强烈推荐几篇博客: https://www.douban.com/note/469279998/ http://bindog.github.io/blog/2016/06/04/f

    1.为什么要降维
    *维数灾难:在给定精度下,准确地对某些变量的函数进行估计,所需样本量会随着样本维数的增加而呈指数形式增长。
    *降维的意义:克服维数灾难,获取本质特征,节省存储空间,去除无用噪声,实现数据可视化
    2.强烈推荐几篇博客:
    https://www.douban.com/note/469279998/
    http://bindog.github.io/blog/2016/06/04/from-sne-to-tsne-to-largevis
    http://blog.sina.com.cn/s/blog_594168770102wbsn.html
    http://blog.csdn.net/brunowuestelle/article/details/46698241
    http://blog.sina.com.cn/s/blog_b623d3f40102v2zg.html

    我降维的目的很单纯,就是为了可视化,因为高维数据无法展示。
    代码我就不贴了,自己百度去吧(可以先看看我推荐的这几篇博客),哈哈。不过我可以提醒一下,t-SNE降维效果比PCA好太多了,应该是目前降维效果最好的算法了。

    3d作图包:rgl

    最后贴几张聚类效果图
    这里写图片描述
    这里写图片描述
    这里写图片描述

    展开全文
  • 维度降低有两个主要用例:数据探索和机器学习。它对于数据探索很有用,因为维数减少到几个维度(例如2或3维)允许可视化样本。然后可以使用这种可视化来从数据获得见解(例如,检测聚类并识别异常值)。对于机器学习...

    维度降低有两个主要用例:数据探索和机器学习。它对于数据探索很有用,因为维数减少到几个维度(例如2或3维)允许可视化样本。然后可以使用这种可视化来从数据获得见解(例如,检测聚类并识别异常值)。对于机器学习,降维是有用的,因为在拟合过程中使用较少的特征时,模型通常会更好地概括。

    在这篇文章中,我们将研究三维降维技术:

    • 主成分分析(PCA):最流行的降维方法
    • 内核PCA:PCA的一种变体,允许非线性
    • t-SNE t分布随机邻域嵌入:最近开发的非线性降维技术

    这些方法之间的关键区别在于PCA输出旋转矩阵,可以应用于任何其他矩阵以转换数据。另一方面,诸如t分布随机邻居嵌入(t-SNE)的基于邻域的技术不能用于此目的。

    加载威士忌数据集

      我们可以通过以下方式加载数据集:

     
    df <- read.csv(textConnection(f), header=T)
    # select characterics of the whiskeys
    features <- c("Body", "Sweetness", "Smoky",
                "Medicinal", "Tobacco", "Honey",
                "Spicy", "Winey", "Nutty",
                "Malty", "Fruity", "Floral")
    feat.df <- df[, c("Distillery", features)]

    关于结果的假设

    在我们开始减少数据的维度之前,我们应该考虑数据。我们期望具有相似味道特征的威士忌在缩小的空间中彼此接近。

    由于来自邻近酿酒厂的威士忌使用类似的蒸馏技术和资源,他们的威士忌也有相似之处。
    为了验证这一假设,我们将测试来自不同地区的酿酒厂之间威士忌特征的平均表达是否不同。为此,我们将进行MANOVA测试:

    ##           Df Pillai approx F num Df den Df    Pr(>F)    
    ## Region     5 1.2582   2.0455     60    365 3.352e-05 ***
    ## Residuals 80                                            
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

    检验统计量在5%水平上是显着的,因此我们可以拒绝零假设(区域对特征没有影响)。这意味着适当的降维应该在一定程度上保持酿酒厂的地理位置。

    酿酒厂的地理位置

    由于区域性对威士忌起着重要作用,我们将通过绘制其纬度和经度来探索数据集中的酿酒厂所在的位置。以下苏格兰威士忌地区存在:

    苏格兰地区(根据CC BY-SA 3.0许可,并从https://commons.wikimedia.org/wiki/File:Scotch_regions.svg检索)

    苏格兰地区 

     

     

     

    PCA

    使用PCA可视化威士忌数据集

    PCA通常使用该prcomp功能执行。在这里,我们使用,autoplot因为我们主要对可视化感兴趣。

     

    在第二个图中,我们将绘制酿酒厂的标签,以便我们可以更详细地解释聚类。

    总的来说,主要成分似乎反映了以下特征:

    • PC1表示味道强度即烟熏味,药用味(如Laphroaig或Lagavulin)与平滑味道(如Auchentoshan或Aberlour)
    • PC2表示味道复杂性即均衡的味道特征(例如Glenfiddich或Auchentoshan)与更具特色的味道特征(例如Glendronach或Macallan)

    让我们验证群集是否实际上过多地代表了某些区域:

    ##   Cluster Campbeltown Highlands Islands Islay Lowlands Speyside
    ## 1       1           2        17       2     2        0       19
    ## 2       2           0         8       2     1        3       22
    ## 3       3           0         2       2     4        0        0

    实际上,每个集群都展示了一个过多的区域。对集群的合理解释如下:

    • 群集1: 复合威士忌,主要来自Highlands / Speyside
    • 群集2: 均衡的威士忌,主要来自斯佩塞德和高地
    • 群集3: 烟熏威士忌,主要来自艾莱岛

    可视化有两个有趣的观察结果:

    • Oban和Clynelish是唯一一个产生类似于艾莱岛酿酒厂口味的高地酿酒厂。
    • Highland和Speyside威士忌主要在一个方面不同。在一个极端是平滑,均衡的威士忌,如Glenfiddich。在另一个极端,威士忌是具有更有特色的味道,如麦卡伦。

    这包含了我们对PCA的可视化研究。我们将在本文末尾研究使用PCA进行预测。

    核PCA

    内核PCA(KPCA)是PCA的扩展,它利用了内核函数,这些函数在支持向量机上是众所周知的。通过将数据映射到再现内核Hilbert空间,即使它们不是线性可分的,也可以分离数据。

     

    在R中使用KPCA

    要执行KPCA,我们使用包中的kpca函数kernlab

     

    其中σσ是反向内核宽度。使用此内核,可以按如下方式减少维数:

    检索到新维度后,我们现在可以在转换后的空间中可视化数据:

    就可视化而言,结果比我们使用常规PCR获得的结果稍微粗糙一些。尽管如此,来自艾莱岛的威士忌分离得很好,我们可以看到一群斯佩塞特威士忌,而高地威士忌则高度传播。

    KPCA的一个缺点是你需要处理内核函数的超参数:这些需要调整到数据。此外,KPCA不像PCA那样可解释,因为无法确定各个维度解释了多少方差。

    T-SNE

    t-SNE于2008年推出。从那时起,它已成为一种非常流行的数据可视化方法。t-SNE执行两个算法步骤。首先,构建对样本对的概率分布PP该分布将高选择概率分配给相似对,将低概率分配给不相似对。

     

    在t-SNE中,困惑平衡了数据的局部和全局方面。它可以解释为与每个点关联的近邻的数量。建议的困惑范围是5到50.由于t-SNE是概率性的并且还具有困惑度参数,因此它是一种非常灵活的方法。 请注意,t-SNE不适用于监督学习等设置,因为生成的维度缺乏可解释性。

    使用t-SNE可视化数据

    使用R,t-SNE可以通过Rtsne从包中加载具有相同名称的函数来执行。在这里,我们将威士忌数据集的维度降低到两个维度:

    用t-SNE获得的维数降低的结果令人印象深刻。与PCA相比,簇的分离更加清晰,特别是对于簇1和簇2。

    然而,解释对于t-SNE来说有点单调乏味。使用PCA,我们利用负载来获得有关主要组件的见解。对于t-SNE尺寸,我们必须手动进行解释:

    • V1表示味道复杂性。这里的异常值是右侧的烟熏艾莱威士忌(例如Lagavulin)和左侧复杂的高地威士忌(例如麦卡伦)。
    • V2表示烟熏/药用味道。同样,来自艾莱岛的威士忌是烟熏极端,而一些高地/斯佩塞德威士忌(如Tullibardine或Old Fettercairne)是另一个极端。

    使用PCA进行监督学习

    对于培训和测试数据集,PCA是独立完成的,这一点至关重要。为什么?如果对整个数据集执行PCA,则通过PCA获得的正交投影将受到测试数据的影响。因此,当在测试数据上测试模型的性能时,模型的性能将被高估,因为投影被调谐到测试样本所在的空间。因此,需要遵循以下方法:

    1. 在测试数据集上执行PCA并在转换后的数据上训练模型。
    2. 将训练数据中的学习PCA变换应用于测试数据集,并评估模型在变换数据上的性能。

    为了举例说明工作流程,让我们根据其口味特征预测威士忌的起源区域。为此,我们将使用ķk最近邻模型,因为我们拥有的少数特征(p = 12)将通过PCA进一步减少。此外,因为所有的变量是在特征空间小[0,4][0,4]。由于我们必须优化kk,因此我们还预留了用于确定此参数的验证集。

    PCA转换

    首先,我们编写一些函数来验证预测的性能。我们将简单地使用此处的准确度,尽管另一个性能指标可能更合适,因为很少有样本可用的区域可能会更频繁地混淆。此外,我们将50%的观察值分配给训练集,25%分配给验证集(用于调整kk),25%分配给测试集(用于报告性能)。

    get.accuracy <- <strong>function</strong>(preds, labels) {
        correct.idx <- which(preds == labels)
        accuracy <- length(correct.idx) / length(labels)
        <strong>return</strong>(accuracy)
    }
    select.k <- <strong>function</strong>(K, training.data, test.data, labels, test.labels) {
        <span style="color:#888888"># report best performing value of k</span>
        performance <- vector(<span style="color:#880000">"list"</span>, length(K))
        <strong>for</strong> (i <strong>in</strong> seq_along(K)) {
            k <- K[i]
            preds <- knn(train = training.data, test = test.data, 
                         cl = labels, k = k)
            validation.df <- cbind(<span style="color:#880000">"Pred"</span> = as.character(preds), <span style="color:#880000">"Ref"</span> = as.character(test.labels))
            <span style="color:#888888">#print(k)</span>
            <span style="color:#888888">#print(validation.df)</span>
            accuracy <- get.accuracy(preds, test.labels)
            performance[[i]] <- accuracy
        }
        <span style="color:#888888"># select best performing k</span>
        k.sel <- K[which.max(performance)]
        <strong>return</strong>(k.sel)
    }
    set.seed(<span style="color:#880000">1234</span>) <span style="color:#888888"># reproducibility</span>
    samp.train <- sample(nrow(data), nrow(data)*<span style="color:#880000">0.50</span>) <span style="color:#888888"># 50 % for training</span>
    df.train <- data[samp.train,,]
    <span style="color:#888888"># 25% for validation</span>
    samp.test <- sample(setdiff(seq(nrow(data)), samp.train), length(setdiff(seq(nrow(data)), samp.train)) * <span style="color:#880000">0.5</span>)
    df.test <- data[samp.test,]
    samp.val <- setdiff(seq_len(nrow(data)), c(samp.train, samp.test))
    df.val <- data[samp.val, ]</code></span></span>

    在下面的代码中,我们将对训练数据执行PCA并研究解释的方差以选择合适的维数

    ##         [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
    ## N_dim      1    2    3    4    5    6    7    8    9    10    11    12
    ## Cum_Var   22   41   52   63   72   79   85   90   94    97    99   100

    由于有足够百分比的方差用3维解释,我们将使用该值来设置训练,测试和验证数据集。这里,我们使用该predict.princomp函数将从训练数据获得的旋转矩阵应用到其他数据集。请注意,此函数的名称具有误导性,因为它并不能真正预测任何内容。

    现在我们已经将训练,验证和测试集转换为PCA空间,我们可以使用kk最近邻居。请注意,这种预测方案具有挑战性,因为岛屿和低地等一些地区的代表性不足。如果我们将选择kk具有非常大的值(例如K = 30),则最样本将被分配到过多的区域。由于我们使用精度作为性能度量,因此这样的分类器实际上可能表现良好。因此,我们保守地限制kk的范围以避免选择这样的模型。

    ## [1] "PCA+KNN accuracy for k = 9 is: 0.571"

    让我们研究一下使用PCA的模型是否优于基于原始数据的模型:

    ## [1] "KNN accuracy for k = 7 is: 0.524"

    kkTobaccoMalty

    <span style="color:#000000"><span style="color:#000000"><code><span style="color:#888888"># variances of whiskeys characteristics</span>
    print(diag(var(data)))</code></span></span>
    ##      Body Sweetness     Smoky Medicinal   Tobacco     Honey     Spicy 
    ## 0.8656635 0.5145007 0.7458276 0.9801642 0.1039672 0.7279070 0.6157319 
    ##     Winey     Nutty     Malty    Fruity    Floral 
    ## 0.8700410 0.6752394 0.3957592 0.6075239 0.7310534

    现在我们只能根据他们的口味确定苏格兰威士忌的六个区域,但问题是我们是否仍能获得更好的表现。我们知道很难预测数据集中代表性不足的苏格兰地区。那么,如果我们将自己局限于更少的地区,会发生什么?PCA分析表明我们可以通过以下方式重新组合标签:

    • 岛威士忌与艾莱岛威士忌组合在一起
    • Lowland / Campbeltown威士忌与Highland威士忌组合在一起

    通过这种方式,问题减少到三个区域:Island / Islay威士忌,Highland / Lowland / Campbeltown威士忌和Speyside威士忌。让我们再次进行分析:

    ## [1] "PCA+KNN accuracy for k = 13 is: 0.619"

    我们可以得出61.9%的准确度,我们可以得出结论,将我们样品较少的威士忌区域分组确实是值得的。

    KPCA用于监督学习

    应用KPCA进行预测并不像应用PCA那样简单。在PCA中,特征向量是在输入空间中计算的,但在KPCA中,特征向量来自核心希尔伯特空间。因此,当我们不知道所使用的显式映射函数ϕϕ,不可能简单地转换新数据点。

    很容易就是根据转换后的数据创建模型。但是,这种方法对验证没有帮助,因为这意味着我们将测试集包含在PCA中。因此,以下方法中的方法不应用于验证模型

    <span style="color:#000000"><span style="color:#000000"><code><strong>library</strong>(class) <span style="color:#888888"># for knn</span>
    Z <- pca.k@rotated[,<span style="color:#880000">1</span>:(n.dim.model)] <span style="color:#888888"># the transformed input matrix</span>
    preds.kpca <- knn(train = Z[samp.train,], test = Z[samp.test,], 
                         cl = df$Region[samp.train], k = k.sel.pca)
    <span style="color:#888888"># NB: this would overestimate the actual performance</span>
    accuracy <- get.accuracy(preds.kpca, df$Region[samp.test])</code></span></span>

    除了这个属性,KPCA可能并不总是减少功能的数量。这是因为内核函数实际上导致参数数量的增加。因此,在某些情况下,可能无法找到尺寸小于最初的投影。

    摘要

    在这里,我们看到了如何使用PCA,KPCA和t-SNE来降低数据集的维数。PCA是一种适用于可视化和监督学习的线性方法。KPCA是一种非线性降维技术。t-SNE是一种更新的非线性方法,擅长可视化数据,但缺乏PCA的可解释性和稳健性。

     

    我觉得有趣的是威士忌的二维投影包含大的开放区域。这可能表明以下两点之一:

    1. 尝试新的,令人兴奋的威士忌仍有很大的潜力。
    2. 有很多种味道的组合是可能的,并且很好地结合在一起。

    我倾向于选择第二种选择。为什么?在PCA图中,右下角是没有样本所在的最大区域。看着靠近这个区域的威士忌,我们发现那些是y轴上的Macallan和x轴上的Lagavulin。麦卡伦以其复杂的口味而闻名,Lagavulin以其烟熏味而闻名。

    位于二维PCA空间右下方的威士忌将同时具有两种特性:它既复杂又烟熏。我猜这种具有两种特性的威士忌对于口感来说太过分了(即烟熏掩盖了复杂性)。

    这个未开发的味道区域可以被认为是威士忌暮光区域。关于暮光区,有两个问题。首先,是否可以生产威士忌来填补空白,其次,可能更重要的是,这些威士忌的味道如何?

    威士忌暮光之城

     

    非常感谢您阅读本文,有任何问题请留言给我们!

     

    展开全文
  • 高维数据特征降维技术学习

    万次阅读 2017-04-14 16:46:03
    原文地址:高维数据特征降维技术学习作者:新技术笔记 特征降维(feature dimension reduction)是一个从初始高维特征集合中选出低维特征集合,以便根据一定的评估准则最优化缩小特征空间的过程,通常是机器学习的...
      特征降维(feature dimension reduction)是一个从初始高维特征集合中选出低维特征集合,以便根据一定的评估准则最优化缩小特征空间的过程,通常是机器学习的预处理步骤。当面临高维数据时,特征降维对于机器学习任务非常必要,通过降维有效地消除无关和冗余特征,提高挖掘任务的效率,改善预测精确性等学习性能,增强学习结果的易理解性。

    1、降维概述
      通常,高维特征集合存在以下几方面问题:
      •大量的特征;
      •许多与给定任务无关的特征,即存在许多与类别仅有微弱相关度的特征;
      •许多对于给定任务冗余的特征,如特征相互之间存在强烈的相关度;
      •噪声数据。
      特征降维,可以分为特征抽取和特征选择两种方式。特征抽取涉及到语义上的分析,而目前自然语言语义处理技术尚不发达,用特征抽取方法进行特征降维的效果并不显著。相比之下,特征选择选出的特征集合是原始特征集的子集,所以更易实现,方法也更加多样,典型的有DF、IG、MI、CHI。

    (1)特征抽取
      特征抽取也被称为特征重参数化(feature reparameterization)。由于自然语言中存在大量的多义词、同义词现象,特征集无法生成一个最优的特征空间对数据内容进行描述。特征抽取通过对原始特征空间进行变换,重新生成一个维数更小、各维之间更加独立的特征空间。特征抽取方法主要有如下几种:
    [转载]高维数据特征降维技术学习

    (2)特征选择
      特征选择是从特征集T={t1, … ,ts}中选择一个真子集T’={t1’, … ,ts’},满足(s’<<s)。其中:s为原始特征集的大小;s’是选择后的特征集大小。特征选择不改变原始特征空间的性质,只是从原始特征空间中选择一部分重要的特征,组成一个新的低维空间。

    (3)特征降维策略
      从策略上可以将特征降维划分为局部降维和全局降维。局部降维是指对每个类别选择若干个最能识别它的特征作为新特征,有所有这些新特征构成新的特征空间,从而达到对原始特征空间的降维。全局降维是指选择对整个分类最有用的若干个特征构成新的特征空间,从而达到对原特征空间的降维。对于不同的降维方法,可采用的降维策略可能不同,但是通过特殊处理(如带权均值、最大值)后,特征对特定类地重要性也可以转换成特征对整个分类的重要性。

    2、降维模型
      现有的特征降维模型大致分为过滤模型、包裹模型及其他改进模型。

    (1)过滤模型
      过滤模型(filter model)的基本思想是:根据训练数据的一般特性进行特征选择,在特征选择的过程中并不包含任何学习算法。早期的过滤算法依赖于标记数据,通过分析标记数据来决定哪些特征在区分分类标签时最有用,因此传统过滤模型只适用于有指导的学习。随着应用领域的扩展,在很多数据挖掘应用中无法获得类标签,因此将传统过滤模型集合聚类思想,如层次聚类、分割聚类、光谱聚类、矩阵分解算法,可以产生许多新的适合无指导学习的过滤模型。基于过滤模型的算法主要有两类:特征权重和子集搜索。这两类算法的不同之处在于是对单个特征进行评价还是对整个特征子集进行评价。
      特征权重算法对每个特征指定一个权值,并按照它与目标概念的相关度对其进行排序,如果一个特征的相关度权值大于某个阈值,则认为该特征优秀,并且选择该特征。该算法缺点在于:他们可以捕获特征与目标概念间的相关性,却不能发现特征间的冗余性。而经验证明除了无关特征对学习任务的影响,冗余特征同样影响学习算法的速度和准确性,也应尽可能消除冗余特征。Relief算法是一个比较著名的特征权重类方法。
    子集搜索算法通过在一定的度量标准指导下遍历候选特征子集,对每个子集进行优劣评价,当搜索停止时即可选出最优(或近似最优)的特征子集。现有子集搜索算法的时间复杂度至少为维度的平方,所以在处理高维数据时不具有强可量测性。
      考虑到各种过滤方法的优劣,可以使用多层过滤模型分别消除无关特征和冗余特征。

    (2)包裹模型
      包裹模型(wrapper model)最初思想为依据一个有指导的归纳算法,搜索最佳特征子集;对于每一个新的特征子集,包裹模型都需要学习一个假设(或一个分类器、包裹器),即需要元学习者遍历特征集合空间,并利用该学习算法的性能来评价和决定选择哪些特征。目前研究中包裹模型的搜索过程主要依据一个聚类算法。包裹模型包含聚类过程反馈,将聚类执行效果量化为性能指数,通过最大化该性能指数更好地找出哪些更适合预定学习算法的特征,具有较高的学习性能。

    (3)混合模型
      过滤模型和包裹模型的发展都经历了一个由有指导学习向无指导学习转变的过程,因此现代过滤模型与包裹模型的根本区别在于对学习算法的使用方式。过滤模型首先利用数据的内在特性(如词频、词性)而不是聚类算法对原始特征集进行初步选择;最后将选出的特征子集用于聚类。反之,包裹模型将聚类算法与特征搜索、选择过程相结合,将无指导的学习算法应用于每个候选特征子集,利用聚类结果对特征子集进行评价,最终形成优化特征子集。
      混合模型着眼于使用一种特殊的算法将过滤模型与包裹模型相结合以获得尽可能好的性能,并且使得时间复杂度与过滤算法相近。

    3、特征评价标准
      如何评价待选特征与降维目标的相关度是特征降维的关键问题之一。从评测对象上可以分为单边度量与双边度量两种。单边度量只考虑正特征,即最能标示其成员资格的特征,而忽略负特征即最能标示其非成员资格的特征,如相关性系数CC和几率评测OR。双边度量将正负特征结合考虑,如信息增益IG和卡方检测CHI(Chi-square)。事实上,因为负特征在数据中的出现,较大程度地说明了该数据的无关性,所以负特征有助于确定消除无关数据,在不平衡的数据集合中对负特征的分析显得更为重要。
      在特征子集的优化选择过程中,使用不同的特征评价准则可能会得出不同的结果。常用的评价度量方法分为一致性度量和相关性度量两个大类。
      特征评价标准本身并不受特征子集选取策略的影响,即所有度量方法可以用于有指导的特征选取,也适用于无指导的特征选取。其区别在于:有指导的选择过程度量特征子集在分类中的能力;无指导的选择过程度量特征子集在聚类中的能力。

    (1)一致性度量
    一致性度量致力于找出能够与完整特征集分类效果一致的最小特征子集,也可以将一致性用相对的不一致性来解释。如果得到的不一致性为0,则认为一致性为100%。

    (2)相关性度量
      相关度也被称为规范化相关性、相关系数、皮尔森关联、余弦相似度,被广泛用于描述模式分类和信号处理问题中两个向量之间的相似性。相关性度量基于以下思想:如果一个特征与某个类的关联性高到(或可预言到)使该特征与此类相关,同时此特征与其他相关特征的关联性不能达到任何相关特征都可以预言该特征的水平,则认为这个特征是对该分类任务的优秀特征。可以将国际上常用的相关度度量分为传统的线性相关性度量和基于信息理论的相关性度量。

    ·传统线性相关性度量
      在早期的研究中通常使用距离函数度量变量的相似性,例如欧氏距离和马氏距离。马氏距离相比欧式距离有很多优点。它不受量纲的影响,两点之间的马氏距离与原始数据的测量单位无关,由标准化数据和中心化数据(即原始数据与均值之差)计算出的两点之间的马氏距离相同。马氏距离还可以排除变量之间的相关性干扰,它的缺点是夸大了变化微小的变量的作用。
      线性相关系数又叫简单相关系数,一般用r表示,用来度量定量变量间的线性相关关系。将线性相关系数依据具体应用环境作适当校正可产生各种新的评价准则,有效提高特征选取的准确率,如最小平方回归误差、最大信息压缩指数。
      选择线性相关性作为分类中的特征评价准则有以下优点:有助于消除与类别相关度接近0的特征,即消除无关特征;有助于减小选中特征的冗余度,消除冗余特征。线性相关的缺点在于需要所有特征具有数值表示才能进行计算,并且不能捕获现实世界中非线性的关联。在简单相关系数的基础上又发展出了复相关系数、偏相关系数、典型相关系数等相关性度量方法。复相关又叫多重相关系数,是指因变量与多个自变量之间的相关关系,如某种商品的需求量与预期价格水平、职工收入水平等现象之间呈现多重相关关系。偏相关系数又被称为部分相关系数,反映校正其他变量后某一变量与另一变量的相关关系。偏相关系数的假设检验等同于偏回归系数的t检验;复相关系数的假设检验等同于回归方程的方差分析。典型相关系数是指先对原来各组变量进行主成分分析,得到新的线性无关的综合指标,再用两组之间综合指标的直线相关系数来研究原两组变量间的相关关系。

    ·基于信息理论的相关性度量
      信息论是一门用数理统计方法研究信息度量、传递和变换规律的科学。基于信息理论的相关性度量关键在于评测从特征中获取的信息,如果从特征X中获取的信息比特征Y多,则可以认为特征X优于Y。目前使用最广泛的信息度量可以分为熵度量和互信息两大类。
      熵用于测量随机变量的不确定性;度量的是消息中所含的信息量,其中去除了由消息固有结构所决定的部分,如语言结构的冗余性以及语言中字母、词的使用频度等统计特性。X熵值的变化反映了给定Y的条件下X的额外信息,并将其称为信息增益IG:IG(X|Y) = H(X) - H(X|Y)。如果IG(X|Y)>IG(Z|Y),则认为特征Y与X之间的相关度高于特征Y与Z的相关度。信息增益对于任意的两个变量都具有对称性,然而信息增益计算会偏向于具有更多取值的特征,因此必须对其值进行规范化来保证信息增益具有可比性。FCBF算法使用对称不确定性SU补偿信息增益对多值特征的偏差,并将信息增益取值规范至[0, 1]。SU(X,Y) = 2[IG(X|Y) / (H(X) + H(Y))]。SU值为1说明任一特征取值的信息都能完全预测其他特征值;若值为0,说明特征X与Y相互独立。使用SU度量的FCBF能够同时消除无关特征和冗余特征,算法时间复杂度为O(mnlogn)。其中:n为数据集中的特征数;m为数据集中的实例数。基于熵的度量方法也可以应用于评测连续性特征间的相关度,但要求提前将特征取值进行适当离散化。
      互信息是另一种常用的信息度量,用于评测随机变量间的依赖性,它总是具有对称、非负性,互信息的值越大说明变量间的依赖性越强。互信息取值为0当且仅当变量间相互独立。MIFS算法利用变量间的互信息在有指导的神经网络学习中进行特征选择,并且使用贪心策略进行搜索。

    4、总结
      总的来说,特征降维模型,可以分为过滤模型和包裹模型两类,其区别在于是基于特征的内在特性还是基于学习算法的性能对特征进行选取。特征子集的搜索过程和选用的特征评价标准是特征降维的两个关键问题,根据具体应用环境制定适当的搜索策略与一定特征度量准则相结合能够有效地去除无关特征、冗余特征,实现高效的特征降维,提高机器学习的效率。随着自然语言处理技术的发展,以语义分析为基础的特征抽取技术必将得到进一步发展;如何捕捉现实世界中非线性的关联,将特征判别从距离空间转向相关度度量空间依然是机器学习的研究热点。特征降维的应用领域也从传统的静态文本分类、聚类转向对半结构化网络资源的数据挖掘,对音频、视频等多媒体资源的机器学习,以及对生物基因特征的分析识别等。

    5、说明
      本文都是摘抄自胡洁的论文《 高维数据特征降维研究综述》,笔者没有完全融会贯通,只能先抄录了。版权都是归原作者。
      转载请注明出处:互联网旁观者~黄言之 http://blog.sina.com.cn/netreview/

    展开全文
  • 维度降低有两个主要用例:数据探索和机器学习。它对于数据探索很有用,因为维数减少到几个维度(例如2或3维)允许可视化样本。然后可以使用这种可视化来从数据获得见解(例如,检测聚类并识别异常值)。对于机器学习...

    原文链接:http://tecdat.cn/?p=6592

    原文出处:拓端数据部落公众号

    降低维度有两个主要用例:数据探索和机器学习。它对于数据探索很有用,因为维数减少到几个维度(例如2或3维)允许可视化样本。然后可以使用这种可视化来从数据获得见解(例如,检测聚类并识别异常值)。对于机器学习,降维是有用的,因为在拟合过程中使用较少的特征时,模型通常会更好地概括。

    在这篇文章中,我们将研究降维技术:

    • 主成分分析(PCA):最流行的降维方法
    • 核PCA:PCA的一种变体,允许非线性
    • t-SNE t分布随机邻域嵌入:非线性降维技术

    这些方法之间的关键区别在于PCA输出旋转矩阵,可以应用于任何其他矩阵以转换数据。 

    加载数据集

      我们可以通过以下方式加载数据集:

     
    df <- read.csv(textConnection(f), header=T)
    # 选择变量
    features <- c("Body", "Sweetness", "Smoky",
                "Medicinal", "Tobacco", "Honey",
                "Spicy", "Winey", "Nutty",
                "Malty", "Fruity", "Floral")
    feat.df <- df[, c("Distillery", features)]

    关于结果的假设

    在我们开始减少数据的维度之前,我们应该考虑数据。

    由于来自邻近酿酒厂的威士忌使用类似的蒸馏技术和资源,他们的威士忌也有相似之处。
    为了验证这一假设,我们将测试来自不同地区的酿酒厂之间威士忌特征的平均表达是否不同。为此,我们将进行MANOVA测试:

    ##           Df Pillai approx F num Df den Df    Pr(>F)    
    ## Region     5 1.2582   2.0455     60    365 3.352e-05 ***
    ## Residuals 80                                            
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

    检验统计量在5%水平上是显着的,因此我们可以拒绝零假设(区域对特征没有影响)。

    酿酒厂的地理位置

    由于区域对威士忌起着重要作用,我们将通过绘制其纬度和经度来探索数据集中的酿酒厂所在的位置。以下苏格兰威士忌地区存在:

    PCA

    使用PCA可视化威士忌数据集:

    在第二个图中,我们将绘制酿酒厂的标签,以便我们可以更详细地解释类别。

    总的来说,主成分似乎反映了以下特征:

    • PC1表示味道强度如烟熏味,药用味(如Laphroaig或Lagavulin)与温和味道(如Auchentoshan或Aberlour)
    • PC2表示味道复杂性即味道特征(例如Glenfiddich或Auchentoshan)与更具特色的味道特征(例如Glendronach或Macallan)

    ##   Cluster Campbeltown Highlands Islands Islay Lowlands Speyside
    ## 1       1           2        17       2     2        0       19
    ## 2       2           0         8       2     1        3       22
    ## 3       3           0         2       2     4        0        0

    对类别的合理解释如下:

    • 群集1: 复合威士忌,主要来自Highlands / Speyside
    • 群集2: 均衡的威士忌,主要来自斯佩塞德和高地
    • 群集3: 烟熏威士忌,主要来自艾莱岛

    可视化有两个有趣的观察结果:

    • Oban和Clynelish是唯一一个类似于艾莱岛酿酒厂口味的高地酿酒厂。
    • Highland和Speyside威士忌主要在一个方面不同。在一个极端是平滑,均衡的威士忌,如Glenfiddich。在另一个极端是具有更有特色的味道,如麦卡伦。

    这包含了我们对PCA的可视化研究。我们将在本文末尾研究使用PCA进行预测。

    核PCA

    内核PCA(KPCA)是PCA的扩展,它利用了内核函数,这些函数在支持向量机上是众所周知的。通过将数据映射到再现内核Hilbert空间,即使它们不是线性可分的,也可以分离数据。

    在R中使用KPCA

    要执行KPCA,我们使用包中的kpca函数kernlab

    使用此核,可以按如下方式减少维数:

    检索到新维度后,我们现在可以在转换后的空间中可视化数据:

    就可视化而言,结果比我们使用常规PCR获得的结果稍微粗糙一些。尽管如此,来自艾莱岛的威士忌分离得很好,我们可以看到斯佩塞特威士忌的集群,而高地威士忌则分布较广。

    T-SNE

    t-SNE已成为一种非常流行的数据可视化方法。

    使用t-SNE可视化数据

    在这里,我们将威士忌数据集的维度降低到两个维度:

    与PCA相比,簇的分离更加清晰,特别是对于簇1和簇2。

    对于t-SNE,我们必须进行解释:

    • V1表示味道复杂性。这里的异常值是右侧的烟熏艾莱威士忌(例如Lagavulin)和左侧复杂的高地威士忌(例如麦卡伦)。
    • V2表示烟熏/药用味道。

    使用PCA进行监督学习

    PCA是独立完成的,这一点至关重要。因此,需要遵循以下方法:

    1. 在测试数据集上执行PCA并在转换后的数据上训练模型。
    2. 将训练数据中的学习PCA变换应用于测试数据集,并评估模型在变换数据上的性能。

    为此,我们将使用ķ最近邻模型。此外,因为所有的变量是在特征空间[0,4]。我们必须优化k,因此我们还预留了用于确定此参数的验证集。

    PCA转换

    首先,我们编写一些函数来验证预测的性能。

    get.accuracy <- <strong>function</strong>(preds, labels) {
        correct.idx <- which(preds == labels)
        accuracy <- length(correct.idx) / length(labels)
        return (accuracy)
    }
     

    在下面的代码中,我们将对训练数据执行PCA并研究解释的方差以选择合适的维数

    ##         [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
    ## N_dim      1    2    3    4    5    6    7    8    9    10    11    12
    ## Cum_Var   22   41   52   63   72   79   85   90   94    97    99   100

    由于有足够百分比的方差用3维可以解释,我们将使用该值来设置训练,测试和验证数据集。

    现在我们已经将训练,验证和测试集转换为PCA空间,我们可以使用k最近邻居。

    ## [1] "PCA+KNN accuracy for k = 9 is: 0.571"

    让我们研究一下使用PCA的模型是否优于基于原始数据的模型:

    ## [1] "KNN accuracy for k = 7 is: 0.524"

     # 威士忌特色的方差
    print(diag(var(data))) 
    ##      Body Sweetness     Smoky Medicinal   Tobacco     Honey     Spicy 
    ## 0.8656635 0.5145007 0.7458276 0.9801642 0.1039672 0.7279070 0.6157319 
    ##     Winey     Nutty     Malty    Fruity    Floral 
    ## 0.8700410 0.6752394 0.3957592 0.6075239 0.7310534

    现在我们只能根据他们的口味确定苏格兰威士忌的六个区域,但问题是我们是否仍能获得更好的表现。我们知道很难预测数据集中代表性不足的苏格兰地区。那么,如果我们局限于更少的地区,会发生什么?

    • 岛威士忌与艾莱岛威士忌组合在一起
    • Lowland / Campbeltown威士忌与Highland威士忌组合在一起

    通过这种方式,问题减少到三个区域:Island / Islay威士忌,Highland / Lowland / Campbeltown威士忌和Speyside威士忌。再次进行分析:

    ## [1] "PCA+KNN accuracy for k = 13 is: 0.619"

    我们可以得出61.9%的准确度,我们可以得出结论,将我们样品较少的威士忌区域分组确实是值得的。

    KPCA用于监督学习

    应用KPCA进行预测并不像应用PCA那样简单。在PCA中,特征向量是在输入空间中计算的,但在KPCA中,特征向量来自核希尔伯特空间。因此,当我们不知道所使用的显式映射函数ϕ,不可能简单地转换新数据点。

    # 注意:这会高估实际效果
    accuracy <- get.accuracy(preds.kpca, df$Region[samp.test])

    摘要

    我们看到了如何使用PCA,KPCA和t-SNE来降低数据集的维数。PCA是一种适用于可视化和监督学习的方法。KPCA是一种非线性降维技术。t-SNE是一种最新的非线性方法,擅长可视化数据,但缺乏PCA的可解释性和稳健性。

    这可能表明以下两点之一:

    1. 尝试新的的威士忌仍有很大的潜力。
    2. 有很多种味道的组合是可能的,并且很好地结合在一起。

    我倾向于选择第二种选择。为什么?在PCA图中,右下角是没有样本所在的最大区域。看着靠近这个区域的威士忌,我们发现那些是y轴上的Macallan和x轴上的Lagavulin。麦卡伦以其复杂的口味而闻名,Lagavulin以其烟熏味而闻名。

    位于二维PCA空间右下方的威士忌将同时具有两种特性:它既复杂又烟熏。我猜这种具有两种特性的威士忌对于口感来说太好了。

    非常感谢您阅读本文,有任何问题请在下面留言!


    参考文献

    1.matlab偏最小二乘回归(PLSR)和主成分回归(PCR)

    2.R语言高维数据的主成分pca、 t-SNE算法降维与可视化分析

    3.主成分分析(PCA)基本原理及分析实例

    4.基于R语言实现LASSO回归分析

    5.使用LASSO回归预测股票收益数据分析

    6.r语言中对lasso回归,ridge岭回归和elastic-net模型

    7.r语言中的偏最小二乘回归pls-da数据分析

    8.r语言中的偏最小二乘pls回归算法

    9.R语言线性判别分析(LDA),二次判别分析(QDA)和正则判别分析(RDA)

    展开全文
  • 探索性数据降维分析 本报告主要包含以下内容: 数据介绍 基本原理介绍 结合案例数据进行分析 最后总结 附上代码和参考 数据介绍 本报告所使用的是洛杉矶街区数据,其中包含每个街区的名字、收入中位数、公立学校...
  • R语言通过因子分析对高维数据进行降维处理
  • 本节书摘来自华章出版社《R语言数据挖掘》一书中的第1章,第1.13节,作者[哈萨克斯坦]贝特·麦克哈贝尔(Bater Makhabel),李洪成 许金炜 段力辉 译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。...
  • 数据降维和参数降维的简单理解

    千次阅读 2017-03-22 10:46:45
    数据降维
  • 聚类和分类都是无监督学习的典型任务,任务之间存在关联,比如某些高维数据的分类可以通过降维处理更好的获得。 降维过程可以被理解为数据集的组成成分进行分解(decomposition)的过程,因此sklearn为降维模块命名...
  • 【IT168 方案】任何与数据相关的挑战的第一步都是从研究数据本身开始的。例如,可以通过查看某些变量的分布或查看变量之间的潜在相关性来研究。...因此,理解如何可视化高维数据集是关键,这可以使用降维技术...
  • 原标题:在Python中使用PCA和t-SNE可视化高维数据集【IT168 方案】任何与数据相关的挑战的第一步都是从研究数据本身开始的。例如,可以通过查看某些变量的分布或查看变量之间的潜在相关性来研究。目前的问题是,很多...
  • 数据降维基本原理是将样本点从输入空间通过线性或非线性变换映射到一个低维空间,从而获得一个关于原数据集紧致的低维表示。 数据降维工具箱drtoolbox中众多算法,这里简单做个分类。 因为很多并没有仔细了解,在...
  • 上下文感知的降维解卷积肠道微生物群落动态Context-aware dimensionality reduction deconvolutes gut microbial communi...
  • 前言在之前一些文章的讨论中,通过一些例子我们可以发现(主要是关于决策树或随机森林的相关内容)其实并不是样本的所有属性可能都是那么得重要,只要不是同等重要,特别是在分类问题上可能...对于数据进行降维的处...
  • 若将矩阵看做一个变换,那么任何这样的变换可以看做是两个旋转和一个缩放变换的复合,这点和特征值分解基本一样。它也可以通过对Sigma的调整实现降维,通过U和VT在高维和低维间转换。
  • t-Distributed Stochastic Neighbor Embedding (t-SNE) 是一种非线性降维技术,特别适用于高维数据集的可视化。它广泛应用于图像处理、NLP、基因组数据和语音处理。 t-SNE 工作原理如下:算法首先计算点在高维空间中...
  • 1 高维多元数据   每个数据对象有两个或两个以上独立或者相关属性的数据高维数据具有多个独立属性,多元指数据具有多个相关属性。由于研究者在很多情况下不确定数据的属性是否独立,因此通常简单地称之为多元...
  • 如何实现降维处理(R语言)

    万次阅读 2014-11-13 09:34:58
    现实世界中数据一般都是复杂和高维的,比如描述一个人,有姓名、年龄、性别、受教育程度、收入、地址、电话等等几十种属性,如此多的属性对于数据分析是一个严重的挑战,除了极大增加建模的成本和模型的复杂度,往往...
  • 主成分分析算法(PCA)是最常用的线性降维方法,它的目标是通过某种线性投影,将高维数据映射到低维的空间中,并期望在所投影的维度上数据的信息量最大(方差最大),以此使用较少的数据维度,同时保留住较多的原...
  • 数据清洗与准备 环境配置 library(mlbench) # 将会使用到包中的BostonHousing数据集 library(funModeling) # 探索性数据分析工具包,本节内容中将会使用到它的status()函数,打印整体数据质量 library(tidyverse) # ...
  • 原文链接:... 加载包 library(ggplot2) ## Warning: package 'ggplot2' was built under R version 3.5.1 library(dplyr) ## Warning: package 'dplyr' was built under R version 3.5.1 lib...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,188
精华内容 875
关键字:

r语言高维数据降维