方差

因子分析和PCA总结

左心房为你撑大大i 提交于 2019-12-11 21:16:56
因子分析和 PCA 定义 因子分析就是数据降维工具。 从一组相关变量中 删除冗余或重复 ,把相关的变量放在一个因子中,实在不相关的因子有可能被删掉。 用一组较小的 “ 派生 ” 变量表示相关变量 ,这个派生就是新的因子 。形成彼此相对独立的因素 ,就是说新的因子彼此之间 正交 。 应用 筛选变量。 步骤 3.1 计算所有变量的相关矩阵 3.2 要素提取 ,仅在此处需要使用 PCA 3.3 要素轮换 3.4 就基本因素的数量作出最后决定 3.1 计算所有变量的相关矩阵 构建数据矩阵,该数据矩阵是相关矩阵(矩阵里面全是相关系数), PCA 之后变为因子矩阵。 绝对值大于 0.3 的相关系数表示可接受的相关性 ,即相关系数大于 0.3 则把它们放在一堆。 3.2 要素提取 ,仅在此处需要使用 PCA (当然也有其他方法, 要素提取使用不同方法有不同结果)按照对方差的解释程度排序。 连续分量解释总样本方差的逐渐变小的部分,并且所有的分量彼此不相关。 确定因子数:特征值大于 1 3.3 要素轮换 因素轴转为了让因子之间差距尽量大。 非旋转因素通常不是很容易解释的 ( 比如因素 1与所有变量都相关,因素二与前四个变量相关) 对因素进行旋转,使它们更有意义,更易于解释 (每个变量都与最小数量的因素相关联)。 不同旋转方法会识别不同因素,这与要素提取使用不同方法有不同结果是一样的。 3.4

Batch normalization批标准化

心已入冬 提交于 2019-12-11 14:40:51
Batch normalization 深度学习尤其是在CV上都需要对数据做归一化,因为深度神经网络主要就是为了学习训练数据的分布,并在测试集上达到很好的泛化效果,但是,如果我们每一个batch输入的数据都具有不同的分布,显然会给网络的训练带来困难。另一方面,数据经过一层层网络计算后,其数据分布也在发生着变化,此现象称为Internal Covariate Shift。 机器学习领域有个很重要的假设:IID独立同分布假设,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。BatchNorm的作用就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的(标准正态分布)。 Internal covariate shift 的概念:训练深度网络的时候经常发生训练困难的问题,因为,每一次参数迭代更新后,上一层网络的输出数据经过这一层网络计算后,数据的分布会发生变化,为下一层网络的学习带来困难(神经网络本来就是要学习数据的分布,要是分布一直在变,学习就很难了),此现象称之为Internal Covariate Shift。 对于深度学习这种包含很多隐层的网络结构,在训练过程中,因为各层参数不停在变化,所以每个隐层都会面临covariate shift的问题,也就是在训练过程中,隐层的输入分布老是变来变去,这就是所谓的

数理统计(一)——用Python进行方差分析

廉价感情. 提交于 2019-12-10 23:08:43
数理统计(一)——Python进行方差分析   iwehdio的博客园: https://www.cnblogs.com/iwehdio/   方差分析可以用来推断一个或多个因素在其状态变化时,其因素水平或交互作用是否会对实验指标产生显著影响。主要分为单因素方差分析、多因素无重复方差分析和多因素重复方差分析。   做数理统计课后题,发现方差分析计算比较麻烦,想用Python掉包实现。但是发现大多教程对参数的讲解不是很清楚,在此做记录。   主要用到的库是pandas和statsmodels。简要流程是,先用pandas库的DataFrame数据结构来构造输入数据格式。然后用statsmodels库中的ols函数得到最小二乘线性回归模型。最后用statsmodels库中的anova_lm函数进行方差分析。      首先,是输入的数据格式。使用pandas的DataFrame,每一行为一次试验的因素水平和试验结果。以下图中的题目为例。   则对于因素A和因素B即结果R可表示为如下的DataFrame: data = pd.DataFrame([[1, 1, 32], [1, 2, 35], [1, 3, 35.5], [1, 4, 38.5], [2, 1, 33.5], [2, 2, 36.5], [2, 3, 38], [2, 4, 39.5], [3, 1, 36], [3,

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

我的未来我决定 提交于 2019-12-10 10:07:52
个人分类: 机器学习与Python 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhongkelee/article/details/44064401 转载请声明出处: http://blog.csdn.net/zhongkelee/article/details/44064401 一、PCA简介 1. 相关背景 上完陈恩红老师的《机器学习与知识发现》和季海波老师的《矩阵代数》两门课之后,颇有体会。最近在做主成分分析和奇异值分解方面的项目,所以记录一下心得体会。 在许多领域的研究与应用中,往往需要对反映事物的多个变量进行大量的观测,收集大量数据以便进行分析寻找规律。多变量大样本无疑会为研究和应用提供了丰富的信息,但也在一定程度上增加了数据采集的工作量,更重要的是在多数情况下,许多变量之间可能存在相关性,从而增加了问题分析的复杂性,同时对分析带来不便。如果分别对每个指标进行分析,分析往往是孤立的,而不是综合的。盲目减少指标会损失很多信息,容易产生错误的结论。 因此需要找到一个合理的方法,在减少需要分析的指标同时,尽量减少原指标包含信息的损失,以达到对所收集数据进行全面分析的目的。由于各变量间存在一定的相关关系,因此有可能用较少的综合指标分别综合存在于各变量中的各类信息。主成分分析与因子分析就属于这类降维的方法。 2. 问题描述

数学基础 | (3) cs229概率论基础

陌路散爱 提交于 2019-12-09 20:52:56
目录 1. 概率的基本要素 2. 随机变量 3. 两个随机变量 4. 多个随机变量 1. 概率的基本要素 为了定义集合上的概率,我们需要一些基本元素: 样本空间 :随机实验的所有结果的集合(所有样本点的集合)。在这里,每个结果(样本点) 可以被认为是实验结束时现实世界状态的完整描述。 事件集(事件空间) F:事件 ,事件A是 的子集,即 是一个实验可能结果的集合(包含一些样本点)。 F需要满足以下三个条件: 概率(度量)P:函数P是一个 (事件集到实数集的映射),满足: 以上三条性质被称为 概率公理 。 例子 性质 条件概率与独立性 2. 随机变量 考虑一个实验,我们翻转 10 枚硬币,我们想知道正面硬币的数量。这里,样本空间 的元素是长度为 10 的序列。例如,我们可能有: 然而,在实践中,我们通常不关心获得任何特定正反序列的概率。相反,我们通常关心结果的实值函数,比如我们 10 次投掷中出现的正面数。在某些技术条件下,这些函数被称为 随机变量 。 更正式地说,随机变量X是一个 (样本空间/样本集到实数集的映射)的函数。通常,我们将使用大写字母 或更简单的X(其中隐含对随机结果 的依赖)来表示随机变量。我们将使用小写字母x来表示随机变量的值。 例子 在我们上面的实验中,假设 是在投掷序列 中出现的正面的数量。假设投掷的硬币只有 10 枚,那么 只能取有限数量的值,因此它被称为

偏差-方差分解

白昼怎懂夜的黑 提交于 2019-12-06 10:48:33
1、 偏差-方差分解是解释学习算法泛化性能的一种重要工具,试图对学习算法的期望泛化误差率(generalization error)进行分解。可以分解为三部分,偏差(bias)、方差(variance)和噪声(noise)。其中, 偏差:度量了模型的期望值和真实结果的偏离程度,刻画了模型本身的拟合能力 方差:度量了同样大小的训练集的变动所导致的学习性能的变化,刻画了数据扰动所产生的影响。 噪声:表达了当前任务上任何学习算法所能达到的期望防滑误差的下界,刻画了学习问题本身的难度。 2、 泛化误差:以回归任务为例,学习算法的平方预测误差期望为: \[Err(x) = E[(y-f(x;D))^2]\] 方差:在一个训练集 \(D\) 上模型 \(f\) 对测试样本 \(x\) 的预测输出为 \(f(x;D)\) ,那么学习算法 \(f\) 对测试样本 \(x\) 的期望预测为: \[\overline{f}(x) = E_D[f(x;D)]\] 上面的期望预测也就是针对不同数据集 \(D,f\) 对 \(x\) 的预测值取其期望,也被叫做average predicted。 使用样本数相同的不同训练集产生的方差为: \[var(x)=E_D[f(x;D)-\overline{f}(x))^w]\] 噪声:噪声为真实标记与数据集中的实际标记间的偏差 \[ \varepsilon = E

机器学习中的方差与偏差,bias vs variance

十年热恋 提交于 2019-12-06 08:53:36
一、方差与偏差文字与数学解释 (1)文字解释 偏差:预测值与真实值的差值 方差:预测值与训练数据集值的差值 (2)数学解释 对测试样本的预测值 $y-f(x;D)$ 泛化误差:$Err(x)=E[(y-f(x;D))^{2}]$ 测试样本的均值 $\bar{f}=E_{D}[f(x;D)]$ 真实值$y_{D}$,数据集上的标签值,y是理论上正确的值。 对泛化误差进行分解: $Err(x)$$=E[(y-f(x;D))^{2}]$     $=E_{D}[f(x;D)-\bar{f}+\bar{f}-y_{D}]$     $=E_{D}[(f(x;D)-\bar{f})^{2}] +E_{D}[(\bar{f}-y_{D})^{2}]+E_{D}[2(f(x;D)-\bar{f})(\bar{f}-y_{D})]$    $=E_{D}[(f(x;D)-\bar{f})^{2}]+E_{D}[(\bar{f}-y_{D})^{2}]$    $=E_{D}[(f(x;D)-\bar{f})^{2}]+E_{D}[(\bar{f}-y+y-y_{D})^{2}]$    $=E_{D}[(f(x;D)-\bar{f})^{2}]+E_{D}[(\bar{f}-y)^{2}]+E_{D}[(y-y_{D})^{2}]+2E_{D}[(\bar{f}-y)(y-y_{D})]$   

机器学习:数据清洗和特征选择

孤街醉人 提交于 2019-12-06 07:01:23
数据清洗和特征选择 数据清洗 清洗过程 数据预处理: 选择数据处理工具:数据库、Python相应的包; 查看数据的元数据及数据特征; 清理异常样本数据: 处理格式或者内容错误的数据; 处理逻辑错误数据:数据去重,去除/替换不合理的值,去除/重构不可靠的字段值; 处理不需要的数据:在进行该过程时,要注意备份原始数据; 处理关联性验证错误的数据:常应用于多数据源合并的过程中。 采样: 数据不均衡处理:上采样、下采样、SMOTE算法 样本的权重问题 数据不平衡 在实际应用中,数据的分布往往是不均匀的,会出现"长尾现象",即绝大多数的数据在一个范围/属于一个类别,而在另外一个范围或者类别中,只有很少一部分数据。此时直接采用机器学习效果不会很好,因此需要对数据进行转换操作。 长尾效应: 解决方案01 设置损失函数的权重, 使得少数类别数据判断错误的损失大于多数类别数据判断错误的损失 ,即:当我们的少数类别数据预测错误的时候,会产生一个比较大的损失值,从而导致模型参数往让少数类别数据预测准确的方向偏。 可通过设置sklearn中的class_weight参数来设置权重。 解决方案02 下采样/欠采样(under sampling): 从多数类中随机抽取样本从而减少多数类别样本数据 ,使数据达到平衡的方式。 集成下采样/欠采样:采用普通的下采样方式会导致信息丢失

简单的数据预处理和特征工程

烈酒焚心 提交于 2019-12-06 05:34:16
本文参考《数据科学家联盟》饼干文章。 一、无量纲化:最值归一化、均值方差归一化及sklearn中的Scaler 在量纲不同的情况下,不能反映样本中每一个特征的重要程度时,将需要使用归一化方法。 一般来说解决方法为 把所有的数据都映射到同一个尺度(量纲)上。 1、常用的数据归一化有两种: 最值归一化(normalization) : 把所有数据映射到0-1之间。最值归一化的使用范围是特征的分布具有明显边界的(分数0~100分、灰度0~255),受outlier的影响比较大 均值方差归一化(standardization): 把所有数据归一到均值为0方差为1的分布中。适用于数据中没有明显的边界,有可能存在极端数据值的情况. 2、sklearn中的Scaler 建模时要将数据集划分为训练数据集&测试数据集。 训练数据集进行归一化处理,需要计算出训练数据集的均值mean_train和方差std_train。 问题是:我们在对测试数据集进行归一化时,要计算测试数据的均值和方差么? 答案是否定的。在对测试数据集进行归一化时,仍然要使用训练数据集的均值train_mean和方差std_train。这是因为测试数据是模拟的真实环境,真实环境中可能无法得到均值和方差,对数据进行归一化。只能够使用公式 (x_test - mean_train) / std_train 并且,数据归一化也是算法的一部分

BN

自古美人都是妖i 提交于 2019-12-05 23:53:55
参考:https://www.cnblogs.com/eilearn/p/9780696.html 机器学习领域有个很重要的假设: 独立同分布假设,就是假设训练数据和测试数据是满足相同分布的 ,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。那BatchNorm的作用是什么呢? BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。   思考一个问题:为什么传统的神经网络在训练开始之前,要对输入的数据做Normalization?原因在于神经网络学习过程 本质上是为了学习数据的分布 ,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;另一方面,一旦在mini-batch梯度下降训练的时候,每批训练数据的分布不相同,那么网络就要在每次迭代的时候去学习以适应不同的分布,这样将会大大降低网络的训练速度,这也正是为什么我们需要对所有训练数据做一个Normalization预处理的原因。   为什么深度神经网络随着网络深度加深,训练起来越困难,收敛越来越慢?这是个在DL领域很接近本质的好问题。很多论文都是解决这个问题的,比如ReLU激活函数,再比如Residual Network, BN本质上也是解释并从某个不同的角度来解决这个问题的。 1、“Internal Covariate Shift”问题   从论文名字可以看出