算法小白的第一次尝试---KPCA(核主成分分析)降维【实例对比分析PCA、LDA和KPCA】

周志华 《机器学习》之 第十章(降维与度量学习)概念总结 降维在一起图像识别过程也经常被采用的一种分类算法,例如二维数据经过投影变为一维数据,从而更好的表征数据的特征,再进行识别。在前面章节中提到过LDA(线性判别分析)也可以当做一种简单降维处理。在周老师的这章中主要讲述PCA主成分分析算法对高维数据进行降维。降维是一种解决维数灾难的重要途径。书中从如下几节进行介绍:1、K邻近学习2、低维嵌入3、主成分分析(PCA)4、核化线性降维5、流形学习6、度量学习 阅读详情
--------------------------------------------------------------------------
笔者追求算法实现,不喜欢大篇幅叙述原理,有关KPCA理论推荐查看该篇博客
https://blog.csdn.net/zjuPeco/article/details/77510981
	
PCA降维欢迎前往笔者上一篇博客:
https://blog.csdn.net/Java_Man_China/article/details/89331554

LDA降维欢迎前往笔者上一篇博客:
https://blog.csdn.net/Java_Man_China/article/details/89504514
--------------------------------------------------------------------  ----
import breeze.linalg.{DenseMatrix, DenseVector, eig}
import org.apache.log4j.{Level, Logger}
import org.apache.spark.ml.feature.{LabeledPoint, StandardScaler, VectorAssembler}
import org.apache.spark.ml.linalg.Vectors
import org.apache.spark.sql.types.{DoubleType, StructField, StructType}
import org.apache.spark.sql.{DataFrame, Row, SparkSession}
import scala.collection.mutable.ArrayBuffer

/** PCA and LDA can be used to lower the linear datasets,but for the non-linear datasets,we need to
  * borrow kernel function ,So this code show how to use  KPCA  to solve the non-linear data
  * Data Source : http://archive.ics.uci.edu/ml/datasets/Wine
  * @author XiaoTangBao
  * @date 2019/4/29 14:04
  * @version 1.0
  */
object KPCA {
  def main(args: Array[String]): Unit = {
    //屏蔽日志
    Logger.getLogger("org.apache.spark").setLevel(Level.ERROR)
    val spark = SparkSession.builder().master("local[4]").appName("KPCA").getOrCreate()
    val data = spark.sparkContext.textFile("G:\\mldata\\kpca_test.txt").map(str => str.split(','))
      .map(arr => arr.map(str => str.toDouble)).map(arr => Row(arr(0),arr(1),arr(2)))
    //定义Schema和featuresArray
    val schema = StructType(List(StructField("label",DoubleType,true),StructField("x1",DoubleType,true),StructField("x2",DoubleType,true)))
    val featuresArray = Array("x1","x2")
    val df = spark.createDataFrame(data,schema)
    //定义转化器
    val va = new VectorAssembler().setInputCols(featuresArray).setOutputCol("features")
    val ndf = va.transform(df).select("label","features")
    //rbf核函数参数
    val gama = 15.0
    //降维后的最终纬度
    val dim = 2
    val n1 = run(ndf,dim,15.0)
    val arr = ArrayBuffer[(Double,Double)]()
    for(i<-0 until n1.cols) arr.append((n1(0,i),n1(1,i)))
    arr.foreach(tp =>println(tp._1))
    println("**************")
    arr.foreach(tp =>println(tp._2))
  }

  /**
    * the method attempts to lower the dimensionality by the RBF
    * @param data the ioriginal data which in high dimensions, each col of the data replace one record.
    * @param k the final dimensions
    * @param gama the only one paramter of RBF
    */
  def run(df:DataFrame, k:Int, gama:Double)= {
    //标准化处理数据,标准化后不再需要去中心化
    val stdf = new StandardScaler().setInputCol("features").setOutputCol("Scaledfeatures")
      .setWithMean(true).setWithStd(true).fit(df).transform(df)
      .select("label","Scaledfeatures")
      .withColumnRenamed("Scaledfeatures","features")

    val trainData = stdf.select("features").rdd.map(row => row.toString())
      .map(str => str.replace('[', ' '))
      .map(str => str.replace(']', ' '))
      .map(str => str.trim).map(str => str.split(','))
      .map(arr => arr.map(str => str.toDouble)).collect()

    val labels = stdf.select("label").rdd.map(row => row.toString())
      .map(str => str.replace('[', ' '))
      .map(str => str.replace(']', ' '))
      .map(str => str.trim).map(str => str.toDouble).collect()

    //特征列数
    val tzz = trainData(0).length

    //生成新的带label的数据
    val labArr = ArrayBuffer[LabeledPoint]()
    for (i <- 0 until trainData.length) labArr.append(LabeledPoint(labels(i), Vectors.dense(trainData(i))))

    //总样本组成的大型矩阵
    val allData = labArr.map(lab => lab.features).map(vec => vec.toArray).flatMap(x => x).toArray
    val big_Matrx = new DenseMatrix[Double](tzz, trainData.length, allData)

    //计算样本的核矩阵
    var kMatrix = DenseMatrix.zeros[Double](big_Matrx.cols,big_Matrx.cols)
    for(i<-0 until kMatrix.rows){
      val vi = big_Matrx(::,i)
      for(j<-0 until kMatrix.cols){
        kMatrix(i,j) = rbf(vi,big_Matrx(::,j),gama)
      }
    }

    //聚集核矩阵
    var LMatrix = DenseMatrix.zeros[Double](kMatrix.rows,kMatrix.cols)
    for(i<-0 until LMatrix.cols) LMatrix(::,i) := 1.0 / kMatrix.rows
    kMatrix = kMatrix - LMatrix * kMatrix - kMatrix * LMatrix + LMatrix * kMatrix * LMatrix

    //计算样本核矩阵的特征值和特征向量
    val eigValues = eig(kMatrix).eigenvalues
    //此处返回的eigVectors已经单位化了
    val eigVectors = eig(kMatrix).eigenvectors

    //选取最大的k个特征值对应的特征向量
    val label_eig = DenseMatrix.horzcat(eigVectors.t,eigValues.toDenseMatrix.t)
    var strArr = ArrayBuffer[String]()
    for(i<-0 until label_eig.rows) strArr.append(label_eig.t(::,i).toString)
    for(i<-0 until strArr.length){
      strArr(i) = strArr(i).replace("DenseVector(","").replace(')',' ').trim()
    }
    val da = ArrayBuffer[LabeledPoint]()
    for(str <- strArr){
      val arr = str.split(',').map(string => string.toDouble)
      val lab = arr.takeRight(1)(0)
      val value = arr.take(arr.length -1)
      val labPoint = LabeledPoint(lab,Vectors.dense(value))
      da.append(labPoint)
    }

    val result = da.sortBy(labPoint => labPoint.label).reverse.take(k).map(lab => lab.features).map(vec => vec.toArray)
    var rt = DenseMatrix.zeros[Double](result.length,result(0).length)
    for(i<-0 until rt.rows){
      for(j<-0 until rt.cols){
        rt(i,j) = result(i)(j)
      }
    }
    rt
  }
  def rbf(v1:DenseVector[Double],v2:DenseVector[Double],gama:Double)={
    val index_cof = (v1 - v2) dot (v1 - v2)
    val result = math.exp((-1.0) * gama * index_cof)
    result
  }
}

采用KPCA,分别对葡萄酒数据进行了降维处理,结果如下图所示:
Java_Man_China
在这里插入图片描述
与Python调库结果对比,发现两者基本一致
在这里插入图片描述

同时为了对比线性降维的效果,采用PCA和LDA分别对数据进行了降维,结果如下图所示:
在这里插入图片描述
Java_Man_China
在这里插入图片描述
Java_Man_China
实验结果表明:对于非线性可分数据,PCA和LDA降维效果不理想,而KPCA对于非线性数据,降维效果明显。

一篇文章了解KPCA算法:从原理到Python代码实现全面解析 本文将介绍基于KPCA算法的降维方法,通过手写数字数据集来进行实验验证,并在此基础上构建KNN分类器来进行分类任务。同时,我们将展示如何使用散点图对降维后的数据进行可视化展示和分类性能评估。让我们一起来探讨KPCA算法在高维数据处理中的优越性吧! 阅读详情

相关推荐

降维算法之KPCA(核主成分分析)

降维算大之核主成分分析

qq_45670407的博客 1917

04-0003 KPCA算法

KPCA算法1.KPCA简述2.核函数3.KPCA推导4.KPCA步骤5.KPCA数据6.KPCA代码7.KPCA结果8.个人の理解 1.KPCA简述 当数据在低维空间不是线性可分的时候,转化到高维的空间可能就变成了线性可分的,这个过程用到了KPCA算法,也就是将数据才能从低维非线性,转化为高维线性可分数据的一种算法。 [注:这里的高维空间下的线性可分,此时的线性说的是一个超平面。我的理解。 ]...

雯饰太一的博客 6241

PCA降维后数据怎么用?用sklearn和鸢尾花数据集实战,教你可视化并评估降维效果

本文通过鸢尾花数据集实战演示PCA降维技术的完整流程,包括数据标准化、主成分分析、可视化及效果评估。使用Python的sklearn库实现PCA降维,并通过解释方差分析和肘部法则量化评估降维效果,帮助读者掌握如何在实际项目中应用和优化PCA技术。

weixin_30387799的博客 1144

【数据降维-第2篇】核主成分分析(KPCA)快速理解,及MATLAB实现

本文介绍了KPCA(Kernel Principal Component Analysis)的基本概念和应用。与PCA相比,KPCA使用核函数对数据进行映射,从而处理非线性问题,并能够更好地构造复杂的非线性分类器。本文通过两个例子,介绍了KPCA在图像分类和异常检测中的应用。本文还解释了KPCA和PCA在参数设置上的不同之处,帮助读者更好地理解和应用KPCA算法。

fengzhuqiaoqiu的博客 1万+

Python KPCA算法详解及源码

KPCA(Kernel Principal Component Analysis)算法是一种非线性的主成分分析算法,它通过将数据映射到一个高维特征空间来实现非线性的降维。KPCA(Kernel Principal Component Analysis)算法是一种非线性的主成分分析算法,它通过将数据映射到一个高维特征空间来实现非线性的降维。KPCA(Kernel Principal Component Analysis)算法是一种非线性的主成分分析算法,它通过将数据映射到一个高维特征空间来实现非线性的降维。

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1233

安卓模拟器绕过检测全解析:雷电、MuMu、蓝叠、逍遥、夜神与WSA完整指南

随着手机游戏和应用的普及,越来越多的用户选择在PC上通过模拟器来运行安卓应用。然而,许多应用和游戏为了防止作弊或出于安全考虑,会检测是否运行在模拟器环境中。本文将详细介绍各大主流模拟器的检测绕过方法,帮助用户在电脑上流畅体验各类安卓应用。1. 获取模拟器系统镜像2. 使用ROM厨房工具修改系统文件3. 替换模拟器的系统镜像雷电模拟器:适合游戏,推荐使用MAGISK + EdXposed方案MuMu模拟器:适合中度游戏,推荐太极框架蓝叠模拟器:适合国际应用,推荐MAGISK方案逍遥模拟器。

专注技术分享 3万+

【机器学习】降维系列算法(PCA、LDA、NMF、LLE)

降维(Dimensionality Reduction)是机器学习中用来减少数据集特征数量的技术,其目的是在尽可能保留原始数据信息的同时降低数据的复杂度。降维不仅可以加速模型训练、减少计算资源消耗,还能帮助消除噪声、提高模型性能,并且有助于可视化高维数据。PCA 是一种线性降维方法,它通过找到一组新的正交基(主成分),将原始数据投影到这些新轴上。新的坐标系中的每个维度都是原始变量的线性组合,且各维度之间相互独立。PCA的目标是在尽可能少的维度上保留尽可能多的数据方差。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

VINS-Mono 时延估计论文翻译

Online Temporal Calibration for Monocular Visual-Inertial Systems 摘要 精确的状态估计是机器人导航、自主驾驶、虚拟现实和增强现实等各种智能应用的基础模块。视觉惯性融合是近年来流行的六自由度状态估计技术。记录不同传感器测量值的时刻对系统的鲁棒性和准确性至关重要。在实践中,每个传感器的时间戳通常会受到触发和传输延迟的影响,从而导致不同传感器之间的时间偏差(时间偏移)。这种时间偏移严重影响传感器融合的性能。为此,我们提出了一种标定视觉和

weixin_39061796的博客 1255

算法小白的第一次尝试---PCA(主成分分析)降维【适合各种纬度数据】

import breeze.linalg.{Axis, DenseMatrix, eigSym, sum} import org.apache.log4j.{Level, Logger} ...

Java_Man_China的博客 1万+

步进电机

步进电机

happygrilclh的博客 2141

10bit SAR ADC电路:200多页设计与仿真文档,附gpdk045工艺与testbench,可直接导入Virtuoso仿真,含以太网、PLL电路例程及进阶ADC

拥有超过200页的详细设计和仿真文档,它以gpdk045工艺为基础,testbench均可直接导入virtuoso仿真,为我们提供了一个全面了解ADC电路设计的绝佳机会。通过对10bit SAR ADC电路的详细解析,我们不仅了解了其设计背后的原理和实现方法,还体会到了数字与模拟技术的交融之美。这个SAR ADC的结构采用了经典的电荷重分配架构。一个10bit SAR ADC电路,有200多页详细的设计和仿真文档,附带对应的gpdk045工艺,testbench都有,可直接导入virtuoso仿真。

OMyAVKmGPBOF的博客 1335

KPCA降维_超参数_贝叶斯优化

使用kpca和贝叶斯优化进行特征降维

m0_69496797的博客 791

【信道编码/Channel Coding】线性分组码

这是本专栏信道编码/Channel Coding的第二站,想对信道编码有一个系统性的认识可以看本专栏的信道编码的整体框架一文。而在本篇文章中,将介绍线性分组码的基本原理。

Tomatomatodo的博客 9245

Python机器学习20——三十种数据降维方法全面解析(最全数据降维方法总结)

三十种数据降维的方法使用(skleran),全面解析,数据降维算法使用全面总结。

weixin_46277779的博客 2408

让AI镜头“活”起来:22个核心运镜提示词,告别视频画面呆板

介绍了22种影视级镜头语言的AI提示词用法。内容涵盖推轨/后拉镜头等距离变化技巧、横摇/俯仰等方向控制手法、环绕/升降等空间位移方式,以及POV视角等特殊构图。

weixin_43489601的博客 6291

使用VNA(Vector Network Analyzer)对S参数进行去嵌(一)

传统上,RF和微波组件被设计成具有同轴接口的封装。通过连接一系列这些单独的同轴设备,可以容易地制造复杂的系统。使用使用类似同轴接口的标准测试设备可以很容易地测量这些部件和系统的性能。然而,现代系统需要更高水平的组件集成、更低的功耗和更低的制造成本。射频组件正在迅速从使用昂贵同轴接口的设计转向使用印刷电路板和表面贴装技术(SMT)的设计。传统的同轴接口甚至可以从最终产品中取消。这就给设计者留下了用需要同轴接口的测试设备测量这些射频和微波组件性能的问题。解决方案是使用连接同轴和非同轴传输线的测试夹具。

小孟同学的博客 1万+

常见机器学习降维方法

一般在维度数量很多,严重影响到训练速度的情况下再考虑降维,降维必不可少的会减少原数据的信息量(减小方差)。 维数诅咒:越高维的数据,样本分布于边界的成分越大,样本之间的距离越远,样本越稀疏,因此越高维的数据的预测越不可靠,它们基于的推测越大,过拟合的风险也越大。 投影类: PCA(主成分分析法): 在进行PCA前应进行中心化。 PCA的思想是找到最能代表数据特征的超平面(投影后方差减少最...

weixin_42095259的博客 851

多角度模板匹配的模板创建技巧

基于形状的模板匹配多角度创建技巧

manuoo的专栏 3403

PCA主成分分析:从数学推导到Python实战的降维指南

在数据科学和机器学习中,高维数据常面临维度灾难和信息冗余问题。主成分分析(PCA)作为一种经典的无监督降维技术,其核心原理是通过正交变换,将原始特征转换为一系列线性无关的新变量(主成分),并按照方差大小排序。PCA的技术价值在于能够有效消除特征间的共线性、降低计算复杂度,并能在保留大部分数据信息的同时实现数据压缩与可视化。其应用场景广泛,包括特征工程、数据去噪、图像处理和探索性数据分析等。本文以鸢尾花数据集为例,结合协方差矩阵、特征值分解等热词,详细拆解了PCA从数学推导到Python代码实现的完整流程,并

weixin_33690963的博客 346

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

[机器学习实战] 阅读第八章

begin time:2019-05-14 文章目录降维维度的诅咒解决方法有利于数据可视化1 维度的诅咒2 数据降维的主要方法2.1 投影2.2 流行学习小总结3 PCA3.1 保留差异性3.2 主成分定义找到主成分的方法,奇异值分解(SVD)公式8-1:主成分矩阵*不要忘记将数据集中4 低纬度投影公式8-2:将训练集投影到低维度5 使用scikit-learn5.1 方差解释率5.2 选择正确数...

枪枪枪的博客 727

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

PCA降维实战:从原理到应用,手把手解析主成分分析

主成分分析(PCA)是一种经典的无监督降维技术,其核心原理是通过线性变换将原始高维数据投影到一组新的正交特征(主成分)上,这些主成分按照方差大小排序,能够最大程度保留数据的变异信息。PCA的技术价值在于有效解决高维数据中的多重共线性和信息冗余问题,提升计算效率并可能改善模型性能。其典型应用场景包括数据可视化、特征压缩、噪声过滤以及作为机器学习流程的预处理步骤。例如,在用户画像分析中,PCA可以将众多相关的行为指标(如登录频率、在线时长)融合为少数几个综合指标(如“用户活跃度”),从而简化模型并增强解释性。本

weixin_30616969的博客 329

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

PCA不是降维黑箱:数学建模中的原理、陷阱与可解释性

主成分分析(PCA)是数据降维与特征提取的基础统计方法,其本质是通过协方差矩阵特征分解,寻找数据方差最大且正交的投影方向。理解PCA需回归线性代数内核:协方差矩阵反映变量量纲依赖,特征向量定义新坐标系,特征值对应投影方差——这决定了信息保留的物理意义。在数学建模与机器学习工程中,PCA的技术价值不仅在于压缩维度,更在于揭示变量潜在结构、缓解多重共线性,并为下游模型提供稳健输入。典型应用场景包括高维观测数据预处理(如遥感影像、传感器阵列)、多指标综合评价(如城市可持续发展指数构建)、以及批次效应校正。但误用风

congjukun0600的博客 341

机器学习(降维与度量学习)

降维在一起图像识别过程也经常被采用的一种分类算法,例如二维数据经过投影变为一维数据,从而更好的表征数据的特征,再进行识别。在前面章节中提到过LDA(线性判别分析)也可以当做一种简单降维处理。在周老师的这章中主要讲述PCA主成分分析算法对高维数据进行降维。降维是一种解决维数灾难的重要途径。书中从如下几节进行介绍:1、K邻近学习kk近邻学习是一种监督学习算法,在给定的训练样本集中,基于某种距离度量,找...

weixin_40355324的博客 491

Sklearn 与 TensorFlow 机器学习实用指南第二版(六)

警告:降维肯定会丢失一些信息(这就好比将一个图片压缩成 JPEG 的格式会降低图像的质量),因此即使这种方法可以加快训练的速度,同时也会让你的系统表现的稍微差一点。如果只有 100 个特征(比 MNIST 问题要少得多)并且假设它们均匀分布在所有维度上,那么如果想要各个临近的训练实例之间的距离在 0.1 以内,您需要比宇宙中的原子还要多的训练实例。例如,在图 8-6 的第一行中,瑞士卷被分为两类:在三维空间中(图左上),分类边界会相当复杂,但在二维展开的流形空间中(图右上),分类边界是一条简单的直线。

龙哥盟 245

主成分分析(PCA)实战:从数学原理到Python代码全解析

本文全面解析主成分分析(PCA)的数学原理与Python实现,从数据标准化、协方差矩阵计算到特征分解逐步讲解,并提供手写PCA代码与scikit-learn对比。通过人脸数据降维可视化等实战案例,展示PCA在图像压缩、股票分析等场景的应用价值,帮助读者掌握这一关键的数据降维技术。

weixin_33994429的博客 321

PCA主成分分析:从原理到实战,掌握数据降维与特征提取

在数据科学和机器学习领域,处理高维数据时常常面临维度灾难和特征冗余的挑战。主成分分析(PCA)作为一种经典的无监督线性降维技术,其核心原理是通过正交变换将原始特征转换为一组线性不相关的主成分,这些主成分按照方差大小排序,能够最大程度保留数据的变异信息。PCA的技术价值在于能够有效去除噪声、减少特征间的多重共线性,并提升后续模型的训练效率和泛化能力。这一方法广泛应用于数据可视化、特征工程、图像压缩和信号处理等场景。例如,在客户行为分析或传感器数据处理中,PCA能够从数十个原始指标中提取出少数核心信号,实现高效

weixin_33782386的博客 451
上一篇: 算法小白的第一次尝试---LDA(线性判别分析)降维 【适用于任何维度】
下一篇: intelij Idea下sbt项目依赖包冲突
小糖宝
博客等级 码龄9年 47粉丝 46原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值