机器学习
文章平均质量分 60
一步一步深入迷人的领域
楚歌汉水
这个作者很懒,什么都没留下…
展开
-
人工创造数据
如果我们的模型是低方差的,那么获得更多的数据用于训练模型,是能够有更好的效果的。问题在于,我们怎样获得数据,数据不总是可以直接获得的,我们有可能需要人工地创 造一些数据。 以我们的文字识别应用为例,我们可以字体网站下载各种字体,然后利用这些不同的字体配上各种不同的随机背景图片创造出一些用于训练的实例,这让我们能够获得一个无限大的训练集。这是从零开始创造实例。 另一种方法是,利用已有的数据,然后对其进行修改,例如将已有的字符图片进行一些扭曲、旋转、模糊处理。只要我们认为实际数据有可能和经过这样原创 2021-07-01 20:18:01 · 162 阅读 · 0 评论 -
任务流程图,上限分析
一、任务流程图任务流程图在我们的机器学习中是十分重要的,它可以帮助我们理顺思路,并且辅助分析。下面我们以图像文字识别的例子来说明。给定一张图片,如下所示:为了识别出图片中的文字,需要采取如下的步骤:1.文字侦测(Text detection)-----将图片上的文字与其他环境对象分离开2.字符切分(Character segmentation)-----将文字分割成一个个单一的字符3.字符分类(Character classification)-----确定每一个字符是什么原创 2021-07-01 19:08:33 · 459 阅读 · 1 评论 -
大规模机器学习,梯度下降,在线学习,映射简化
一、m的选择大规模机器学习,顾名思义,就是数据集特别大,一般 m 为亿级别,假设 m = 10亿,我们以线性回归为例,每一次梯度下降,我们都需要计算训练集的误差平方和,如下:如果我们的学习算法需要20次迭代,显然计算代价十分的大。我们先简单地考虑一下,能不能只用数据集的一小部分来训练学习算法,比如 m =1000,或许就能获得不错的效果。我们用学习曲线观察来判断是否可以选择小点的 m,如下:左边是高方差,可以增大数据集来降低代价。右边是高偏差,可以增加数据集的特征数量来降低代价。原创 2021-07-01 17:38:53 · 294 阅读 · 0 评论 -
推荐系统,协同过滤算法
推荐系统,顾名思义,就是推荐东西。无论是视频网站,比如爱奇艺、腾讯视频,还是销售网站,比如淘宝、京东,都需要向用户推荐视频或者商品,而如何向用户推荐所喜欢的视频或者商品,这就需要建立一个良好的推荐系统。没有好的推荐系统,那么这个网站很难在现在的互联网大环境下生存下去。一、推荐系统下面从一个例子开始定义推荐系统的问题。假使我们是一个电影供应商,我们有5部电影和4个用户,我们要求用户为电影打分,如下:前三部是爱情片,后三部则是动作片。我们可以看出Alice和Bob似乎更倾向于爱情片,而C原创 2021-06-30 11:33:02 · 415 阅读 · 0 评论 -
多元高斯分布与AD
前面已经提到了高斯分布与在异常检测中的运用。现在再来谈谈多元高斯分布。一、为什么用到了多元高斯分布?假设我们有两个相关的特征,而且这两个特征的值域范围比较宽,这种情况下,一般的高斯分布模型可能不能很好的识别异常数据。其原因在于,一般的高斯分布模型尝试的是去同时抓住两个特征的偏差(从p(x) = p(x1) * p(x2) 就可以看出),因此创造出一个比较大的判定边界。下图中是两个相关特征,洋红色的线(根据 ε 的不同其范围可大可小, ε 越小,包含的范围越大)是一般的的高斯分布模型获得的判定边界原创 2021-06-30 09:31:38 · 115 阅读 · 0 评论 -
异常检测AD,高斯分布的运用
异常检测(Anomaly Detection),以下简称AD,是机器学习算法的一个常见应用。它虽然主要用于非监督学习问题,但从某些角度看,它又类似于一些监督学习问题。一、什么是AD?为了解释AD,下面举一个例子。假设生产出飞机引擎,需要进行QA(Quality Assurance质量保证,关注的是对质量的检测,通过改进细节提高质量),我们测量了飞机引擎的一些特征变量,比如引擎运转时产生的热量,或者引擎的振动等等。而我们生产了m个引擎,那么就有了一个数据集。如下图所示:将这些数据绘制成图标原创 2021-06-29 17:58:26 · 1494 阅读 · 0 评论 -
PCA算法
前面已经提到了PCA初理解,现在继续阐述PCA算法。一、求解新特征向量PCA将数据从 n 维降至 k 维,需要分几步走:第一步,均值归一化。计算出所有特征的均值,然后令。如果特征是在不同的数量级上,我们还需要将其除以标准差 σ² 。第二步,计算协方差矩阵(covariance matrix)Σ:第三步,计算协方差矩阵Σ的特征向量(eigenvedctors):在 Octave 里我们可以利用奇异值分解(singular value decomposition)来求解,函数如下:[原创 2021-06-28 20:49:13 · 2969 阅读 · 0 评论 -
降维,PCA--初理解
一、什么是降维有一个数据集有很多很多特征,在这里绘制两个特征:x1为长度,cm为单位;x2也为长度,尺寸为单位。很明显,两个特征高度线性相关,两个都作为特征明显是多余的,而且由于测量时的误差和精度等问题,两则又是不一样的,所以很难舍弃一个特征而用另一个。为此需要将这两个特征变为一个特征,即将二维数据将至一维。如下图所示:既然是高度线性相关,那么就可以绘制出一条直线,将每一个样本点投射到直线上,对应直线上的位置便是一维特征值 z 。注意,是投影,即样本点向直线做垂线,垂点就是 z 。这就.原创 2021-06-28 17:34:02 · 3157 阅读 · 0 评论 -
非监督学习--k-means
一、非监督学习与聚类算法与监督学习不同,在非监督学习中,我们的数据没有附带任何标签,我们拿到的数据就是这样的:从图中可以看出,样本点都是一样的,没有附带任何标签y。在非监督学习中,我们需要将一系列无标签的训练数据,输入到一个算法中,找出数据集中的内在结构。在上图中,数据可以分成两个点集(称为簇),一个能够区分这两个点集的算法,就被称为聚类算法。聚类算法是非监督学习算法中的一种。聚类算法的用途广泛,如下图所示:二、K-means(K-均值)算法--初理解k-均值是最普及的聚..原创 2021-06-27 19:23:46 · 572 阅读 · 1 评论 -
使用支持向量机
在实际运用中,很少有人动手实现解决SVM最优化的问题,因为已经有研究者做了很多年的数值优化了,我们再动手实现得不偿失。有很多好用的SVM软件包,比如libnear和libsvm。有了SVM软件包,我们不再过多关心目标函数最优化的问题,只需要重点考虑核函数的选择。除了以前经常用到的高斯核函数之外,我们还有其他一些选择,如:多项式核函数(Polynomial Kernel)字符串核函数(String kernel)卡方核函数(chi-square kernel)直方图交集核函数(hist原创 2021-06-27 11:31:29 · 159 阅读 · 0 评论 -
核函数(2)
我们紧接上一节核函数(1),在本节中讨论一些细节。上一节中,用到了地标L,那么如何选择地标呢?通常是根据训练集的数量选择地标的数量,即若训练集中有m个实例,则我们选取m个地标,并且令:。这样做的好处在于:现在我们得到的新特征是建立在原有特征与训练集中所有其他特征之间距离的基础之上,即:于是,我们就可以将核函数运用到SVM中,修改我们的SVM假设为:给定x,计算新特征 f ,当时,预测 y=1,否则反之。相应的修改代价函数为:在具体实施过程中,我们还需对最后的正则化项.原创 2021-06-27 10:27:08 · 180 阅读 · 0 评论 -
核函数(1)
上图中,很明显,无法用直线作为决策边界,需要用到高次的多项式模型。比如在这里,我们用一系列新的特征 f 来替换模型中的每一项。例如令:f1=x1,f2=x2,f3=x1x2,f4=x1²...从而得到。这是对原有的特征进行组合,我们可以利用核函数来计算新的特征。给定一个训练实例,我们利用 x 的各个特征与我们事先选定的地标(landmarks)的近似程度来选取新的特征f1,f2,f3。为了表示方便,这里假定有两个特征x1,x2。如下图所示:例如,f1的计算公式为:,其中:,为...原创 2021-06-27 09:36:43 · 185 阅读 · 0 评论 -
SVM背后的数学
了解一些SVM背后的数学原理,可以对SVM的优化问题,以及如何得到大间距分类器,产生更好的理解。看下图:其实背后的数学原理十分简单,无非就是向量的模 || u ||(也称范数,长度,欧几里得长度),公式为,向量的内积,即,v向量投影在u向量上的长度p,即 || v || * cosθ ,θ为两向量之间的夹角,可以看出p是有正负的。由此我们得到了我们熟悉的公式,最终得到。我们先回顾SVM的目标函数,如下:为了便于理解,对式子做一些修改。如下:为了方便,忽略截距,即令,这样更...原创 2021-06-26 18:48:00 · 325 阅读 · 1 评论 -
SVM,大间距分类器?
我们先来看看SVM模型的目标函数从坐标曲线可以看出,当y=1时,我们希望,而不仅仅是>=0,这样一来cost1降到了最低,为0。同样,当y=0时,我们希望,而不仅仅是<0,这样一来cost2降到了最低,为0。这说明了支持向量机的要求更高,这就相当于在SVM中嵌入了一个额外的安全因子,或者说安全的间距因子。接下来,我们看看这个间距因子会有什么样的影响。如果C非常大,则最小化代价函数的时候,我们希望找到一个使得第一项A为0的 最优解。也就是说我们想,当训练样本标签为y..原创 2021-06-26 17:35:00 · 244 阅读 · 0 评论 -
支持向量机SVM---初理解
与逻辑回归和神经网络相比,支持向量机(Support Vector Machine,简称SVM),在学习复杂的非线性方程时提供了一种更为清晰,更加强大的方式。SVM属于监督学习算法。本文将从逻辑回归开始展示如何一点一点修改来得到本质上的支持向量机SVM。逻辑回归的假设函数如下图所示:逻辑回归的代价函数如下图所示:很明显,在上图中的代价函数,只是一个样本的代价函数,而我们想要观察,当 y =1时,左边式子大小的变化情况,当 y=0时,右边式子大小的变化情况。从图中可以看出,当 ..原创 2021-06-26 16:25:13 · 564 阅读 · 4 评论 -
量化数值评估,查准率和召回率
我们想知道通过采取一个方法,是否使得误差变小。如果有一个量化的数值评估,通过这个数字的大小,我们可以得到误差变大了还是变小了。在这里,推荐大家在交叉验证集上实现误差分析,而不是在测试集上。那么怎么选择一个量化数值评估,也就是合适的误差度量值。例如我们希望用算法来预测癌症是否是恶性的,在我们的训练集中,只有0.5%的实例是恶性肿瘤。假设我们编写一个非学习而来的算法,在所有情况下都预测肿瘤是良性的,那么误差只有0.5%。然而我们通过训练而得到的神经网络算法却有1%的误差。这时,误差的大小是不能视为评判算原创 2021-06-25 19:16:49 · 949 阅读 · 2 评论 -
快速构建学习算法
针对某个问题,我们想要建立一个良好的模型进行解决,我们会尝试很多种办法。甚至一开始就花费大量的精力去构建一个非常复杂的系统,这是不好的,因为这样不仅花费大量的时间,而且最终的效果不确定,也就是说选择的这个方向到底对不对。为了解决以上疑问,我们通常先构建一个简单地算法系统,即使运行的不完美,但是也把他运行一遍,最后通过交叉验证来检验数据。做完之后,我们就可以通过我们所学的学习曲线,来找出算法是否具有高偏差和高方差问题,或者别的问题。这样分析之后,再来决定用六种方法的哪一种方法来解决出现的问题,比如增加训练原创 2021-06-25 18:02:05 · 305 阅读 · 0 评论 -
解决偏差和方差的方法
我们已经知道了,什么是偏差和方差,以及什么情况下是偏差和方法,也就是说我们有了学习曲线这样的评判标准。有了评判标准,我们可以尝试一些方法,看看哪一个有助于改进学习算法,而那些是徒劳的?根据学习过的内容,我们可以得到一下六种方法,分别解决不同的问题。1.获得更多的训练实例 ------ 解决高方差;2.尝试减少特征的数量-------解决高方差;3.尝试获得更多的特征-------解决高偏差;4.尝试增加多项式特征-------解决高偏差;5.尝试减少正则化程度 λ------解决高.原创 2021-06-25 17:21:36 · 1495 阅读 · 0 评论 -
学习曲线,偏差和方差
对于学习算法,我们不能直观或者想当然的认为,哪种算法好,哪种算法差,也不能直观判断某一个算法是否处于偏差、方差问题。对此,我们可以用学习曲线来检验学习算法。学习曲线是将训练集误差和交叉验证误差作为训练集实例数量 m 的函数绘制的图标。从事机器学习相关领域的人,都常说,训练集越大,训练出的模型越精确,那么事实是否真是如此?假如我们有500个数据,先从小往大增加数据个数,训练模型。当训练较少数据时,训练出的模型能较好地拟合训练数据,训练误差低,但是不能训练出的模型不能很好地拟合验证集或者测试集,误差较高。随原创 2021-06-25 16:53:14 · 722 阅读 · 1 评论 -
正则化和 高偏差与高分差 之间的关系
在训练模型的过程中,我们经常使用正则化方法来防止过拟合,但是,当正则化参数的大小选择不当,也会引起高偏差和高分差的问题,如下图所示:从图中可以看出,当正则化参数 λ取得很大时,会使权重w很小,也就会造成不能取到合适的值,从而使得出现欠拟合的情况。当 λ取得很小时,会使得权重w可以取得大范围的值甚至任意值,也就会尽可能拟合样本点,从而使得出现过拟合的情况。于是,我们需要考虑 λ的取值。我们采取2倍增长的方式,来尝试不同的λ值,用训练集得到模型,用验证集得到验证误差,我们选择验证误...原创 2021-06-25 12:36:07 · 200 阅读 · 0 评论 -
高偏差与高方差
首先,要明白一点,高偏差High bias就是欠拟合underfit,高方差High variance就是过拟合overfit,如下图所示:从图示,我们当然可以明显看出区别,区分出哪一个是高偏差 ,哪一个是高方差。但是,这只是肉眼所观察到的,对于计算机而言,需要一个标准,来进行区分,看图是看出不来的。这就用到了训练集和验证集。从图中可以看到,随着函数的最高次越来越大,训练集拟合效果越来越好,训练误差越来越低,而得到的模型应用到验证集,其验证误差先有大变小,再由小变大,其原因就是,一开始次数.原创 2021-06-25 12:00:12 · 990 阅读 · 1 评论 -
训练集,验证集与测试集
训练集train set ,验证集validation set 或者说是交叉验证集cross validation set,测试集test set。一、只用训练集倘若将整个数据集当作训练集,来拟合数据。假设函数可能是一次、二次、三次甚至更多次,如下图所示:那么其中一个假设函数使相应的损失函数为最低时,这个假设函数可能就是我们想要的,但是我们要考虑其中的一种情况,那就是出现过拟合的状况。如下如所示:当然,这个假设函数,在这个数据集中,其对应的损失函数是最低的。但是,当不再是这个数据集.原创 2021-06-24 15:57:56 · 2270 阅读 · 0 评论 -
梯度下降实现逻辑回归
首先,逻辑回归并不是用于解决回归问题,而是分类问题。逻辑回归自然要用到逻辑函数原创 2021-06-08 11:22:18 · 127 阅读 · 0 评论 -
正规方程实现线性回归
由 X * W = y 可得W = ( X’ X)-1 X’ y 这便是正规方程import numpy as npimport pandas as pdimport osdef regularization(X,y): temp1 = np.dot( X.transpose() , X ) temp2 = np.linalg.pinv(temp1) temp3 = np.dot( temp2,X.transpose() ) W = ...原创 2021-06-07 22:12:15 · 436 阅读 · 0 评论 -
梯度下降实现线性回归
单变量即一个特征 n = 1权重个数 = n + 一个偏置 = n + 1X = [1,x]' # 变量为 n+1 维向量W = [w0,w1]' # 权重为 n+1 维向量h = w0 + w1 * x = W' * X #假设函数J = 1/(2m) * Σi=1,m (hi - yi)^2 # 损失函数ΔJ / Δw0 = 1/m * Σi=1,m (hi - yi) # 对 w0 求导ΔJ / Δw1 = 1/m * Σi=1,m (hi - y...原创 2021-06-07 21:40:46 · 93 阅读 · 0 评论