




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Machine Learning with Matlab1 概述Matlab中集成了一套用于统计和机器学习的工具包,即Statistics and Machine learning Toolbox,极大方便了机器学习开发者的算法研究和原理验证。该工具包可解决回归、分类和聚类等机器学习问题,并支持多种监督和非监督算法,包括SVM、决策树、KNN、k-means、k-medoids、高斯混合模型、隐藏马尔科夫模型等。此外,还支持多种选择关键特征的算法,包括PCA、顺序特征选择、逐步回归、正则化等。下面将结合用户手册,对该工具包的使用进行介绍。SonicWALL, Inc. ConfidentialPage 29 of 292020/3/32 支持数据类型该工具包支持多种数据类型作为输入,括号里的是数据类型。为了方便理解这些数据类型的使用方法,将结合示例程序对其进行说明。其中,红色部分为代码,绿色部分为输出。支持的数据类型包括: 具有单精度(single)或双精度(double)的数值标量、向量和矩阵 字符串矩阵(cellstr);字符(char)、逻辑(logical)或类型(categorical)矩阵;类型变量的数值矩阵(single/double)。典型示例就是类标签。不推荐使用nominal和ordinal类型,它们可能会在以后的版本删除。 表格(table)是上述数据类型的矩阵形式,用于表示异构数据。典型示例是混合了类型变量和数值变量的回归分析。不推荐使用dataset类型,可能会在以后的版本中删除。如果函数不支持table类型,就采用single或double的矩阵。 gpuArray类型可作为函数的输入参数,在GPU中执行。由于该类型与IDS无关,这里就不做进一步介绍。有兴趣的话,请查询Matlab Help。此外,不支持的数据类型包括: 复数 自定义的数值类型 用于非分组数据的带符号整数 稀疏矩阵2.1 数值single/double2.1.1 基本操作 a = 4;b = single(4);class (a)ans = doubleclass(b)ans = single说明:默认情况下,声明一个数值变量属于double类型,通过single函数可以强制转成single类型,降低所需的存储空间。single函数的输入可以是任何数值对象,甚至可以是数组。2.2 逻辑logical2.2.1 基本操作 A = 1 -3 2;5 4 7;-8 1 3;M = mod(A,2)M =1 1 01 0 10 1 1L = logical(mod(A,2)L =1 1 01 0 10 1 1class(M)ans = doubleclass(L)ans = logicalA(M)errorA(L)ans = 15-3173说明:虽然M和L的数值是相同的,但类型不同,M为double类型,L为logical类型。这也导致了A(L)是有效的,而A(M)是无效的。2.3 字符串矩阵cellstr2.3.1 基本操作 S = abc;def;ghi;C = cellstr(S);whos SNameSizeBytesClassAttributesS3x318charwhos CNameSizeBytesClassAttributesC3x1354cell说明:cellstr函数可以将矩阵S转换成字符向量的cell矩阵。其中,S可以是字符串矩阵、类型(categorical)矩阵、日期时间矩阵等。2.4 无大小的类型nominal(不推荐)2.4.1 基本操作:创建、比较、设置 load fisheririsunique(species)ans = setosaversicolorvirginicaspeciesNom = nominal(species);class(speciesNom)ans = nominalgetlevels(speciesNom)ans = setosa versicolor virginicagetlabels(speciesNom)ans = setosa versicolor virginica speciesNom2 = nominal(species,seto,vers,virg);getlevels(speciesNom2)ans = seto vers virggetlabels(speciesNom2)ans = seto vers virgisequal(speciesNom=setosa,speciesNom2=seto)ans =1 speciesNom3 = setlabels(speciesNom, seto,vers,virg);getlevels(speciesNom2)ans = seto vers virggetlabels(speciesNom2)ans = seto vers virg说明:第一部分是先加载数据集fisheriris,其中变量species是150*1的字符串矩阵,每个条目是一个物种名,共有3个物种。然后,在无附加参数的情况下调用nominal函数,创建一个新的nominal矩阵,其内容与species一致。调用getlevels和getlabels函数的返回值都是按照字母表顺序的类标签,但它们的数据类型不同,前者为nominal类型,后者为cell类型(字符串)。第三部分是有附加参数的情况下调用nominal函数,参数为自定义的标签。它们与species中的条目是按照出现的先后顺序来对应的,也就是说species第一个出现的类型与第一个标签对应,第二个出现的类型与第二个标签对应,以此类推。此时,speciesNom2中的所有条目都是species中条目的对应标签,这也可从getlevels和getlabels的返回值得知。调用isequal函数,可知两个变量是相同的。第四部分与第三部分类似,但是通过调用setlabels函数来实现的。该函数会返回一个norminal矩阵,包含与speciesNom相同的内容,但采用了新标签。2.4.2 基本操作:列表、合并、删除、检索 load carsmall;Origin = nominal(Origin);getlevels(Origin)ans = France Germany Italy Japan Sweden USAtabulate(Origin)ValueCountPercentFrance44.00%Germany99.00%Italy11.00%Japan1515.00%Sweden22.00%USA6969.00% Origin = mergelevels(Origin, France, Germany, Italy, Sweden, Europe);getlevels(Origin)ans =Europe Japan USAtabulate(Origin)ValueCountPercentEurope1616.00%Japan1515.00%USA6969.00% Origin2 = Origin(Origin=Italy);getlevels(Origin2)ans =France Germany Italy Japan Sweden USAOrigin2 = droplevels(Origin2,Italy);tabulate(Origin2)ValueCountPercentFrance44.04%Germany99.09%Japan1515.15%Sweden22.02%USA6969.70% any(Origin2=Italy)ans = 0any(ismember(Origin2, Italy)ans = 0ix = find(Origin2=France)ix =11273961Origin3 = droplevels(Origin, Italy);Origin(ix)ans =find(isundefined(Origin3)ix =11273961说明:该示例程序演示了对类标签的管理,包括合并和删除,它们会涉及到两个函数,即mergelevels和droplevels。其中,前者只限用于nominal类型,后者可同时用于nominal和oridinal类型。第一部分为先加载数据集carsmall,并将字符矩阵Origin转化为nominal矩阵的形式。通过tabulate函数,可以获得不同类标签的数量和占比。第二部分是利用mergelevels函数,参数2为待合并的类标签,参数3为合并后的类标签。结果显示,合并后的Origin只有3个类标签。第三部分是先创建变量Origin2,包括除Italy条目以外的所有Origin条目,但Italy类标签还在。然后,调用droplevels函数,将Italy的类标签也删除。如果只调用droplevels函数,系统会警告你在删除一个存在样本的类标签,且原先France对应的标签全变成undefined。显然,应该先删除样本,再删除类标签。第四部分是对moninal矩阵的检索和搜索。利用any函数,可遍历整个矩阵,确认是否满足该条件。第一条语句就是搜索Origin2矩阵是否包含Italy的类标签。第二条语句起到相同的作用,但是通过调用ismember函数来实现的。然后,正如第三部分的说明,演示了对droplevels的错误调用,原属于France的类标签都变成了undefined。通过isundefined函数,可查询类标签为undefined的样本。2.5 有大小的类型ordinal(不推荐)ordinal类型与nominal类型的根本区别在于:前者的类标签是按照字母表顺序(默认)或者自定义顺序进行排序(调用getlabels或getlevels的返回值顺序),可以比较大小;而后者的类标签是相同的顺序,但不能比较大小。2.5.1 基本操作:创建、比较、排序 AllSizes = medium, large, small, small, medium, large, medium, small;sizeOrd = ordinal(AllSizes);getlevels(sizeOrd)ans = large medium smallgetlabels(sizeOrd)ans = large medium smallsizeOrd(1) sizeOrd2 = ordinal(AllSizes, , xsmall,small,medium, large, xlarge);getlevels(sizeOrd2)ans = xsmall small medium large xlargegetlabels(sizeOrd2)ans = xsmall small medium large xlargesizeOrd2(1) sizeOrd3 = setlabels(sizeOrd, L, M, S);getlevels(sizeOrd3)ans = L M Sgetlabels(sizeOrd3)ans = L M SsizeOrd3(1) sizeOrd4 = reorderlevels(sizeOrd3,S,M,L);getlevels(sizeOrd3)ans = S M Lgetlabels(sizeOrd3)ans = S M LsizeOrd4(1) sizeOrd5 = ordinal(AllSizes,small,medium,large);getlevels(sizeOrd5)ans = small medium large sizeOrd5 = sort(sizeOrd5);sizeSort(:)ans = smallsmallsmallmediummediummediumlargelarge说明:第一部分是先定义了变量AllSizes,然后在无附加参数情况下调用ordinal函数。从getlevels和getlabels函数可以看到,类标签的排序是按照默认的字母表顺序,即largemediumsmall,与前面的说明是一致的。因此,这也导致sizeOrd(1)小于sizeOrd(2),即mediumsmall,显然这是不对的。第二部分是有附加参数情况下调用ordinal函数,参数2为类标签(),参数3为类级别(自定义的类标签)。当参数2为时,ordinal函数将使用参数3作为类标签,从而简化了函数的调用过程。而参数3有以下特征: 必须包含Allsizes中所有的类标签,且完全一致,不能简化或修改。 可以出现另外的类标签(xsmall/xlarge),即使它们并没有出现。 指定了类标签的顺序,即xsmallsmallmediumlargeL,Medium-M,Small-S。虽然setlabels可以修改类标签,但它们顺序不变,即LM load hospital;quantile(hospital.Age, 0,.5,1)ans =25 39 50hospital.AgeCat = ordinal(hospital.Age, Under 30, 30-39, Over 40, , 25, 30, 40, 50);getlevels(hospital.AgeCat)ans =Under 30 30-39 Over 40 p = 0:.25:1;breaks = quantile(hospital.Weight, p);ans =111.0 130.5 142.5 180.5 202.0hospital.WeightQ = ordinal(hospital.Weight, Q1, Q2, Q3, Q4, , breaks);getlevels(hospital.WeightQ)ans =Q1 Q2 Q3 Q4 grpstats(hospital,AgeCat,WeightQ,mean,DataVars,BloodPressure)ans =AgeCatWeightQGroupCountmean_BloodPressureUnder 30_Q1Under 30Q16123.1779.667Under 30_Q2Under 30Q23120.3379.667Under 30_Q3Under 30Q32127.586.5Under 30_Q4Under 30Q441227830-39_Q130-39Q112121.7581.7530-39_Q230-39Q29119.5682.55630-39_Q330-39Q3912183.22230-39_Q430-39Q411125.5587.273Over 40_Q1Over 40Q17122.1484.714Over 40_Q2Over 40Q213123.3879.385Over 40_Q3Over 40Q314123.0784.643Over 40_Q4Over 40Q410124.685.1说明:上述代码是利用ordinal函数,将连续的数值矩阵转换成离散的类型矩阵。实际情况中,会有需要连续的数值矩阵,故该功能是非常实用的。第一部分是加载数据集hospital。它包含了dataset类型的变量hospital,7个成员分别为LastName (Cell)、Sex (Nominal)、Age (double)、Weight (double)、Smoker (logical)、BloodPressure (double)、Trails (cell)。然后,调用ordinal函数,将数值型的Age转换为类型的AgeCat。其中,参数2为自定义的标签,参数3为空,参数4为对数值分类的边界值。这样,25-30岁的类标签是“Under 30”,30-40岁的类标签是“30-39”,40-50岁的类标签是“Over 40”。第二部分与第一部分类似,不过是对体重进行分类。第三部分是调用grpstats函数,输出hospital中的一些统计量。其中,参数1为数据源;参数2为待分组的变量名,即AgeCat和WeightQ,它们的所有组合将出现在返回值的第一列,而它们各自的值以及组合对应的数量将出现在后续的列中;参数3为统计类型,可以是mean(平均值)、sem(平均值的标准误差)、numel(非NaN的数量)、gname(组名)、std(标准偏差)、var(方差)、min(最小值)、max(最大值)、range(范围)、meanci(平均值的95%置信区间)和predci(新样本的95%预测区间);参数4是另外选项的名称,可以是Alpha(参数3为meanci或predci时,表示置信区间或预测区间)、DataVars(待计算统计量的变量名)、VarNames(指定第一行的名称);参数5为参数4中指定选项的值。注意,参数4和参数5作为组合,可以出现多次。2.6 类型categorical(推荐)nominal和ordinal类型,可以合称为categorical类型。也就说,categorical矩阵可能是有大小,或无大小的。通过nominal或ordinal函数,将categorical矩阵转为nominal或ordinal类型,反之亦然。它们还是有一些区别,比如categorical矩阵无法使用getlabels和getlevels函数。另外,nominal和ordinal类型可能在未来的版本中会被删除,因此还是推荐使用categorical类型。2.6.1 示例代码 A = r b g; g r b; b r g;B = categorical(A)B = rbg grb brgclass(A)ans = cellclass(B)ans = categoricalcategories(B)ans = bgr说明:通过categorical函数,可将字符串矩阵A转换为categorical矩阵B,两者内容保持一致。调用categories函数,就能以字母顺序显示B中的唯一类型值。2.7 数据集dataset(不推荐)2.7.1 数值数据集 load fisheririsds = mat2dataset(meas);class(ds)ans = datasetds.Propertiesans =Description: VarDescription: Units: DimNames: Observations VariablesUserData: ObsNames: VarNames: meas1 meas2 meas3 meas4ds(1,:)ans =meas1meas2meas3meas0.2ds.Properties.Description = Fisher iris data;ds.Properties.VarNames = SLength,SWidth,PLength,PWidth;ds(1,:)ans =SLengthSWidthPLengthPWidth0.2 ds2 = mat2dataset(meas, VarNames, myVar1, myVar2, myVar3, myVar4);ds2(1,:)ans =myVar1myVar2myVar3myVar0.2 ds.Species = nominal(species);ds(1,:)ans =SLengthSWidthPLengthPWidthSpecies0.2setosa说明:第一部分是通过调用mat2dataset函数,将数值矩阵转换为dataset类型。该类型具有Properties属性,包括Description(dataset的描述)、VarDescription(变量的描述)、Units(变量的单位)、DimNames(维度的描述)、UserData(用户的自定义数据)、ObsNames(观察值的名称,必须为唯一的字符串)和VarNames(变量的名称)。默认情况下,VarNames就是数据源的名称(meas)加上列号(1-4),可以通过赋值的方法直接对其进行修改。第二部分与第一部分雷同,只是在调用mat2dataset函数时增加了另外的参数。参数2和参数3是一对附加选项的名称和值,前者可以是VarName、ObsName和NumCols。这样,就可实现对Properties.VarNames的初始化。第三部分是向ds增加新的一列species。实现起来也很简单,只需增加一个新的属性即可。需要注意,新列必须与数据集的维度(行数)一致。2.7.2 异构数据集 load carsmallds = dataset(Origin, Acceleration, Cylinders, MPG);ds(1, :)ans =OriginAccelerationCylindersMPGUSA12818 varclass = datasetfun(class, ds, UniformOutput, false);varclass(:)ans =chardoubledoubledouble ds.Cylinders = nominal(ds.Cylinders,four,six,eight);ds(1,Origin,Cylinders)ans =OriginCylindersUSAeight说明:第一部分是创建一个异构的数据集,包括字符串和数值型。第二部分是调用datasetfun函数,输出每一种变量的类型。其中,参数1为函数指针,参数2为数据集,相当于对数据集中每种变量执行一次class函数。第三部分是修改其中一个变量。2.7.3 文件导入 cd(matlabroot)cd(help/toolbox/stats/examples)ds = dataset(File,hospitalSmall.txt) cd(matlabroot)cd(help/toolbox/stats/examples)ds2 = dataset(File,hospitalSmall.csv,Delimiter,) cd(matlabroot)cd(help/toolbox/stats/examples)ds3 = dataset(XLSFile,hospitalSmall.xlsx);ds4 = dataset(XLSFile,hospitalSmall.xlsx,Sheet,2)说明:需要注意的是,从文件中导入时,第一行将作为变量名,其他行将作为样本。如果全为样本的话,将采用第一条样本作为变量名。其中,当某个变量为数值时,会在前面加上x。显然,这是不合理的,需要避免这种情况的发生。第一部分是从tab作为分隔符的txt文件中导入。第二部分是从逗号作为分隔符的txt文件中导入,可指定分隔符。第三部分是从excel文件中导入,可指定sheet页。2.7.4 文件导出 export(hospital) export(hospital,File,NoLabels.txt,WriteVarNames,false) export(hospital,File,hospital.csv,Delimiter,) export(hospital,XLSFile,hospital.xlsx)说明:第一部分是通过调用export函数,导出数据集hospital。默认情况下,会导出为hospital.txt,即与数据集名相同的txt文件,且文件中的内容采用tab作为分隔符。另外,第一行为变量名,随后就是样本数据。第二部分通过file选项指定了文件名,并指定WriteVarNames选项为false,即不写入变量名。第三部分与第二部分类似,但指定了逗号作为分隔符。第四部分则导出为excel格式。2.7.5 变量操作:增加、删除 cd(matlabroot)cd(help/toolbox/stats/examples)ds = dataset(XLSFile, hospitalSmall.xlsx);ds2 = dataset(XLSFile, hospitalSmall.xlsx, Sheet, Heights);ds.Properties.VarNames(:)ans =idnamesexagewgtsmokeds2.Properties.VarNames(:)ans =idhgtds3 = ds ds2;ds3.Properties.ObsNames = ds3.id;ds3.Properties.VarNames(:)ans =idnamesexagewgtsmokehgt ds2(end, :) = ;ds4 = join(ds, ds2);errords4 = join(ds2, ds);ds5 = join(ds2, ds, type, rightouter, mergekeys, true); ds3.bmi = ds.wgt*703./ds.hgt.2;ds3.Properties.VarNames(:)ans =idnamesexagewgtsmokehgtbmi ds3 (:, 4) = ;ds3.Properties.VarNames(:)ans =idnamesexwgtsmokehgtbmi ds3.wgt = ;ds3.Properties.VarNames(:)ans =idnamesexsmokehgtbmi说明:第一部分是将两个数据集合并。两个数据集具有相同的id变量,合并后的数据集增加了hgt变量。如果id变量的内容不同,即使是顺序不同,也会导致合并失败。另外,如果数据集ds2只有一个变量hgt,也可以实现相同的效果。第二部分是通过调用join函数,合并两个数据集。与前面一种方式不同,id变量的内容和顺序可以不同。如果只有2个参数,数据集2必须包含数据1中所有的关键值(id),故join(ds, ds2)出错,join(ds2, ds)运行正常。对于后者,合并后的数据集包括两个数据集都存在的条目。如果希望合并后的数据集包含ds中的所有条目,就需要再加入一些参数。第三部分是采用另外一种方式,增加数据集的变量。第四部分是删除数据集中的一个变量。第五部分是采用另外一种方式,删除数据集中的一个变量。2.7.6 样本操作:合并、增加、去重、删除 dsNew = ds3;ds4;size(dsNew)ans =226cellObs = id,name,sex,age,wgt,smoke;YQR-965,BAKER,M,36,160,0;LFG-497,WALL ,F,28,125,1;KSD-003,REED ,M,32,187,0;dsNew = dsNew;cell2dataset(cellObs);size(dsNew)ans =256 structObs(1,1).id = GHK-842;structObs(1,1).name = GEORGE;structObs(1,1).sex = M;structObs(1,1).age = 45;structObs(1,1).wgt = 182;structObs(1,1).smoke = 1;structObs(2,1).id = QRH-308;structObs(2,1).name = BAILEY;structObs(2,1).sex = F;structObs(2,1).age = 29;structObs(2,1).wgt = 120;structObs(2,1).smoke = 0;dsNew = dsNew;struct2dataset(structObs);size(dsNew)ans =276 dsNew = unique(dsNew);size(dsNew)ans =266 dsNew(18,20,21,:) = ;size(dsNew)ans =236 dsNew.Properties.ObsNames = dsNew.id;dsNew.id = ;dsNew(KOQ-996,:) = ;size(dsNew)ans =225 toDelete = strcmp(dsN,WILLIAMS);dsNew(toDelete,:) = ;size(dsNew)ans =215说明:第一部分是先将两个数据集合并,再通过数组的形式加入新样本。第二部分与第一部分类似,只是通过数据结构的形式来实现的。第三部分是通过调用unique函数,去除重复条目。第四部分是通过矩阵索引的形式,去除指定条目。第五部分是通过ObsNames的形式,去除指定条目。第六部分是通过字符串匹配的形式,去除指定条目。2.7.7 样本操作:观察值名、检索 load hospitalhospital(XLK-030, LastName, Sex, Age)ans = LastNameSexAgeXLK-030BROWNFemale49hospital(HVR-372,:) = ; dsMale = hospital(hospital.Sex=Male, :);dsMale(1:2,LastName, Sex, Age)ans = LastNameSexAgeYPL-320SMITHMale38GLI-532JOHNSONMale43dsFemale = hospital(hospital.Sex=Female & hospital.Age 40, :);dsFemale(1:2,LastName, Sex, Age)ans = LastNameSexAgeXLK-030BROWNFemale49 TFP-518DAVISFemale46说明:第一部分是加载数据集hospital,它采用了id作为ObsName。那么,就可以通过id来唯一表示一个条目,调用格式为“dataset(ObsName, param)”,第二个参数是变量名组成的数组。另外,通过这种格式也能删除一个条目。第二部分与第一部分类似,只是id换成了检索条件,第二个参数不变。检索条件可以是单独或者组合的判别语句。2.7.8 样本操作:排序 load hospitaldsAgeUp = sortrows(hospital, Age);dsAgeUp(1:3, LastName, Age)ans =LastNameAgeXUE-826JACKSON25FZR-250HALL25PUE-347YOUNG25 dsAgeDown = sortrows(hospital, Age, descend);dsAgeDown(1:3, LastName, Age)ans =LastNameAgeXBA-581ROBINSON50DAU-529REED50XLK-030BROWN49 dsWeight = sortrows(hospital,Age,Weight,ascend,descend);dsWeight(1:3,LastName,Age,Weight)ans =LastNameAgeWeightFZR-250HALL25189SCQ-914JAMES25186XUE-826JACKSON25174 dsObs = sortrows(hospital,obsnames);dsObs(1:3,LastName,Age)ans =LastNameAgeAAX-056LEE44AFB-271PEREZ44AFK-336WRIGHT45说明:第一部分是调用sortrows函数,根据Age对样本排序。参数1为数据集,参数2为排序的变量名,可以是单个变量或者组合。若参数2为组合时,就先用第一个变量排序,再利用第二个参数排序,以此类推。参数3是可选的,指定了样本排序的顺序,可以是升序或者降序,默认为升序。第二部分是利用样本的Age,对样本进行降序排序。第三部分是利用样本的Age和Weight组合,前者为升序,后者为降序。第四部分是利用样本的obsnames进行升序排序。2.8 表格table(推荐)2.8.1 示例程序LastName = Smith; Johnson; Williams; Jones; Brown;Age = 38; 43; 38; 40; 49;Height = 71; 69; 64; 67; 64;Weight = 176; 163; 131; 133; 119;BloodPressure = 124 93; 109 77; 125 83; 117 75; 122 80;T = table(Age, Height, Weight, BloodPressure, RowNames, LastName)T = AgeHeightWeightBloodPressure_Smith3871176124 93Johnson4369163109 77Williams3864131125 83Jones4067133117 75Brown4964119122 80说明:table函数可以根据多个输入变量(向量),创建一个表格。其中,输入变量可以是不同的数据类型和尺寸,但必须有相同的元素个数。对于机器学习而言,这种类型是最常用的,所有样本的特征和类标签都将作为输入变量来创建表格,并使用后面的机器学习算法进行处理。3 分类学习器分类学习器(Classification learner)是Matlab内置的一款功能强大的机器学习工具。该工具集成了许多常用的分类算法,并支持对算法的配置、特征选择和PCA等功能。经过训练后,就可建立一套完整的分类模型。该工具可以对分类结果进行多种形式的分析,并将分类模型进行导出,方便对测试数据的分类。下面,将分别从导入、配置、训练、导出四个过程对该工具进行介绍。3.1 导入在Matlab的应用程序中,打开分类学习器工具,界面如图3-1所示。然后,点击New Session的下拉键,支持Workspace和File两种导入方式。图3-1 分类学习器的界面当选择第一种时,会弹出一个导入窗口,如图3-2所示。导入过程分为三个步骤:第一步为选择数据集变量;第二步为选择Predictor(特征)和Response(类标签),也可配置为Do not import;第三步为选择校验方式,支持交叉校验、保持(holdout)校验和无校验。其中,交叉校验是将数据集分为k份,每次将k-1份作为训练集,另外1份作为测试集,可有效过拟合的问题,适合较小额数据集;保持校验是选择特定比例的数据为训练集,其他数据为测试集,适合较大的数据集。最后,点击Start Session按键即可。这样,就完成了数据集的导入了。图3-2 数据集导入窗口3.2 配置导入完成后,就需要进行对分类算法、特征的配置了。3.2.1 算法选择在Classifier下拉菜单中,可选择适合数据集的分类算法。目前,该工具支持的算法包括决策树、判别分析、逻辑回归、SVM、KNN以及Ensemble分类器,而实际显示的算法是它的子集。Matlab支持这些算法的编程,对应的函数名如表3-1所示。另外,还有三个特殊选项,就是All Quick-to-Train、All linear和All。其中,All Quick-to-Train是指训练时间较短的分类器;All linear是指所有线性分类器,包括线性判别分析和线性SVM;All是指所有分类器。另外,点击Advanced按键,还可实现对分类器的高级配置。比如,决策树的配置参数包括最大分叉数、分叉标准、代理决策分叉及其最大数;KNN的配置参数包括邻居数、距离度量、距离权重和标准化数据。表3-1 不同分类算法的API分类算法决策树判别分析逻辑回归SVMKNNEnsemble函数fitctreefitcdiscrfitglmfitcsvmfitcknnfitensemble3.2.2 特征选择点击Feature Selection按键,就可实现对特征的手动配置,如图3-3所示。每个特征后面都有一个复选框,勾选表示选择该特征,空表示不选择该特征。对于同一个分类算法,可以配置不同的特征组合进行单独的分类测试。根
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 绵阳市数学试卷
- 期中考试五下数学试卷
- 七彩阳光数学试卷
- 青海高考数学试卷
- 城中村土地复垦与再利用方案
- 墨西哥数学试卷
- 建筑施工进度跟踪管理方案
- 邻水中学初一数学试卷
- 梅县区初中期末数学试卷
- 叶酸知识培训通知课件
- 《成为格式塔咨询师:心理咨询师的完形之路》记录
- 胰管结石术后护理
- 第二十三届华罗庚金杯少年数学邀请赛初赛试卷(初中一年级组)(图片版含答案)
- 循环经济与再制造行业风险投资态势及投融资策略指引报告
- 高中政治必修三思维导图
- 安全知识竞赛题及答案(400道)
- 先学后教与有效教学课件市公开课一等奖百校联赛特等奖课件
- 部编版语文五年级上期第一单元教案(大单元整体教学设计含作业设计)
- 装修合同标准范本合集
- 深圳实验学校新初一分班语文试卷
- 青灵与量子物理学的关联研究
评论
0/150
提交评论