sklearn中文文档,洞察——风格注意力网络(SANet)在任意风格迁移中的应用
sklearn中文文档,洞察——风格注意力网络(SANet)在任意风格迁移中的应用详细介绍
本文目录一览: 分析技术 建立预测模型及模型的ROC曲线绘制
2020/5/27,受一名同学所托,为他的肿瘤Hub基因分析文章做一个预测模型和模型的ROC曲线、AUC值来验证Hub基因的可靠性。如果Hub基因有意义的话,用Hub基因作为特征建立的预测模型就应该能有效地分类癌组织或者正常组织。
本文结构如下:
首先,数据清洗和Hub基因筛选,他们已经把Hub基因找到了,换句话说可以直接跳过数据清洗和特征工程阶段。
一共10个关键基因,分为三类,高恶度癌(3)、低恶度癌(2)、正常对照组织(1),分别为9、20、20个样本。
首先创建两个.txt文件分别储存图2的特征值内容和标签内容,features.txt 和 label_2.txt(当然也可以直接用Pandas读取表格,个人习惯)然后用Python读入数据。
我在这里定义了一个函数,需要用主函数设置which_class,选择绘制哪一类的ROC
ROC、AUC、micro/macro-average ROC curve的理论部分可以看这个 ROC理论 ,本节简要解读一下多类别ROC图的结果:
这个是直接三分类的训练集:测试集=1:1的ROC曲线,class0代表鉴别正常组织和两种癌组织,class1代表鉴别低恶度癌和另外两种组织,class2代表鉴别高恶度癌和另外两种组织,可以看出class2的AUC值为1,表明Hub基因建立的模型确实可以有效鉴别ATC和另外两种预后较好的组织。
[1] sklearn中文官方文档:支持向量机
[2] Receiver Operating Characteristic (ROC)
[3] Receiver Operating Characteristic (ROC) with cross validation
sklearn文档 — 1.2. 线性与二次判别分析法
线性判别分析法( discriminant_analysis.LinearDiscriminantAnalysis ) 和二次判别分析法( discriminant_analysis.QuadraticDiscriminantAnalysis ) 是两种经典的分类器。正如他们的名字所示,分别为线性的与二次决策面。 这两种方法很具有吸引力,因为他们拥有容易计算,并且本质是多类的闭合解,提供了在无超参数情况下的良好性能。
这个绘图展示了线性与二次判别分析法各自的决策边界。第二行展示了线性判别分析法只能得出一个线性的边界,而二次判别分析法能够得到一个更灵活的二次边界。
discriminant_analysis.LinearDiscriminantAnalysis 能够同来执行监督降维,通过把输入数据到投影由最大化类间隔(空间)的方向的线性子空间(在下面的数学部分会讨论其确切含义)。让输出的维数个数比类的个数少是必要的,所以这通常是一个相当巨大的维数降维,并且只在多类中才有效。 discriminant_analysis.LinearDiscriminantAnalysis.transform 的实现使得可以通过设置构造器参数** n_components **来设置所需的维度。但是这个参数丝毫不会影响 discriminant_analysis.LinearDiscriminantAnalysis.fit 或 discriminant_analysis.LinearDiscriminantAnalysis.predict 。
LDA(线性判别分析法)和QDA(二次判别分析法)能够使用一个简单的概率模型来分别派生出。这个模型是关于每一类** k 中关于数据概率 P(X|y = k) 的条件分布。然后可以通过使用贝叶斯来获得预测结果:
为了了解LDA在降维中的是如何应用的,根据上面解释的LDA分类规则开始几何重构是有必要的。我们定义** K 作为目标类的总数。自从在LDA里,我们定义所有的类拥有相同的被估计出的协方差 Σ **,我们可以重缩放输入数据以使得将其定义为如下:
然后可以表明在缩放之后对数据点进行分类等效于获得估计类平均值** μk^* ,其在欧氏距离上最靠近数据点。但是这一点可以通过投影到由所有类的均值 μk^* 生成的仿射 K - 1 子空间之后完成。这表明其是内置在LDA分类器中,通过线性投影在 K - 1 维度空间上的降维操作。 我们可以进一步的降低更多的维度,为了选出 L ,可以通过投影在线性子空间 HL ,其使得投影后, μk^* 的方差最大化(实际上,我们正在为被转换的类均值 μk^* 提供一种PCA的形式)。在 discriminant_analysis.LinearDiscriminantAnalysis.transform 函数, L 在这函数中代表的是 n_components **参数。可以查看 [3] 来获得更多的细节。
收缩是一个用于提高估量协方差矩阵的工具,其中训练集的数据是比特征的数量要小。在这种情况下,经验样本协方差是一种不好的估计。收缩LDA可以通过在 discriminant_analysis.LinearDiscriminantAnalysis 类中设置** shrinkage 参数为 auto 。这样会在通过引入Ledoit and Wolf [4] 的论点后,以分析的方式自动选出合适的收缩参数。但要注意的是,当前的收缩只适合在 solver 参数设置为 'lsqr' ** 或 ** 'eigen' **时有效。
**shrinkage **参数同样也可以手动设置为[0, 1]之间的值。尤其是值设置为0时代表着不收缩(其意味着会使用经验样本协方差矩阵)。和值设置为1时对应着完全收缩(其意味着方差的对角矩阵会被用来作为协方差矩阵的估计)。设置其之间值(即(0, 1))将会估计出对应的协方差矩阵的收缩。
默认的求解器是** 'svd' 。它可以执行分类和变换,并且不依赖协方差矩阵的计算。这一特性在应对大量特征数量时是一个优点,但 'svd' **求解器却无法进行收缩。
**'lsqr' **求解器是一个对于分类问题是十分有效的算法(只能处理分类问题),并且其支持收缩。
**'eigen' 求解器是基于类散射与类散射比之间的最优值。他可以处理分类和变换问题,同时也支持收缩。但是, 'eigen' **求解器需要计算器协方差矩阵,所以它在处理大量特征的情况下可能不是一个好选择。
(在尝试翻译这篇文档的时候难免会因为各种问题而出现错翻,如果发现的话,烦请指出,谢谢> <)
假设检验:使用p值来接受或拒绝你的假设
作者|GUEST 编译|VK 来源|Analytics Vidhya
检验是统计学中最基本的概念之一。不仅在数据科学中,假设检验在各个领域都很重要。想知道怎么做?让我们举个例子。现在有一个lifebuoy沐浴露。
沐浴露厂商声称,它杀死99.9%的细菌。他们怎么能这么说呢?必须有一种测试技术来证明这种说法是正确的。所以假设检验用来证明一个主张或任何假设。
这个博客将这些概念分解成小部分,这样你就能理解它们的动机和用途。当你读完这个博客,假设检验的基础知识就会很清楚了!!
假设是关于参数值(均值、方差、中值等)的陈述、假设或主张。
比如说,如果我们说“多尼是有史以来最好的印度队长”,这是一个假设,我们是根据他担任队长期间球队的平均输赢情况做出的。我们可以根据所有的匹配数据来测试这个语句。
零假设是在假设为真的前提下,检验假设是否可能被拒绝。类似无罪的概念。我们假定无罪,直到我们有足够的证据证明嫌疑人有罪。
简单地说,我们可以把零假设理解为已经被接受的陈述,例如,天空是蓝色的。我们已经接受这个声明。
替代假设补充了零假设。它与原假设相反,替代假设和原假设一起覆盖了总体参数的所有可能值。
让我们用一个例子来理解这一点:
一家肥皂公司声称他们的产品平均杀死99%的细菌。为了检验这家公司的主张,我们将提出零和替代假设。
零假设(H0):平均值等于99%
替代假设(H1):平均值不等于99%。
注意:当我们检验一个假设时,我们假设原假设是真的,直到样本中有足够的证据证明它是假的。在这种情况下,我们拒绝原假设而支持替代假设。
如果样本不能提供足够的证据让我们拒绝零假设,我们不能说零假设是真的,因为它仅仅基于样本数据。零假设成立需要研究整个总体数据。
当一个假设指定了参数的精确值时,这是一个简单的假设,如果它指定了一个值的范围,则称为复合假设。例如
如果替代假设在两个方向(小于和大于)给出了在零假设中指定的参数值的替代,则称为双尾检验。
如果替代假设只在一个方向(小于或大于)给出了在零假设中指定的参数值的替代,则称为单尾检验。例如
根据H1,平均值可以大于或小于100。这是一个双尾检验的例子
同样,
在这里,平均值不到100。这叫做单尾检验。
拒绝域是样本空间中的拒绝区域,如果计算值在其中,那么我们就拒绝零假设。
让我们用一个例子来理解这一点:
假设你想租一套公寓。你从不同的真实国家网站列出了所有可用的公寓。你的预算是15000卢比/月。你不能再花那么多钱了。你所订的公寓清单的价格从7000/月到30000/月不等。
你从列表中随机选择一个公寓,并假设以下假设:
现在,既然你的预算是1.5万,你必须拒绝所有高于这个价格的公寓。
在这里所有价格超过15000成为你的拒绝域。如果随机公寓的价格在这个区域,你必须拒绝你的零假设,如果公寓的价格不在这个区域,你就不能拒绝你的零假设。
根据替代假设,拒绝域位于概率分布曲线的一条或两条尾巴上。拒绝域是与概率分布曲线中的截止值相对应的预定义区域。用α表示。
临界值是将支持或拒绝零假设的值分隔开的值,并根据alpha进行计算。
稍后我们将看到更多的例子,我们将清楚地知道如何选择α。
根据另一种假设,拒绝域出现了三种情况:
案例1 )这是一个双尾检验。
案例2 )这种情况也被称为左尾检验。
案例3 )这种情况也被称为右尾检验。
因此,第一类和第二类错误是假设检验的重要课题之一。让我们把这个话题分解成更小的部分来简化它。
一个假正例(I型错误) ——当你拒绝一个真的零假设时。
假负性(II型错误) ——当你接受一个错误的零假设时。
例子:
这个人因犯有入室盗窃罪而被捕。由法官组成的陪审团必须裁定有罪或无罪。
H0 :人是无辜的
H1 :人有罪
第一类错误是如果陪审团判定某人有罪[拒绝接受H0],尽管此人是无辜的[H0是真的]。
第二类错误将是当陪审团释放该人[不拒绝H0]虽然该人有罪[H1是真的]。
为了理解这个话题,让我们考虑一个例子:假设有一家糖果厂每天生产500克的糖果。工厂维修后的一天,一名工人声称他们不再生产500克的糖果,可能是少了或多了。
那么,这名工人凭什么宣称这一错误?那么,我们应该在哪里画一条线来决定糖果条重量的变化呢?这一决定/界限在统计学上具有重要意义。
顾名思义,我们有多自信:我们在做决定时有多自信。LOC(置信水平)应大于95%。不接受低于95%的置信度。
显著性水平,用最简单的术语来说,就是当事实上是真的时,错误地拒绝零假设的临界概率。这也称为I型错误率。
这是I类错误的概率。它也是拒绝域的大小。
一般来说,在测试中,它是非常低的水平,如0.05(5%)或0.01(1%)。
如果H0在5%的显著性水平上没有被拒绝,那么我们可以说我们的零假设是正确的,有95%的把握。
假设我们在1%的显著性水平上进行假设检验。
H0:平均值
<x (我们只是假设一个单尾检验的情况。)
我们得到临界值(基于我们使用的测试类型),发现我们的测试统计值大于临界值。因此,我们必须在这里拒绝零假设,因为它位于拒绝域。
如果零假设在1%时被拒绝,那么可以肯定的是,在更高的显著性水平上,比如5%或10%,它会被拒绝。
如果我们的显著性水平低于1%,那么我们是否也必须拒绝我们的假设呢?
是的,有可能发生上述情况,而“p值”正在发挥作用。
p值是可以拒绝零假设的最小显著性水平。
这就是为什么现在很多测试都给出p值,而且它更受欢迎,因为它给出的信息比临界值更多。
p值决策
我们比较p值和显著性水平(alpha)对零假设做出决定。
原文链接: https://www.analyticsvidhya.com/blog/2020/07/hypothesis-testing-68351/
欢迎关注磐创AI博客站: http://panchuang.net/
sklearn机器学习中文官方文档: http://sklearn123.com/
欢迎关注磐创博客资源汇总站: http://docs.panchuang.net/
用直方图和箱线图理解数据
作者|Rashida Nasrin Sucky
编译|VK
来源|Towards Data Science
理解这些数据并不意味着只得到平均值、中位数和标准差。很多时候,了解数据的可变性、传播或分布是很重要的。直方图和箱线图都有助于提供有关数据集的大量额外信息,有助于理解数据。
直方图只从数据集中获取一个变量,并显示每次出现的频率。我将使用一个简单的数据集来学习直方图如何帮助理解数据集。我会用python来制作图片。导入数据集:
此数据集显示Cartweel数据。假设,办公室里的人决定去野餐时参加手推车距离竞赛。上面的数据集显示了结果。让我们了解一下数据。
1.做一个“Age”的柱状图。
从上面的图片可以看出,大多数人都在30岁以下。只有一个人39岁,一个人54岁。
2.查看“CWDistance”的分布
很漂亮的阶梯。很难说哪个波段的频率最高。
3.有时将两个分布图一起绘制可以很好地理解。在同一图中绘制“Height”和CWDistance”。
从这张照片上看,我们不能说高度和距离之间有关系。
现在看,我们可以从箱线图中提取什么样的信息。
方框图显示了数据的分布和更详细的信息。它更清楚地显示了异常值:最大值、最小值、四分位数(Q1)、第三四分位数(Q3)、四分位数范围(IQR)和中值。你可以从IQR中计算出中间的50%。
它还提供了有关数据倾斜度、数据闭合程度和数据分布的信息。
让我们看一些使用Cartwheel数据的例子。
1.画一个“Score”的箱线图。
从这个图片,我们可以说,
2.在同一个箱线图中绘制两个变量有助于理解其中一个变量如何影响另一个变量。在同一个图中绘制CWDistance和“Glasses”以查看Glasses是否对CWDistance有任何影响。
没有戴眼镜的人的中位数比戴眼镜的人高。不戴眼镜的人的总体范围较低,但IQR值较高。
从上图来看,IQR的范围是72到94。但对于戴眼镜的人来说,CWDistance的总体范围更大,而IQR则在66到90之间,这比不戴眼镜的人要小。
3.对于分别戴眼镜和不戴眼镜的人来说,CWDistance的柱状图可以提供更多的理解。
从这张照片上看,戴眼镜的人的最大频率是在CWDistance的开始。glasses对CWDistance的影响还需要进一步的研究。建立一个置信区间可能会有帮助。
我希望这篇文章能给你一些关于箱线图和柱状图的附加信息。
更多阅读建议:
原文链接: https://towardsdatascience.com/understanding-the-data-using-histogram-and-boxplot-with-example-425a52b5b8a6
欢迎关注磐创AI博客站:
http://panchuang.net/
sklearn机器学习中文官方文档:
http://sklearn123.com/
欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/
NumPy解释线性代数
作者|Soner Y?ld?r?m 编译|VK 来源|Towards Data Science
机器学习和深度学习模型需要大量的数据。它们的性能在很大程度上取决于数据量。因此,我们倾向于收集尽可能多的数据,以建立一个稳健和准确的模型。数据以多种不同的格式收集,从数字到图像,从文本到声波。然而,我们需要将数据转换为数字以便对其进行分析和建模。
仅仅将数据转换为标量(单个数字)是不够的。随着数据量的增加,使用标量的操作开始变得低效。我们需要向量化或矩阵运算来有效地进行计算。这就是线性代数发挥作用的地方。
线性代数是数据科学领域的重要课题之一。在这篇文章中,我们将通过使用NumPy的例子来介绍线性代数的基本概念。
线性代数中的对象(或数据结构)类型:
标量就是一个数字。我们将在下面的示例中看到,它可以用于向量化操作。
向量是一组数字。例如,5个元素的向量:
我们可以在向量化运算中使用标量。对向量的每个元素执行指定的操作。例如
矩阵是二维向量
它看起来像是一个包含行和列的pandas数据框。实际上,pandas数据帧被转换成矩阵,然后输入到机器学习模型中。
张量是一个N维数数组,其中N大于2。张量主要用于输入数据为三维的深度学习模型。
很难用数字来表示,但是可以把T看成3个3x2形状的矩阵。
shape方法可用于检查numpy数组的形状。
数组的大小是通过乘以每个维度的大小来计算的。
如果行数等于列数,矩阵称为方阵。因此,上面的矩阵A是一个方阵。
单位矩阵,表示为I,是一个方阵,对角线上有是,其他位置全是0。NumPy的identity函数可以用来创建任意大小的单位矩阵。
一个单位矩阵的特殊之处在于矩阵乘上它不会改变。从这个意义上讲,它与实数中的数字1相似。我们将在这篇文章的矩阵乘法部分用单位矩阵做例子。
矩阵的逆矩阵是与原始矩阵相乘得到单位矩阵的矩阵。
不是每个矩阵都有一个逆矩阵。如果矩阵A有一个逆矩阵,那么它被称为可逆或非奇异
点乘和矩阵乘法是复杂机器学习和深度学习模型的组成部分,因此对它们进行全面的了解是非常有价值的。
两个向量的点积是元素相对于其位置的乘积之和。第一个向量的第一个元素乘以第二个向量的第一个元素,依此类推。这些积的和就是点积。在NumPy中计算点积的函数是 dot() 。
让我们首先以numpy数组的形式创建两个简单的向量并计算点积。
点积计算为(1*2)+(2*4)+(3*6),即28。
在数据科学领域,我们主要处理矩阵。矩阵是一组以结构化方式组合的行和列向量。因此,两个矩阵的相乘涉及向量的许多点积运算。我们再看一些例子就会更清楚了。我们先用NumPy创建两个2x2矩阵。
2x2矩阵有2行2列。行和列的索引以0开头。例如,A(索引为0的行)的第一行是[4,2]的数组。A的第一列是[4,0]的数组。第一行和第一列的元素是4。
我们可以访问单个行、列或元素,如下所示:
这些是理解矩阵乘法的重要概念。
两个矩阵的相乘涉及到第一个矩阵的行和第二个矩阵的列之间的点乘。第一步是A的第一行和B的第一列之间的点积。这个点积的结果是在位置[0,0](即第一行,第一列)处得到的矩阵的元素。
因此,得到的矩阵C在第一行和第一列将有一个 (4*0) + (2*4) 。C[0,0]=18。
下一步是A的第一行和B的第二列的点积。
C在第一行和第二列有一个(4*0)+(2*4)。C[0,1]=8。
第一行A已完成,因此我们从A的第二行开始,并遵循相同的步骤。
C在第二行和第一列有一个(0*4)+(3*1)。C[1,0]=3。
最后一步是A的第二行和B的第二列之间的点积。
C在第二行和第二列有一个(0*0)+(3*4)。C[1,1]=12。
我们已经看到它是如何一步一步完成的。所有这些操作都是用 np.dot 操作:
你可能还记得,我们已经提到过,单位矩阵乘以任何矩阵时不会改变矩阵。让我们举个例子。
我们还提到,当一个矩阵乘以它的逆矩阵时,结果就是单位矩阵。让我们先创建一个矩阵,然后求它的逆矩阵。我们可以利用NumPy函数 linalg.inv() 求矩阵的逆。
用B的逆矩阵C乘以B:
我们得到了单位矩阵。
正如我们在向量点积中回忆的那样,两个向量的长度必须相同才能有一个点积。矩阵乘法中的每个点积运算都必须遵循这个规则。点积是在第一个矩阵的行和第二个矩阵的列之间进行的。因此,第一个矩阵的行和第二个矩阵的列的长度必须相同。
矩阵乘法的要求是第一个矩阵的列数必须等于第二个矩阵的行数。
例如,我们可以用一个3x2矩阵乘以一个2x3矩阵。
结果矩阵的形状将是3x3,因为我们对A的每一行进行3点积运算,A有3行。确定结果矩阵形状的一种简单方法是从第一个矩阵中提取行数,从第二个矩阵中提取列数:
我们已经讨论了线性代数的基本运算。这些基本操作是复杂机器学习和深度学习模型的构建基础。在模型优化过程中,需要进行大量的矩阵乘法运算。因此,了解基础知识也是非常重要的。
谢谢你的阅读。如果你有任何反馈,请告诉我。
原文链接: https://towardsdatascience.com/linear-algebra-for-data-scientists-explained-with-numpy-6fec26519aea
欢迎关注磐创AI博客站: http://panchuang.net/
sklearn机器学习中文官方文档: http://sklearn123.com/
欢迎关注磐创博客资源汇总站: http://docs.panchuang.net/
数据科学统计学:什么是偏度?
简单分析一下,答案如图所示
作者|ABHISHEK SHARMA 编译|VK 来源|Analytics Vidhya
偏度的概念已融入我们的思维方式。当我们看到一个图像时,我们的大脑会直观地分辨出图表中的模式。
你可能已经知道,印度有超过50%的人口在25岁以下,65%以上的人口在35岁以下。
如果你画出印度人口年龄的分布图,你会发现在分布的左边有一个凸起,而右边是相对平坦的。换言之,我们可以说有个偏度倾向于末端。
所以,即使你没有读过数据科学或分析专业人士的偏度,你肯定已经在非正式上与这个概念进行了互动。
在统计学中,这实际上是一个相当简单的话题,然而很多人在匆忙学习其他看似复杂的数据科学概念的过程中匆匆浏览了一下这个概念。对我来说,这是个错误。
偏度是数据科学和分析领域的每个人都需要知道的一个基本统计学概念。这是我们无法逃避的。我相信你会在这篇文章的结尾理解这一点。
在这里,我们将以最简单的方式讨论倾斜的概念。你将了解偏度、它的类型以及它在数据科学领域中的重要性。
所以,系好安全带,因为你会学到一个在你整个数据科学职业生涯中都会重视的概念。
偏度是理想对称概率分布不对称性的度量,由三阶标准矩给出。如果这听起来太复杂了,别担心!我来给你解释一下。
简言之,偏度是衡量随机变量的概率分布偏离正态分布的程度。现在,你可能会想,为什么我在这里谈论正态分布?
正态分布是没有任何偏度的概率分布。你可以看看下面的图片,它显示了对称分布,基本上是正态分布,你可以看到虚线两边是对称的。除此之外,还有两种类型的偏度:
尾巴在右边的概率分布是正偏态分布,尾巴在左边的概率分布是负偏态分布。如果你觉得上面的数字令人困惑,没关系。我们稍后会更详细地了解这一点。
在此之前,让我们来了解为什么偏度对于作为数据科学专业人士的你来说是如此重要的概念。
现在,我们知道偏度是不对称性的度量,它的类型是由概率分布尾巴所在的那一边来区分的。但是为什么知道数据的偏度很重要呢
首先,线性模型假设自变量和目标变量的分布相似。因此,了解数据的偏度有助于我们创建更好的线性模型。
其次,让我们看看下面的分布。它是汽车的马力分布:
你可以清楚地看到上面的分布是正偏度的。现在,假设你想把这个作为模型的一个特性,它可以预测汽车的mpg(英里/加仑)。
因为我们的数据在这里是正偏度的,这意味着它有更多的低值数据点,也就是说,马力较小的汽车。
因此,当我们根据这些数据训练我们的模型时,它将在预测低马力汽车的mpg方面表现得比那些高马力的汽车更好。
另外,偏度告诉我们异常值的方向。你可以看到我们的分布是正偏度的,并且大多数异常值都出现在分布的右侧。
注意:偏度并不能告诉我们异常值的数量。它只告诉我们方向。
现在我们知道了为什么偏度很重要,让我们来了解一下我之前给你们看的分布。
是的,我们又回到正态分布了。
正态分布被用作确定分布的偏度度的参考。正如我前面提到的,理想的正态分布是几乎没有偏度的概率分布。它几乎完全对称。因此,正态分布的偏度值为零。
但是,为什么它几乎完全对称而不是绝对对称?
这是因为,事实上,没有一个真实的数据完全符合正态分布。因此,偏度的值不完全为零;它几乎为零。虽然零值被用作确定分布的偏度度的参考。
你可以在上图中看到,同一条线表示平均值、中值和众数。这是因为完全正态分布的平均值、中值和众数是相等的。
到目前为止,我们已经用概率或频率分布来理解正态分布的偏度。现在,让我们用箱线图来理解它,因为这是在数据科学领域观察分布的最常见的方法。
上图是对称分布的箱线图。你会注意到Q1和Q2之间的距离是相等的,即:
但这还不足以得出一个分布是否倾斜的结论。我们还看一下线的长度;如果它们相等,那么我们可以说分布是对称的,也就是说,它不是倾斜的。
既然我们已经讨论了正态分布中的偏度,现在是时候了解一下我们前面讨论过的两种类型的偏度了。让我们从正偏度开始。
正偏态分布是尾部在右侧的分布。正偏态分布的偏度值大于零。你可能已经通过观察这个数字了解到,平均值是最大的,然后是中位数,然后是众数。
为什么会这样?
好吧,答案是,分布的尾巴在右边;它导致平均值大于中值,平均值最终向右移动。此外,众数出现在分布的最高频率,即中位数的左侧。因此, 众数
<中位数<平均值 。
在上面的框线图中,你可以看到Q2靠近Q1。这代表了一个正偏态分布。根据四分位数,可以通过以下公式得出:
在这种情况下,很容易判断数据是否倾斜。但是如果我们有这样的图呢:
这里,Q2-Q1和Q3-Q2是相等的,但是分布是正偏度的。你们当中目光敏锐的人会注意到右线的长度大于左线的长度。由此,我们可以得出结论,数据是正偏度的。
所以,第一步总是检查Q2-Q1和Q3-Q2的相等性。如果这是相等的,那么我们寻找线的长度。
正如你可能已经猜到的,负偏态分布是尾巴位于左侧的分布。负偏态分布的偏度值小于零。你还可以在上图中看到 均值
<中值<众数 。
在箱线图中,负偏度四分位数之间的关系由以下公式给出:
与我们之前所做的类似,如果Q3-Q2和Q2-Q1相等,那么我们寻找线的长度。如果左线的长度大于右线的长度,那么我们可以说数据是负偏度的。
既然你知道倾斜数据会对机器学习模型的预测能力产生多大影响,那么最好将倾斜数据转换为正态分布数据。以下是一些可以转换倾斜数据的方法:
注 :转换的选择取决于数据的统计特性。
在本文中,我们讨论了偏度的概念、它的类型以及它在数据科学领域中的重要性。我们在概念层面上讨论了偏度,但是如果你想更深入地研究,下一步你可以探索它的数学部分。
原文链接: https://www.analyticsvidhya.com/blog/2020/07/what-is-skewness-statistics/
欢迎关注磐创AI博客站: http://panchuang.net/
sklearn机器学习中文官方文档: http://sklearn123.com/
欢迎关注磐创博客资源汇总站: http://docs.panchuang.net/
</中值
</中位数
洞察——风格注意力网络(SANet)在任意风格迁移中的应用
作者|dhwani mehta
编译|Flin
来源|medium
图像风格化是近几十年来研究的一种图像处理技术,本文旨在展示一种高效新颖的风格注意力网络(SANet)方法,在平衡全局和局部风格模式的同时,保留内容结构,合成高质量的风格化图像。
有没有想象过如果由杰出的艺术家来制作照片,照片看起来会怎样?任意风格迁移通过将内容图像(目标图像)与风格图像(其纹理即画笔描边,角度几何形状,图案,颜色过渡等需要绘制到内容图像的图像)混合,从而将其变为现实,以生成第三幅从未见过的图像。
任意风格迁移的最终目标是实现概括性,并保持质量和效率。
在平衡全局和局部风格模式以及由于以下原因而保留内容结构:
整个风格迁移机制可以总结如下:
让我们逐步了解整个体系结构,最后获得全方位的概览。
让我们尝试解开整个架构,以更好地了解:
解决风格迁移问题的最重要步骤是编码器-解码器机制。预训练的VGG-19网络对一个图像进行编码,形成一个表示形式,然后传递给解码器,该解码器尝试将原始输入图像重新构造回去。
SANet体系结构将来自VGG-19编码器的内容和风格图像的输入作为特征图,并对其进行规范化后,转换为特征空间,以计算内容和风格特征图之间的关注度。
预训练的VGG-19用于计算损失函数,以便按以下方式训练解码器:
完整的损失计算公式
关于内容和风格损失计算的一个构想:
SANet中内容和风格损失组件的计算概述
由于具有新颖的特征损失功能,SANet体系结构能够保留内容结构并丰富样式模式。
SANet中特征损失计算的概述
计算相同输入图像在没有任何风格空白的情况下的损失,使得特征损失同时实现内容结构和风格特征的维护。
实验显然表明,使用SANet进行风格迁移所获得的结果将解析各种风格,
例如全局颜色分布,纹理和局部风格,同时保持内容的结构。同样,SANet在区分内容结构和与每个语义内容相对应的迁移风格方面也很有用。因此可以推断出,SANet不仅在保持内容结构方面很有效,而且在保留风格结构特征方面也很有效,并且可以轻松地融合风格特征,从而丰富了全局风格和局部风格统计信息。
[1]朴大英和李光熙。“通过关注风格的网络进行任意风格的迁移。” IEEE计算机视觉与模式识别会议论文集。2019。
[2] Gatys,Leon A.,Alexander S. Ecker和Matthias Bethge。“使用卷积神经网络进行图像风格迁移。” IEEE计算机视觉和模式识别会议论文集。2016。
[3] Huang,Xun和Serge Belongie。“通过自适应实例标准化实时进行任意风格迁移。” IEEE国际计算机视觉会议论文集。2017。
[4]李一军,等。“通过特征转换实现通用风格迁移。” 神经信息处理系统的研究进展。2017。
[5]盛路,等。“头像网:通过特征装饰进行多尺度零镜头风格转移。” IEEE计算机视觉与模式识别会议论文集。2018。
原文链接: https://medium.com/visionwizard/insight-on-style-attentional-networks-for-arbitrary-style-transfer-ade42e551dce
欢迎关注磐创AI博客站:
http://panchuang.net/
sklearn机器学习中文官方文档:
http://sklearn123.com/
欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/
20 newsgroups数据介绍以及文本分类实例
20 newsgroups 数据集18000篇新闻文章,一共涉及到20种话题,所以称作 20 newsgroups text dataset ,分文两部分:训练集和测试集,通常用来做文本分类.
sklearn提供了该数据的接口: sklearn.datasets.fetch_20newsgroups ,我们以sklearn的文档来解释下如何使用该数据集。
我们可以看到一共有20类:
我们看下数据 newsgroups_train 的一些属性
fetch_20newsgroups 的参数设置:
我们从输出可以看出,提取的TF-IDF 向量是非常稀疏的,超过30000维的特征才有159个非零特征
数据集地址: http://www.cs.cmu.edu/afs/cs.cmu.edu/project/theo-20/www/data/news20.html
sklearn关于20newsgroup的介绍 http://scikit-learn.org/stable/datasets/twenty_newsgroups.html
sklearn score函数怎么有负数
那么就代表使用KFold分类方式,如果不指定的话,最主要的函数是如下函数, raw target,分别在其上面算出各自的validation error.shape[0]
gt。如果cv是一个int数字的话.;linear#39., 1. test_size=0.;..; scores
array([ 1。但是其他的划分方法调用起来和前两个稍有不同(但是都是一样的);gt,如果没有提供raw target参数, C=1)
gt.96.cross_val_score(clf:
gt,下面以ShuffleSplit方法为例说明;gt. clf, 0, random_state=0)
gt。我们必须好多次的随机的划分train data和test data,可以是任何的分类器,那么就代表使用StratifiedKFold分类方式,在test data上得到的分类的准确率;gt.
array([ 0,然后得到一个validation error,是用clf默认自带的准确率算法, cv=5;linear#39, 0.对于原始数据我们要将其一部分分为train data,还有其他很多种划分方法..ShuffleSplit(n_samples。clf = svm..;gt, 1, cv=5)
。
cross_val_score具体使用例子见下.SVC(kernel=#39; cross_validation,就作为衡量这个算法好坏的标准; n_samples = raw_data。
cross validation是在数据量有限的情况下的非常好的一个evaluate performance的方法。
cross_val_score函数的返回值就是对于每次不同的的划分raw data时。因为这样存在偶然性., C=1)
cv参数就是代表不同的cross validation的方法了.;gt:
gt, raw data, raw target;gt, n_iter=3..。train data用于训练. ,
.SVC(kernel=#39.3,根据这一组validation error。至于准确率的算法可以通过score_func参数指定,我们不可能只做出随机的划分一次train和test data, score_func=None)
参数解释。
而对原始数据划分出train data和test data的方法有很多种。将一个算法作用于一个原始数据.
gt。他的调用形式是scores = cross_validation, 0。
sklearn中的cross validation模块.:
clf是不同的分类器.9 .cross_validation; scores = cross_validation..96, raw data, 0 ])
除了刚刚提到的KFold以及StratifiedKFold这两种对raw data进行划分的方法之外;gt.:
sklearn,这也就造成了cross validation的方法有很多种.cross_val_score(clf, raw data,就可以较好的准确的衡量算法的好坏。比如支持向量机分类器,一部分分为test data.97;; cv = cross_validation;gt, raw target。这样就有一组validation error。
还有其他的一些参数不是很重要, cv=cv)
.cross_val_score。在test data上测试的结果叫做validation error;gt..;gt.; clf = svm..,test data用于测试准确率,并且如果提供了raw target参数.cross_val_score(
.97
下面是官方文档给出的为什么会有负数的解释(score函数说明中加粗部分),希望可以帮到你。
def score(self, X, y, sample_weight=None):
"""Returns the coefficient of determination R^2 of the prediction.The coefficient R^2 is defined as (1 - u/v), where u is the residualsum of squares ((y_true - y_pred) ** 2).sum() and v is the totalsum of squares ((y_true - y_true.mean()) ** 2).sum().The best possible score is 1.0 and it can be negative (because the model can be arbitrarily worse). A constant model that alwayspredicts the expected value of y, disregarding the input features,would get a R^2 score of 0.0.
协同过滤,矩阵分解有感
????这个概念经常在机器学习的文章中看到,但由于接触不久,所以一直都是一知半解,没有好好了解过。
? ? 首先从字面上理解,“协同”需要一个“集体“,“过滤”就应该是晒选的意思,那么协同过滤总的来说就是通过“集体”来“筛选”,以评分推荐系统为例子,这里的“协同”我个人理解就是集合”众多人的评价”,这里的“评价”,就是“对集体都接触过的事物进行打分”,这样大概就能通过一些共同的事物反应出用户不同的”价值观“,然后通过这样的价值观来”筛选“出价值观高度相似的人,再相互推荐共同都喜爱的东西。那么这样的推荐就很有可能是大家都需要的。
? ? 经过资料洗礼过后,得知cf现在的两大方向,一种是以记忆为基础(Memory-base),另一种是基于模型(Model-based Collaborative Filtering)。
????普及的比较多的前者,它基于关注的目标,又分为基于用户的协同过滤和基于项目的协同过滤,上面举的一个简单的评分推荐系统的例子就可以说是基于用户的协同过滤,它是通过用户对共同物品的“主观价值”来筛选相似用户,再互补评分高的商品,从而达到推荐商品的目的;那么基于项目的意思就是通过这个用户集体对商品集的评价,在物品的角度上去寻找相似度高的物品,达到推荐商品的效果。虽然针对的目标不通,但以我个人理解,大体上都是依赖这个用户集营造的“价值观”,只不过区别在于,基于用户的CF是“关心”各个用户的“主观价值”上的“区别”,而基于项目的CF则是要基于这整个用户集对项目集的“普世价值观”,来甄别出“物品”上的差异。不知道这么比喻恰不恰当哈,“普世”我这边理解就是“大多数”,是一种整体趋势的意思。价值观比较“抽象”的话,再直接点这里的“价值观”就相当于物理中的“参考系”。
????但是以上两种方法在面对,不是每个用户对大多数商品都做出过评价(数据稀疏)时就无能为力,所以基于这个问题就引导出了基于模型(Model-based )的CF,我在最近的论文中接触到的就是一个“矩阵分解”的协同过滤,它能够基于现有的数据得到一个模型,再用此模型进行推荐。那么是如何做到的呢?接下来看看矩阵分解。
? ? 假设我先在有一个关于用户对音乐评分的矩阵如下图:
????只有上述的数据是很难使用户相互推荐音乐的,因为可以看出用户本身听过的歌就不够多,那么如何使数据更加“饱满”呢?这时正是需要矩阵分解的时候,矩阵分解算法的数学理论基础是矩阵的行列变换。行列变换中又有以下规则,我们知道矩阵A进行行变换相当于A左乘一个矩阵,矩阵A进行列变换等价于矩阵A右乘一个矩阵,因此矩阵A可以表示为A=PEQ=PQ(E是标准阵)。
? ? 形象的表示如下图:
????矩阵分解的目的就是把一个稀疏的用户评分矩阵分解成用户因子矩阵和项目因子矩阵相乘的形式R=U(转置)*I,我们的目的就是最后再让两个因子矩阵反乘回去得到饱满的用户评分矩阵。那么这个用户,项目因子是个什么东西呢?我们接着上面的音乐评分的形式说,一首歌可能包含多种音乐风格,我们可以量化风格,体现各种风格在一首歌中的比重,那么这里的“潜在因子”我们就可以当作“音乐风格”,K个因子就可以看作K种风格。譬如下图:
????可以说,这些因子就是我们的模型中的重要参数,个人理解分解出来的这两个因子矩阵就可以说是基于模型的CF中的,“模型”的了,其实我觉得可以类比线性模型中的参数,我们的回归模型最终重要的不就是公式中的各项参数吗,这两个因子矩阵其实就是我们这个模型中的重要参数,参数知道了模型也就求出来了。如果不了解线性模型可以参考吴恩达大大的机器学习课程,里面介绍的很详细,不像我这边一知半哈。
????那么这些个值具体是怎么得出来的呢?过程和求线性回归也很像,接下来就是相关的简单推倒,首先,我们假设,真实的用户评分和我们预测评分的差遵循高斯分布
R用是评分矩阵 ? U是用户因子矩阵,V是项目因子矩阵
接下来就是极大似然估计,使,在现有数据下概率最大化
????类比求线性模型,就能够了解思想很相似,所以应该同样是运用了似然估计的思想,要使值最大,式子两边同时取对数,可以看到,如果要使概率最大,那么公式的第一项就要最小,是不是想到了什么,没错接下来就可以看到最小二乘法的式子。
? ? 线性模型我们遇到这个情况一般怎么做,没错,就是梯度下降。首先求偏导数
最后就是梯度下降的矩阵因子更新公式:
????接下来迭代到自己设置的阈值收敛就能得到局部最优解了。
????下面是我根据上述矩阵分解的思想随机的模拟实践,可以自行感受一下准度,可能写搓了点~
注释:以上诸多图片材料来自网上多篇博客文章
https://www.zhihu.com/question/26743347
http://blog.csdn.net/dream_angel_z/article/details/46288167
还有方便实用sklearn的中文API文档
http://cwiki.apachecn.org/pages/viewpage.action?pageId=10030193