测试access数据库缺省值中有缺省怎么处理 分类模型

LibSVM分类的实用指南 - zhazhiqiang2010的专栏 - CSDN博客
LibSVM分类的实用指南
【图像】SVM
【原文:】
译者注:简单翻译了台湾林智仁教授的文章《A Practical Guide to Support Vector Classification》,未经作者同意,没有版权;同时翻译仅供自己学习之用,不严谨,有错误,还请大家指出。
原文地址:。译者博客:。
SVM(support vector machine)是一项流行的分类技术。然而,初学者由于不熟悉SVM,常常得不到满意的结果,原因在于丢失了一些简单但是非常必要的步骤。在这篇文档中,我们给出了一个简单的操作流程,得到合理的结果。(译者注:本文中大部分SVM实际指的是LibSVM)
1 入门知识
SVM是一项非常实用的数据分类技术。虽然SVM比起神经网络(Neural Networks)要相对容易一些,但对于不熟悉该方法的用户而言,开始阶段通常很难得到满意的结果。这里,我们给出了一份指南,根据它可以得到合理结果。
需要注意,此指南不适用SVM的研究者,并且也不保证一定能够获得最高精度结果。同时,我们也没有打算要解决有挑战性的或者非常复杂的问题。我们的目的,仅在于给初学者提供快速获得可接受结果的秘诀。
虽然用户不是一定要深入理解SVM背后的理论,但为了后文解释操作过程,我们还是先给出必要的基础的介绍。一项分类任务通常将数据划分成训练集和测试集。训练集的每个实例,包含一个“目标值(target value)”(例如,分类标注)和一些“属性(attribute)”(例如,特征或者观测变量)。SVM的目标是基于训练数据产出一个模型(model),用来预测只给出属性的测试数据的目标值。
给定一个训练集,“实例-标注”对,,支持向量机需要解决如下的优化问题:
在这里,训练向量xi通过函数Φ被映射到一个更高维(甚至有可能无穷维)空间。SVM在这个高维空间里寻找一个线性的最大间隔的超平面。C&0是分错项的惩罚因子(penalty parameter of the error term)。被称之为核函数(kernel
function)。新的核函数还在研究中,初学者可以在SVM书中找到如下四个最基本的核函数:(线性、多项式、径向基函数、S型)
表1是一些现实生活中的实例。这些数据集是由我们的用户提供的,其开始时无法获得理想精度的结果。使用了本指南描述的过程后,我们帮助他们获得了更好的性能。
这些数据集都在:
1.2 建议流程
许多初学者使用如下的步骤:
·&&将数据转换成SVM程序包的格式
·&&随机的尝试一些核函数和参数
而我们建议初学者先尝试如下的步骤:
·&&将数据转换成SVM格式包的格式
·&&对数据进行简单的缩放处理(scaling)
·&&考虑RBF核:
·&&使用交叉验证(cross-validation)寻找最佳参数C和Υ
·&&使用最佳参数C和Υ来训练整个训练集
值得一提的是,最佳参数是受数据集的大小影响的,但在实践中,从交叉验证中获得的最佳参数已经适用于整个训练集。
后面章节,我们将具体探讨这些步骤。
2 数据预处理
2.1 类别特征
SVM需要每个实例的特征集,是用实数向量表示。因此,如果存在类别属性,我们首先将它们转变成数值。推荐使用m个数值特征来表示m类的属性。每个数值表示其中一个类别为1,其它类为0。例如,一个三类属性{red, green, blue},可以表示成{0,0,1},{0,1,0},{1,0,0}。我们的经验表明,如果属性的数值不是太大,这样分解成多特征比直接将类别属性当做数值使用的效果要稳定。
应用SVM之前,缩放是非常重要的。Sarle的神经网络FAQ的第二部分(1997)阐述了缩放的重要性,大多数注意事项也适用于SVM。缩放的最主要优点是能够避免大数值区间的属性过分支配了小数值区间的属性。另一个优点能避免计算过程中数值复杂度。因为关键值通常依赖特征向量的内积(inner products),例如,线性核和多项式核力,属性的大数值可能会导致数值问题。我们推荐将每个属性线性缩放到区间[-1,+1]或者[0,
当然,我们必须使用同样的方法缩放训练数据和测试数据。例如,假设我们把训练数据的第一个属性从[-10, +10]缩放到[-1, +1],那么如果测试数据的第一个属性属于区间[-11, +8],我们必须将测试数据转变成[-1.1, +0.8]。附录B中有一个实例可参考。
3 模型选择
虽然章节一中只有四个常用核函数,但我们必须决定哪一个是首选。然后是惩罚因子C和核参数的选择。
通常而言,RBF核是合理的首选。这个核函数将样本非线性地映射到一个更高维的空间,与线性核不同,它能够处理分类标注和属性的非线性关系。并且,线性核是RBF的一个特例(Keerthi and Lin 2003),因此,使用一个惩罚因子C的线性核与某些参数(C,γ)的RBF核具有相同的性能。同时,Sigmoid核的表现很像一定参数的RBF核(Lin and Link 2003)。
第二个原因,超参数(hyperparameter)的数量会影响到模型选择的复杂度(因为参数只能靠试验呀!)。多项式核比RBF核有更多的超参数。
最后,RBF核有更少的数值复杂度(numerical difficulties)。一个关键点0&Kij&=1对比多项式核,后者关键值需要 infinity(rxiTxj+r&1)或者zero(rxiTxj+r&1),这是高阶运算。此外,我们必须指出sigmoid核在某些参数下不是合法的(例如,不是两个向量的内积)。(Vapnik 1995)
当然,也存在一些情形RBF核是不适用的。特别地,当特征维数非常大的时候,很可能只能适用线性核。在附录C中有详细探讨。
3.2 交叉验证和网格搜索
RBF核有两个参数:C和γ。对于给定的问题,我们无法事先知道哪个C和γ是最佳的;因此,一些模型选择(参数搜索)是必不可少的。目标是确定good(C,γ),使得分类器能够精确地预测未知数据(例如,测试数据)。然而这不一定对获得高准确率训练有好处。如上讨论,通常的做法是将数据集合划分成两部分,其中一部分假设是未知分类的。从“未知”数据集上获得的预测准确率可以更精确地反映出分类器在独立数据集合上的性能/效果。这种做法的一个改进版本就是交叉验证(cross-validation)。
在v折交叉验证(v-fold cross-validation)中,我们首先将训练集合划分成相同大小的v个子集。然后将其中一个子集作为测试集,其他v-1个子集作为训练集训练分类器。如此,整个训练集中的每个实例都会被预测一次,因此,交叉验证的准确率等于能够被正确分类的数量百分比。
交叉验证的方法能够避免过拟合(overfitting)问题。图1通过一个二分类问题来说明这个问题。实心圆和三角是训练数据,而空心圆和三角是测试数据。在图1a和1b中的分类器的测试准确率不好就是因为它对训练数据过拟合了。如果我们考虑将图1a和1b的训练和测试数据分别作为交叉验证的训练和校验集合,显然这个准确率是不好的。另一方面,在图1c和1d的分类器则没有对训练数据过拟合,从而能够得到更好的测试准确率和交叉验证的准确率。
在使用交叉验证的方法确定参数C和γ时,我们推荐一种“网格搜索”(grid-search)。不同的参数值对(C,γ)被试验着,其中一个能够得到最高的交叉验证准确率。我们发现使用一些指数增长序列的C和γ是一个确定好参数的很实用技巧(例如,C=2-5,2-3,...,215, γ=2-15,2-13,...,23)。
网格搜索是一个简单且朴素的方法。事实上,有其他更高级的方法可以节省计算成本,例如近似逼近交叉验证率(approximating the cross-validation rate)。然而,有两个原因让我们更倾向于这个简单的网格搜索方法。
一方面,在心理上,我们会觉得通过近似法或者启发式而不没有详细的参数搜索的方法不安全。另一方面,网格搜索寻找最佳参数的计算时间并不会比其他高级方法多很多,主要是因为只有两个参数需要确定。进一步而言,网格搜索能够很容易并行化(因为每个(C,γ)是独立的)。许多高级方法是一个迭代过程(例如walking along a path),很难并行化。
由于做一次完整的网格搜索还是挺费时的,所以我们推荐首先使用一个粗糙的网格。在确定网格中一个“更好”区域后,可以在这个区域中执行更好的网格搜索。为了更好说明,我们做了一个实验,数据集来自german from the Statlog collection(Michie et al., 1994)。在对数据集缩放之后,我们先使用一个粗糙的网格(如图2),找到最好的(C,γ)是(23,2-5),交叉验证的正确率能够达到77.5%。然后,我们在(23,2-5)临近区域进行了一次更好的网格搜索(如图3),获得了一个更好的交叉验证的正确率77.6%,参数为(23.25,2-5.25)。在最好的(C,γ)找到以后,可以在整个训练集上再次训练产出最终的分类器。&
上述的方法对于上千或更多数据规模的问题上能够工作的很好。而对于超大数据集合而言,一个可行的方法是随机抽取一个子集,运行网格搜索,找到最佳区域,然后在该区域上针对数据全集进行网格搜索。
在某些情况下,上述方法不一定足够好,因此其他技术如特征选取可能就不可少了。而这些议题超出本指南的范畴了。我们的实验表明,这个方法在特征不是很多的情况下能够工作的很好。如果有几千维的属性,那么在使用SVM时可能就需要先选取属性的子集了。
5 附录A:推荐过程的实例
在这个附录中我们使用了一般初学者通常使用的推荐过程来比较了准确率。实验使用LIBSVM软件,处理表1中提到的三个问题。对于每个问题,我们首先给出直接训练和测试的准确率。其次,我们展示一下在是否有缩放之后的准确率差异。从2.2节中讨论的,训练数据的属性的区间必须保存,如此我们才能够在缩放了测试数据之后还能够还原。第三,给出了使用了推荐步骤(包括缩放和模型选择)后的准确率。最后,我们示范了一下使用LIBSVM的工具自动处理整个过程。注意,一个类似的参数选择工具grid.py在R-LIBSVM中也是可利用的。
5.1 天文粒子物理 (Astroparticle Physics)
原始数据集,使用缺省参数:
$ ./svm-train svmguide1
$ ./svm-predict svmguide1.t svmguide1.model svmguide1.t.predict
àAccuracy = 66.925%
缩放数据集,只使用缺省参数:
$ ./svm-scale -l -1 -u 1 -s range1 svmguide1 & svmguide1.scale
$ ./svm-scale -r range1 svmguide1.t & svmguide1.t.scale
$ ./svm-train svmguide1.scale
$ ./svm-predict svmguide1.t.scale svmguide1.scale.model svmguide1.t.predict
àAccuracy = 96.15%
缩放数据集并且进行参数选择(tools目录下有grid.py):
$ python grid.py svmguide1.scale
2.0 2.0 96.8922
(Best: C=2.0, γ=2.0 with five-fold cross-validation rate=96.8922%)
$ ./svm-train -c 2 -g 2 svmguide1.scale
$ ./svm-predict svmguide1.t.scale svmguide1.scale.model svmguide1.t.predict
àAccuracy = 96.875%
使用自动脚本:
$ python easy.py svmguide1 svmguide1.t
Scaling training data...
Cross validation...
Best c=2.0, g=2.0
Training...
Scaling testing data...
Testing...
Accuracy = 96.875% () (classification)
5.2 生物信息学(Bioinformatics)
原始数据集使用缺省参数:
$ ./svm-train -v 5 svmguide2
àCross Validation Accuracy = 56.5217%
缩放数据集只使用缺省参数:
$ ./svm-scale -l -1 -u 1 svmguide2 & svmguide2.scale
$ ./svm-train -v 5 svmguide2.scale
àCross Validation Accuracy = 78.5166%
缩放数据集且使用参数选择:
$ python grid.py svmguide2.scale
2.0 0.5 85.1662
àCross Validation Accuracy = 85.1662%
(Best C=2.0, γ=0.5 with five fold cross-validation rate=85.1662%)
使用自动脚本:
$ python easy.py svmguide2
Scaling training data...
Cross validation...
Best c=2.0, g=0.5
Training...
5.3 交通工具(Vehicle)
原始数据集,使用缺省参数:
$ ./svm-train svmguide3
$ ./svm-predict svmguide3.t svmguide3.model svmguide3.t.predict
àAccuracy = 2.43902%
缩放数据集,只使用缺省参数:
$ ./svm-scale -l -1 -u 1 -s range3 svmguide3 & svmguide3.scale
$ ./svm-scale -r range3 svmguide3.t & svmguide3.t.scale
$ ./svm-train svmguide3.scale
$ ./svm-predict svmguide3.t.scale svmguide3.scale.model svmguide3.t.predict
àAccuracy = 12.1951%
缩放数据集,并使用参数选择:
$ python grid.py svmguide3.scale
128.0 0.125 84.8753
(Best C=128.0, γ=0.125 with five-fold cross-validation rate=84.8753%)
$ ./svm-train -c 128 -g 0.125 svmguide3.scale
$ ./svm-predict svmguide3.t.scale svmguide3.scale.model svmguide3.t.predict
! Accuracy = 87.8049%
使用自动脚本:
$ python easy.py svmguide3 svmguide3.t
Scaling training data...
Cross validation...
Best c=128.0, g=0.125
Training...
Scaling testing data...
Testing...
Accuracy = 87.8049% (36/41) (classification)
6 附录B:缩放训练和测试数据时的常见错误
第2.2节中已经强调了对训练数据和测试数据要使用相同缩放比例因子的重要性。这里我们给出一个实际例子:交通信号灯的分类问题。数据可以在LIBSVM中获取。
如果训练集合测试集被分别缩放到[0,1]区间,则结果的准确率低于70%。
$ ../svm-scale -l 0 svmguide4 & svmguide4.scale
$ ../svm-scale -l 0 svmguide4.t & svmguide4.t.scale
$ python easy.py svmguide4.scale svmguide4.t.scale
Accuracy = 69.2308% (216/312) (classification)
而对训练集和测试集使用相同的缩放比例因子,我们能够获得高的多的准确率。
$ ../svm-scale -l 0 -s range4 svmguide4 & svmguide4.scale
$ ../svm-scale -r range4 svmguide4.t & svmguide4.t.scale
$ python easy.py svmguide4.scale svmguide4.t.scale
Accuracy = 89.4231% (279/312) (classification)
使用正确的设置,svmguide4.t.scale中的10个特征的最大值如下:
0.1, 0.3, 0.7, 0.0, 0.4
显然,前一个方法对测试集的缩放到[0,1]生成的是一个错误数据集。
7 附录C:何时使用线性核而不是RBF核
如果特征的数量很大,一种方法是没有必要将数据集映射到更高维空间。也就是说,非线性映射并不能够提升性能。使用线性核(linear kernel)已经足够好了,并且只需要搜索试验出一个参数C即可。3.1节中描述的RBF核能够至少和线性核一样好的观点是建立在已经搜索到合适的参数(C, γ)空间。
接下来,我们分成3部分进行探讨。
7.1 实例数 && 特征数
生物信息学中的许多微阵列数据都属于这类型。我们以一份数据为例:白血病数据(&)。其中训练集和测试集分别有38、34个实例,特征有7129个,远大于实例数。我们合并了两个文件,分别使用RBF核和线性核,来比较了交叉校验的准确率。
RBF核,带有参数选择过程:
$ cat leu leu.t & bined
$ python grid.bined
8.0 3.e-05 97.2222
(Best C=8.0, γ= 0: with five-fold cross-validation rate=97.2222%)
线性核,带有参数选择过程:
$ python grid.py -log2c -1,2,1 -log2g 1,1,1 -t bined
0.5 2.0 98.6111
(Best C=0.5 with five-fold cross-validation rate=98.61111%)
虽然grid.py是为RBF核设计的,但上面的方法也可以对线性核进行不同C的检测(-log2g 1,1,1实际上是设置了一个虚拟的γ)。
可以看到,使用线性核和RBF核其交叉验证的准确率是相当的。显然,当特征数非常大时,其中一种方式就是无需再映射数据了。
除了LIBSVM,在这个实例中,下文提到的LIBLINEAR也是非常有效的工具。
7.2 实例数和特征数都很大
这类数据通常出现在文本分类中。LIBSVM对这类问题不是非常好用。幸运的是,我们有另一款工具LIBLINEAR,非常适合这类数据。我们举例说明在文本分类中LIBSVM和LIBLINEAR的差异,数据集来自LIBSVM中的rcv1_train.binary。实例数有20242,特征数有47236个。
$ time libsvm-2.85/svm-train -c 4 -t 0 -e 0.1 -m 800 -v 5 rcv1_train.binary
Cross Validation Accuracy = 96.8136%
$ time liblinear-1.21/train -c 4 -e 0.1 -v 5 rcv1_train.binary
Cross Validation Accuracy = 97.0161%
使用5折交叉验证,LIBSVM花费了350秒,而LIBLINEAR只用了3秒。而且,LIBSVM花费了更多的内存,因为我们分配了一些空间用于存储最近使用的核元素(参照-m 800)。显而易见,在生成可比的准确率的模型时,LIBLINEAR比LIBSVM快的多。
LIBLINEAR对于大规模文本分类问题非常高效。让我们实验一个有677399个实例的大数据集合rcv1_test.binary。
$ time liblinear-1.21/train -c 0.25 -v 5 rcv1_test.binary
Cross Validation Accuracy = 97.8538%
注意读取数据就需要花费很多时间。而划分后的训练/校验时间是小于4秒的。
7.3 实例数 && 特征数
当特征数非常少,一种方式是将数据映射到更高维的空间上(例如使用非线性核)。然而,如果你实在想要使用线性核,那么你可以使用LIBLINEAR,选项“-s 2”。当特征数很少时,这个选项一般要比缺省(default)项“-s 1”快的多。数据实例:。实例数有581012个,远大于特征数54个。我们分别使用两个选项运行LIBLINEAR:
$ time liblinear-1.21/train -c 4 -v 5 -s 2 covtype.libsvm.binary.scale
Cross Validation Accuracy = 75.67%
$ time liblinear-1.21/train -c 4 -v 5 -s 1 covtype.libsvm.binary.scale
Cross Validation Accuracy = 75.6711%
显然使用“-s 2”选项训练时间可以短很多。
转载请注明出处:互联网旁观者~黄言之&
我的热门文章机器学习中的数据清洗与特征处理综述 - CSDN博客
机器学习中的数据清洗与特征处理综述
转自:/machinelearning-data-feature-process.html
随着美团交易规模的逐步增大,积累下来的业务数据和交易数据越来越多,这些数据是美团做为一个团购平台最宝贵的财富。通过对这些数据的分析和挖掘,不仅能给美团业务发展方向提供决策支持,也为业务的迭代指明了方向。目前在美团的团购系统中大量地应用到了机器学习和数据挖掘技术,例如个性化推荐、筛选排序、搜索排序、用户建模等等,为公司创造了巨大的价值。
本文主要介绍在美团的推荐与个性化团队实践中的数据清洗与特征挖掘方法。主要内容已经在内部公开课&机器学习InAction系列&讲过,本博客的内容主要是讲座内容的提炼和总结。
如上图所示是一个经典的机器学习问题框架图。数据清洗和特征挖掘的工作是在灰色框中框出的部分,即“数据清洗=&特征,标注数据生成=&模型学习=&模型应用”中的前两个步骤。
灰色框中蓝色箭头对应的是离线处理部分。主要工作是
灰色框中绿色箭头对应的是在线处理的部分。所做的主要工作和离线处理的类似,主要的区别在于1.不需要清洗标注数据,只需要处理得到特征数据,在线模型使用特征数据预测出样本可能的标签。2.最终生成数据的用处,最终生成的数据主要用于模型的预测,而不是训练。
在离线的处理部分,可以进行较多的实验和迭代,尝试不同的样本采样、样本权重、特征处理方法、特征组合方法等,最终得到一个最优的方法,在离线评估得到好的结果后,最终将确定的方案在线上使用。
另外,由于在线和离线环境不同,存储数据、获取数据的方法存在较大的差异。例如离线数据获取可以将数据存储在Hadoop,批量地进行分析处理等操作,并且容忍一定的失败。而在线服务获取数据需要稳定、延时小等,可以将数据建入索引、存入KV存储系统等。后面在相应的部分会详细地介绍。
本文以点击下单率预测为例,结合实例来介绍如何进行数据清洗和特征处理。首先介绍下点击下单率预测任务,其业务目标是提高团购用户的用户体验,帮助用户更快更好地找到自己想买的单子。这个概念或者说目标看起来比较虚,我们需要将其转换成一个技术目标,便于度量和实现。最终确定的技术目标是点击下单率预估,去预测用户点击或者购买团购单的概率。我们将预测出来点击或者下单率高的单子排在前面,预测的越准确,用户在排序靠前的单子点击、下单的就越多,省去了用户反复翻页的开销,很快就能找到自己想要的单子。离线我们用常用的衡量排序结果的AUC指标,在线的我们通过ABTest来测试算法对下单率、用户转化率等指标的影响。
特征使用方案
在确定了目标之后,下一步,我们需要确定使用哪些数据来达到目标。需要事先梳理哪些特征数据可能与用户是否点击下单相关。我们可以借鉴一些业务经验,另外可以采用一些特征选择、特征分析等方法来辅助我们选择。具体的特征选择,特征分析等方法我们后面会详细介绍。从业务经验来判断,可能影响用户是否点击下单的因素有:
在确定好要使用哪些数据之后,我们需要对使用数据的可用性进行评估,包括数据的获取难度,数据的规模,数据的准确率,数据的覆盖率等,
特征获取方案
Ok,在选定好要用的特征之后,我们需要考虑一个问题。就是这些数据从哪可以获取?只有获取了这些数据我们才能用上。否则,提一个不可能获取到的特征,获取不到,提了也是白提。下面就介绍下特征获取方案。
特征与标注数据清洗
在了解特征数据放在哪儿、怎样获取之后。下一步就是考虑如何处理特征和标注数据了。下面3节都是主要讲的特征和标注处理方法
标注数据清洗
首先介绍下如何清洗特征数据,清洗特征数据方法可以分为离线清洗和在线清洗两种方法。
样本采样与样本过滤
特征数据只有在和标注数据合并之后,才能用来做为模型的训练。下面介绍下如何清洗标注数据。主要是数据采样和样本过滤。
数据采样,例如对于分类问题:选取正例,负例。对于回归问题,需要采集数据。对于采样得到的样本,根据需要,需要设定样本权重。当模型不能使用全部的数据来训练时,需要对数据进行采样,设定一定的采样率。采样的方法包括随机采样,固定比例采样等方法。
除了采样外,经常对样本还需要进行过滤,包括
在分析完特征和标注的清洗方法之后,下面来具体介绍下特征的处理方法,先对特征进行分类,对于不同的特征应该有不同的处理方法。
根据不同的分类方法,可以将特征分为(1)Low level特征和High level特征。(2)稳定特征与动态特征。(3)二值特征、连续特征、枚举特征。
Low level特征是较低级别的特征,主要是原始特征,不需要或者需要非常少的人工处理和干预,例如文本特征中的词向量特征,图像特征中的像素点,用户id,商品id等。Low level特征一般维度比较高,不能用过于复杂的模型。High level特征是经过较复杂的处理,结合部分业务逻辑或者规则、模型得到的特征,例如人工打分,模型打分等特征,可以用于较复杂的非线性模型。Low level 比较针对性,覆盖面小。长尾样本的预测值主要受high level特征影响。 高频样本的预测值主要受low level特征影响。
稳定特征是变化频率(更新频率)较少的特征,例如评价平均分,团购单价格等,在较长的时间段内都不会发生变化。动态特征是更新变化比较频繁的特征,有些甚至是实时计算得到的特征,例如距离特征,2小时销量等特征。或者叫做实时特征和非实时特征。针对两类特征的不同可以针对性地设计特征存储和更新方式,例如对于稳定特征,可以建入索引,较长时间更新一次,如果做缓存的话,缓存的时间可以较长。对于动态特征,需要实时计算或者准实时地更新数据,如果做缓存的话,缓存过期时间需要设置的较短。
二值特征主要是0/1特征,即特征只取两种值:0或者1,例如用户id特征:目前的id是否是某个特定的id,词向量特征:某个特定的词是否在文章中出现等等。连续值特征是取值为有理数的特征,特征取值个数不定,例如距离特征,特征取值为是0~正无穷。枚举值特征主要是特征有固定个数个可能值,例如今天周几,只有7个可能值:周1,周2,...,周日。在实际的使用中,我们可能对不同类型的特征进行转换,例如将枚举特征或者连续特征处理为二值特征。枚举特征处理为二值特征技巧:将枚举特征映射为多个特征,每个特征对应一个特定枚举值,例如今天周几,可以把它转换成7个二元特征:今天是否是周一,今天是否是周二,...,今天是否是周日。连续值处理为二值特征方法:先将连续值离散化(后面会介绍如何离散化),再将离散化后的特征切分为N个二元特征,每个特征代表是否在这个区间内。
特征处理与分析
在对特征进行分类后,下面介绍下对特征常用的处理方法。包括1.特征归一化,离散化,缺省值处理。2.特征降维方法。3.特征选择方法等。
特征归一化,离散化,缺省值处理
主要用于单个特征的处理。
在介绍特征降维之前,先介绍下特征升维。在机器学习中,有一个VC维理论。根据VC维理论,VC维越高,打散能力越强,可容许的模型复杂度越高。在低维不可分的数据,映射到高维是可分。可以想想,给你一堆物品,人脑是如何对这些物品进行分类,依然是找出这些物品的一些特征,例如:颜色,形状,大小,触感等等,然后根据这些特征对物品做以归类,这其实就是一个先升维,后划分的过程。比如我们人脑识别香蕉。可能首先我们发现香蕉是黄色的。这是在颜色这个维度的一个切分。但是很多东西都是黄色的啊,例如哈密瓜。那么怎么区分香蕉和哈密瓜呢?我们发现香蕉形状是弯曲的。而哈密瓜是圆形的,那么我们就可以用形状来把香蕉和哈密瓜划分开了,即引入一个新维度:形状,来区分。这就是一个从“颜色”一维特征升维到二维特征的例子。
那问题来了,既然升维后模型能力能变强,那么是不是特征维度越高越好呢?为什么要进行特征降维&特征选择?主要是出于如下考虑:1. 特征维数越高,模型越容易过拟合,此时更复杂的模型就不好用。2. 相互独立的特征维数越高,在模型不变的情况下,在测试集上达到相同的效果表现所需要的训练样本的数目就越大。 3. 特征数量增加带来的训练、测试以及存储的开销都会增大。4.在某些模型中,例如基于距离计算的模型KMeans,KNN等模型,在进行距离计算时,维度过高会影响精度和性能。5.可视化分析的需要。在低维的情况下,例如二维,三维,我们可以把数据绘制出来,可视化地看到数据。当维度增高时,就难以绘制出来了。在机器学习中,有一个非常经典的维度灾难的概念。用来描述当空间维度增加时,分析和组织高维空间,因体积指数增加而遇到各种问题场景。例如,100个平均分布的点能把一个单位区间以每个点距离不超过0.01采样;而当维度增加到10后,如果以相邻点距离不超过0.01小方格采样单位超一单位超正方体,则需要10^20
个采样点。
正是由于高维特征有如上描述的各种各样的问题,所以我们需要进行特征降维和特征选择等工作。特征降维常用的算法有PCA,LDA等。特征降维的目标是将高维空间中的数据集映射到低维空间数据,同时尽可能少地丢失信息,或者降维后的数据点尽可能地容易被区分
特征选择的目标是寻找最优特征子集。特征选择能剔除不相关(irrelevant)或冗余(redundant )的特征,从而达到减少特征个数,提高模型精确度,减少运行时间的目的。另一方面,选取出真正相关的特征简化模型,协助理解数据产生的过程。
特征选择的一般过程如下图所示:
主要分为产生过程,评估过程,停止条件和验证过程。
特征选择-产生过程和生成特征子集方法
其他如双向搜索( BDS , Bidirectional Search ),序列浮动选择( Sequential Floating Selection )等
随机算法共同缺点:依赖随机因素,有实验结果难重现。
特征选择-有效性分析
对特征的有效性进行分析,得到各个特征的特征权重,根据是否与模型有关可以分为1.与模型相关特征权重,使用所有的特征数据训练出来模型,看在模型中各个特征的权重,由于需要训练出模型,模型相关的权重与此次学习所用的模型比较相关。不同的模型有不同的模型权重衡量方法。例如线性模型中,特征的权重系数等。2.与模型无关特征权重。主要分析特征与label的相关性,这样的分析是与这次学习所使用的模型无关的。与模型无关特征权重分析方法包括(1)交叉熵,(2)Information Gain,(3)Odds ratio,(4)互信息,(5)KL散度等
在机器学习任务中,特征非常重要。
机器学习InAction系列讲座介绍:结合美团在机器学习上的实践,我们进行一个实战(InAction)系列的介绍(带“机器学习InAction系列”标签的5篇文章),介绍机器学习在解决问题的实战中所需的基本技术、经验和技巧。本文主要介绍了数据清洗与特征处理,其他四篇文章主要介绍了机器学习解决问题流程和模型训练、模型优化等工作。
《elements of statistical learning》
推荐与个性化
本文已收录于以下专栏:
相关文章推荐
背景常见的数据预处理方法
在使用机器学习与数据挖掘算法时
前言这个系列主要是面向做工程的同事做一些分享,旨在让大家都可以应用机器学习来解决问题,而不仅仅是看看理论浅尝辄止。机器学习是一门包含多方面知识的学科,想要几天掌握是不太可能的。但是如果把它当做一个工具...
分类变量处理
分类变量是经常遇到的问题。一方面它们提供了信息;另一方面,它们可能是文本形式——纯文字或者与文字相关的整数——就像表格的索引一样。
因此,我们在建模的时候往往需要将这些变...
对于给定的数据集和问题,用机器学习的方法解决问题的工作一般分为4个步骤:
一.     数据预处理
首先,必须确保数据的格式符合要求。使用标准数据格式可以融合算法和数据源,方便匹配操作。此外还需要...
抱着认真崇拜的心情学习这篇博客: http://dataunion.org/25792.html1、摘抄1:本文以点击下单率预测为例,结合实例来介绍如何进行数据清洗和特征处理。首先介绍下点击下单率预测...
版权说明:内容来自互联网及书籍
一、主成分分析
Spring MVC 提供了以下几种途径输出模型数据:
– ModelAndView: 处理方法返回值类型为 ModelAndView时, 方法体即可通过该对象添加模型数据
– Map及Model:入...
随着美团交易规模的逐步增大,积累下来的业务数据和交易数据越来越多,这些数据是美团做为一个团购平台最宝贵的财富。通过对这些数据的分析和挖掘,不仅能给美团业务发展方向提供决策支持,也为业务的迭代指明了方向...
(1)非规整
(2)值缺失
(3)异常值(outlier)
一般来说,现实中的数据会存在信息不完整、数据点缺失和异常值的情况,理想情况下,我们会去尝试修复非规整数据,但很多数据集都源于一些难以重现(不...
他的最新文章
讲师:王禹华
讲师:宋宝华
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 数据库中什么是缺省 的文章

 

随机推荐