ImageVerifierCode 换一换
格式:DOC , 页数:29 ,大小:662KB ,
资源ID:11959103      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/11959103.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(Machine-Learning-tools-inside-Matlab.doc)为本站上传会员【仙人****88】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

Machine-Learning-tools-inside-Matlab.doc

1、Machine Learning with Matlab 1 概述 Matlab中集成了一套用于统计和机器学习的工具包,即Statistics and Machine learning Toolbox,极大方便了机器学习开发者的算法研究和原理验证。该工具包可解决回归、分类和聚类等机器学习问题,并支持多种监督和非监督算法,包括SVM、决策树、KNN、k-means、k-medoids、高斯混合模型、隐藏马尔科夫模型等。此外,还支持多种选择关键特征的算法,包括PCA、顺序特征选择、逐步回归、正则化等。下面将结合用户手册,对该工具包的使用进行介绍。 SonicWALL, Inc. Conf

2、idential Page 29 of 29 2025/8/22 周五 2 支持数据类型 该工具包支持多种数据类型作为输入,括号里的是数据类型。为了方便理解这些数据类型的使用方法,将结合示例程序对其进行说明。其中,红色部分为代码,绿色部分为输出。支持的数据类型包括: Ø 具有单精度(single)或双精度(double)的数值标量、向量和矩阵 Ø 字符串矩阵(cellstr);字符(char)、逻辑(logical)或类型(categorical)矩阵;类型变量的数值矩阵(single/double)。典型示例就是类标签。不推荐使用nominal和ordinal类型,它们可能会在以后的

3、版本删除。 Ø 表格(table)是上述数据类型的矩阵形式,用于表示异构数据。典型示例是混合了类型变量和数值变量的回归分析。不推荐使用dataset类型,可能会在以后的版本中删除。如果函数不支持table类型,就采用single或double的矩阵。 Ø gpuArray类型可作为函数的输入参数,在GPU中执行。由于该类型与IDS无关,这里就不做进一步介绍。有兴趣的话,请查询Matlab Help。 此外,不支持的数据类型包括: Ø 复数 Ø 自定义的数值类型 Ø 用于非分组数据的带符号整数 Ø 稀疏矩阵 2.1 数值single/double 2.1.1 基本操作 >

4、a = 4; b = single(4); class (a) ans = double class(b) ans = single 说明: 默认情况下,声明一个数值变量属于double类型,通过single函数可以强制转成single类型,降低所需的存储空间。single函数的输入可以是任何数值对象,甚至可以是数组。 2.2 逻辑logical 2.2.1 基本操作 > A = [1 -3 2;5 4 7;-8 1 3]; M = mod(A,2) M = 1 1 0 1 0 1 0 1 1 L = l

5、ogical(mod(A,2)) L = 1 1 0 1 0 1 0 1 1 class(M) ans = double class(L) ans = logical A(M) error A(L) ans = 1 5 -3 1 7 3 说明: 虽然M和L的数值是相同的,但类型不同,M为double类型,L为logical类型。这也导致了A(L)是有效的,而A(M)是无效的。 2.3 字符串矩阵cellstr 2.3.1 基本操作 > S = ['abc';'def';'ghi']; C

6、 = cellstr(S); whos S Name Size Bytes Class Attributes S 3x3 18 char whos C Name Size Bytes Class Attributes C 3x1 354 cell 说明: cellstr函数可以将矩阵S转换成字符向量的cell矩阵。其中,S可以是字符串矩阵、类型(categorical)矩阵、日期时间矩阵等。 2.4 无大小的类型nominal(不推荐) 2.4.1 基本操作:创建、比较、设置 > load fisheriris unique(species) ans = '

7、setosa' 'versicolor' 'virginica' speciesNom = nominal(species); class(speciesNom) ans = nominal getlevels(speciesNom) ans = setosa versicolor virginica getlabels(speciesNom) ans = 'setosa' 'versicolor' 'virginica' > speciesNom2 = nominal(species,{'seto','vers','virg'}); g

8、etlevels(speciesNom2) ans = seto vers virg getlabels(speciesNom2) ans = 'seto' 'vers' 'virg' isequal(speciesNom=='setosa',speciesNom2=='seto') ans = 1 > speciesNom3 = setlabels(speciesNom, {'seto','vers','virg'}); getlevels(speciesNom2) ans = seto vers virg getlabels(s

9、peciesNom2) ans = 'seto' 'vers' 'virg' 说明: 第一部分是先加载数据集fisheriris,其中变量species是150*1的字符串矩阵,每个条目是一个物种名,共有3个物种。然后,在无附加参数的情况下调用nominal函数,创建一个新的nominal矩阵,其内容与species一致。调用getlevels和getlabels函数的返回值都是按照字母表顺序的类标签,但它们的数据类型不同,前者为nominal类型,后者为cell类型(字符串)。 第三部分是有附加参数的情况下调用nominal函数,参数为自定义的标签。它们与species中

10、的条目是按照出现的先后顺序来对应的,也就是说species第一个出现的类型与第一个标签对应,第二个出现的类型与第二个标签对应,以此类推。此时,speciesNom2中的所有条目都是species中条目的对应标签,这也可从getlevels和getlabels的返回值得知。调用isequal函数,可知两个变量是相同的。 第四部分与第三部分类似,但是通过调用setlabels函数来实现的。该函数会返回一个norminal矩阵,包含与speciesNom相同的内容,但采用了新标签。 2.4.2 基本操作:列表、合并、删除、检索 > load carsmall; Origin = nomi

11、nal(Origin); getlevels(Origin) ans = France Germany Italy Japan Sweden USA tabulate(Origin) Value Count Percent France 4 4.00% Germany 9 9.00% Italy 1 1.00% Japan 15 15.00% Sweden 2 2.00% USA 69 69.00% > Origin = mergelevels(Origin, {'France', 'Germany', 'Italy

12、', 'Sweden'}, 'Europe'); getlevels(Origin) ans = Europe Japan USA tabulate(Origin) Value Count Percent Europe 16 16.00% Japan 15 15.00% USA 69 69.00% > Origin2 = Origin(Origin~='Italy'); getlevels(Origin2) ans = France Germany Italy Japan Sweden USA Origin2 = d

13、roplevels(Origin2,'Italy'); tabulate(Origin2) Value Count Percent France 4 4.04% Germany 9 9.09% Japan 15 15.15% Sweden 2 2.02% USA 69 69.70% > any(Origin2=='Italy') ans = 0 any(ismember(Origin2, 'Italy')) ans = 0 ix = find(Origin2=='France') ix = 11 27 39 61 Orig

14、in3 = droplevels(Origin, 'Italy'); Origin(ix) ans = find(isundefined(Origin3)) ix = 11 27 39 61 说明: 该示例程序演示了对类标签的管理,包括合并和删除,它们会涉及到两个函数,即mergelevels和droplevels。其中,前者只限用于nominal类型,后者可同时用于nominal和oridinal类型。 第一部分为先加载数据集carsmall,并将字符矩阵Origin

15、转化为nominal矩阵的形式。通过tabulate函数,可以获得不同类标签的数量和占比。 第二部分是利用mergelevels函数,参数2为待合并的类标签,参数3为合并后的类标签。结果显示,合并后的Origin只有3个类标签。 第三部分是先创建变量Origin2,包括除Italy条目以外的所有Origin条目,但Italy类标签还在。然后,调用droplevels函数,将Italy的类标签也删除。如果只调用droplevels函数,系统会警告你在删除一个存在样本的类标签,且原先France对应的标签全变成undefined。显然,应该先删除样本,再删除类标签。 第四部分是对monina

16、l矩阵的检索和搜索。利用any函数,可遍历整个矩阵,确认是否满足该条件。第一条语句就是搜索Origin2矩阵是否包含Italy的类标签。第二条语句起到相同的作用,但是通过调用ismember函数来实现的。然后,正如第三部分的说明,演示了对droplevels的错误调用,原属于France的类标签都变成了undefined。通过isundefined函数,可查询类标签为undefined的样本。 2.5 有大小的类型ordinal(不推荐) ordinal类型与nominal类型的根本区别在于:前者的类标签是按照字母表顺序(默认)或者自定义顺序进行排序(调用getlabels或getleve

17、ls的返回值顺序),可以比较大小;而后者的类标签是相同的顺序,但不能比较大小。 2.5.1 基本操作:创建、比较、排序 > AllSizes = {'medium', 'large', 'small', 'small', 'medium', 'large', 'medium', 'small'}; sizeOrd = ordinal(AllSizes); getlevels(sizeOrd) ans = large medium small getlabels(sizeOrd) ans = 'large' 'medium' 'small' sizeOr

18、d(1) < sizeOrd(2) ans = 0 > sizeOrd2 = ordinal(AllSizes, {}, {'xsmall','small','medium', 'large', 'xlarge'}); getlevels(sizeOrd2) ans = xsmall small medium large xlarge getlabels(sizeOrd2) ans = 'xsmall' 'small' 'medium' 'large' 'xlarge' sizeOrd2(1) < sizeOrd2(2) ans

19、 = 1 > sizeOrd3 = setlabels(sizeOrd, {'L', 'M', 'S'}); getlevels(sizeOrd3) ans = L M S getlabels(sizeOrd3) ans = 'L' 'M' 'S' sizeOrd3(1) sizeOrd4 = reorderlevels(sizeOrd3,{'S','M','L'}); getlevels(sizeOrd3) ans = S M L getlabels(sizeOrd3)

20、 ans = 'S' 'M' 'L' sizeOrd4(1) sizeOrd5 = ordinal(AllSizes,{},{'small','medium','large'}); getlevels(sizeOrd5) ans = small medium large sizeOrd5 = sort(sizeOrd5); sizeSort(:) ans = small small small medium medium medium large large 说明: 第一部分是先定

21、义了变量AllSizes,然后在无附加参数情况下调用ordinal函数。从getlevels和getlabels函数可以看到,类标签的排序是按照默认的字母表顺序,即large

22、一致,不能简化或修改。 Ø 可以出现另外的类标签(xsmall/xlarge),即使它们并没有出现。 Ø 指定了类标签的顺序,即xsmallL,Medium->M,Small->S。虽然setlabels可以修改类标签,但它们顺序不变,即L

23、修改所有类标签的大小,即参数2。需要注意,参数2必须与参数1中的类标签完全一致,不能增加或修改。否则,会导致函数调用出错。另外,nominal类型也可以调用该函数,但只会反映在getlevels和getlabels函数的返回值中,并不能用于大小比较。这是因为nominal的类标签只有顺序的概念,并没有大小的概念。 第五部分是通过调用sort函数,根据指定的类标签大小,对sizeOrd5中的所有程序进行排序。 2.5.2 离散化、统计 > load hospital; quantile(hospital.Age, [0,.5,1]) ans = 25 39 50

24、 hospital.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.0 hospital.WeightQ

25、 = ordinal(hospital.Weight, {'Q1', 'Q2', 'Q3', 'Q4'}, [], breaks); getlevels(hospital.WeightQ) ans = Q1 Q2 Q3 Q4 > grpstats(hospital,{'AgeCat','WeightQ'},'mean','DataVars','BloodPressure') ans = AgeCat WeightQ GroupCount mean_BloodPressure Under 30_Q1 Under 30 Q1 6 123.17

26、 79.667 Under 30_Q2 Under 30 Q2 3 120.33 79.667 Under 30_Q3 Under 30 Q3 2 127.5 86.5 Under 30_Q4 Under 30 Q4 4 122 78 30-39_Q1 30-39 Q1 12 121.75 81.75 30-39_Q2 30-39 Q2 9 119.56 82.556 30-39_Q3 30-39 Q3 9 121 83.222 30-39_Q4 30-39 Q4 11 125.55 87.273 Over 40_Q1 Over 4

27、0 Q1 7 122.14 84.714 Over 40_Q2 Over 40 Q2 13 123.38 79.385 Over 40_Q3 Over 40 Q3 14 123.07 84.643 Over 40_Q4 Over 40 Q4 10 124.6 85.1 说明: 上述代码是利用ordinal函数,将连续的数值矩阵转换成离散的类型矩阵。实际情况中,会有需要连续的数值矩阵,故该功能是非常实用的。 第一部分是加载数据集hospital。它包含了dataset类型的变量hospital,7个成员分别为LastName (Cell)、Sex (No

28、minal)、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为数据源;参

29、数2为待分组的变量名,即AgeCat和WeightQ,它们的所有组合将出现在返回值的第一列,而它们各自的值以及组合对应的数量将出现在后续的列中;参数3为统计类型,可以是mean(平均值)、sem(平均值的标准误差)、numel(非NaN的数量)、gname(组名)、std(标准偏差)、var(方差)、min(最小值)、max(最大值)、range(范围)、meanci(平均值的95%置信区间)和predci(新样本的95%预测区间);参数4是另外选项的名称,可以是Alpha(参数3为meanci或predci时,表示置信区间或预测区间)、DataVars(待计算统计量的变量名)、VarName

30、s(指定第一行的名称);参数5为参数4中指定选项的值。注意,参数4和参数5作为组合,可以出现多次。 2.6 类型categorical(推荐) nominal和ordinal类型,可以合称为categorical类型。也就说,categorical矩阵可能是有大小,或无大小的。通过nominal或ordinal函数,将categorical矩阵转为nominal或ordinal类型,反之亦然。它们还是有一些区别,比如categorical矩阵无法使用getlabels和getlevels函数。另外,nominal和ordinal类型可能在未来的版本中会被删除,因此还是推荐使用categor

31、ical类型。 2.6.1 示例代码 > A = {'r' 'b' 'g'; 'g' 'r' 'b'; 'b' 'r' 'g'}; B = categorical(A) B = r b g g r b b r g class(A) ans = cell class(B) ans = categorical categories(B) ans = 'b' 'g' 'r' 说明: 通过categorical函数,可将字符串矩阵A转换为categorical矩阵B,两者内容保持一致。调用categories函数,就能以字母顺序显示B中的唯一类型值

32、 2.7 数据集dataset(不推荐) 2.7.1 数值数据集 > load fisheriris ds = mat2dataset(meas); class(ds) ans = dataset ds.Properties ans = Description: '' VarDescription: {} Units: {} DimNames: {'Observations' 'Variables'} UserData: [] ObsNames: {} VarNames: {'meas1' 'meas2' 'meas3' 'meas4'} ds(1,:

33、) ans = meas1 meas2 meas3 meas4 5.1 3.5 1.4 0.2 ds.Properties.Description = 'Fisher iris data'; ds.Properties.VarNames = {'SLength','SWidth','PLength','PWidth'}; ds(1,:) ans = SLength SWidth PLength PWidth 5.1 3.5 1.4 0.2 > ds2 = mat2dataset(meas, 'VarNames', {'myVar1', 'myVa

34、r2', 'myVar3', 'myVar4'}); ds2(1,:) ans = myVar1 myVar2 myVar3 myVar4 5.1 3.5 1.4 0.2 > ds.Species = nominal(species); ds(1,:) ans = SLength SWidth PLength PWidth Species 5.1 3.5 1.4 0.2 setosa 说明: 第一部分是通过调用mat2dataset函数,将数值矩阵转换为dataset类型。该类型具有Properties属性,包括Description(datas

35、et的描述)、VarDescription(变量的描述)、Units(变量的单位)、DimNames(维度的描述)、UserData(用户的自定义数据)、ObsNames(观察值的名称,必须为唯一的字符串)和VarNames(变量的名称)。默认情况下,VarNames就是数据源的名称(meas)加上列号(1-4),可以通过赋值的方法直接对其进行修改。 第二部分与第一部分雷同,只是在调用mat2dataset函数时增加了另外的参数。参数2和参数3是一对附加选项的名称和值,前者可以是VarName、ObsName和NumCols。这样,就可实现对Properties.VarNames的初始化。

36、 第三部分是向ds增加新的一列species。实现起来也很简单,只需增加一个新的属性即可。需要注意,新列必须与数据集的维度(行数)一致。 2.7.2 异构数据集 > load carsmall ds = dataset(Origin, Acceleration, Cylinders, MPG); ds(1, :) ans = Origin Acceleration Cylinders MPG USA 12 8 18 > varclass = datasetfun(@class, ds, 'UniformOutput', false); varclass(:

37、) ans = 'char' 'double' 'double' 'double' > ds.Cylinders = nominal(ds.Cylinders,{'four','six','eight'}); ds(1,{'Origin','Cylinders'}) ans = Origin Cylinders USA eight 说明: 第一部分是创建一个异构的数据集,包括字符串和数值型。 第二部分是调用datasetfun函数,输出每一种变量的类型。其中,参数1为函数指针,参数2为数据集,相当于对数据集中每种变量执行一次class函数。 第三部分是修

38、改其中一个变量。 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 = da

39、taset('XLSFile','hospitalSmall.xlsx'); ds4 = dataset('XLSFile','hospitalSmall.xlsx','Sheet',2) 说明: 需要注意的是,从文件中导入时,第一行将作为变量名,其他行将作为样本。如果全为样本的话,将采用第一条样本作为变量名。其中,当某个变量为数值时,会在前面加上x。显然,这是不合理的,需要避免这种情况的发生。 第一部分是从tab作为分隔符的txt文件中导入。 第二部分是从逗号作为分隔符的txt文件中导入,可指定分隔符。 第三部分是从excel文件中导入,可指定sheet页。 2.7.4 文件导

40、出 > 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作为分隔符。另外

41、第一行为变量名,随后就是样本数据。 第二部分通过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', 'Heig

42、hts'); ds.Properties.VarNames(:) ans = 'id' 'name' 'sex' 'age' 'wgt' 'smoke' ds2.Properties.VarNames(:) ans = 'id' 'hgt' ds3 = [ds ds2]; ds3.Properties.ObsNames = ds3.id; ds3.Properties.VarNames(:) ans = 'id' 'name' 'sex' 'age' 'wgt' 'smoke' 'hgt' > ds2(end, :) = []; ds4

43、 = join(ds, ds2); error ds4 = join(ds2, ds); ds5 = join(ds2, ds, 'type', 'rightouter', 'mergekeys', true); > ds3.bmi = ds.wgt*703./ds.hgt.^2; ds3.Properties.VarNames(:) ans = 'id' 'name' 'sex' 'age' 'wgt' 'smoke' 'hgt' 'bmi' > ds3 (:, 4) = []; ds3.Properties.VarNames(:) ans

44、 'id' 'name' 'sex' 'wgt' 'smoke' 'hgt' 'bmi' > ds3.wgt = []; ds3.Properties.VarNames(:) ans = 'id' 'name' 'sex' 'smoke' 'hgt' 'bmi' 说明: 第一部分是将两个数据集合并。两个数据集具有相同的id变量,合并后的数据集增加了hgt变量。如果id变量的内容不同,即使是顺序不同,也会导致合并失败。另外,如果数据集ds2只有一个变量hgt,也可以实现相同的效果。 第二部分是通过调用join函数,合并两个数据集。与前面一种方式不同

45、id变量的内容和顺序可以不同。如果只有2个参数,数据集2必须包含数据1中所有的关键值(id),故join(ds, ds2)出错,join(ds2, ds)运行正常。对于后者,合并后的数据集包括两个数据集都存在的条目。如果希望合并后的数据集包含ds中的所有条目,就需要再加入一些参数。 第三部分是采用另外一种方式,增加数据集的变量。 第四部分是删除数据集中的一个变量。 第五部分是采用另外一种方式,删除数据集中的一个变量。 2.7.6 样本操作:合并、增加、去重、删除 > dsNew = [ds3;ds4]; size(dsNew) ans = 22 6 cellObs =

46、{'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 = 25 6 > structObs(1,1).id = 'GHK-842'; structObs(1,1).name = 'GEORGE'; structObs(1,1).sex = '

47、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)];

48、 size(dsNew) ans = 27 6 > dsNew = unique(dsNew); size(dsNew) ans = 26 6 > dsNew([18,20,21],:) = []; size(dsNew) ans = 23 6 > dsNew.Properties.ObsNames = dsNew.id; dsNew.id = []; dsNew('KOQ-996',:) = []; size(dsNew) ans = 22 5 > toDelete = strcmp(dsNew.name,'WILLIAMS'

49、); dsNew(toDelete,:) = []; size(dsNew) ans = 21 5 说明: 第一部分是先将两个数据集合并,再通过数组的形式加入新样本。 第二部分与第一部分类似,只是通过数据结构的形式来实现的。 第三部分是通过调用unique函数,去除重复条目。 第四部分是通过矩阵索引的形式,去除指定条目。 第五部分是通过ObsNames的形式,去除指定条目。 第六部分是通过字符串匹配的形式,去除指定条目。 2.7.7 样本操作:观察值名、检索 > load hospital hospital('XLK-030', {'LastName', 'Se

50、x', 'Age'}) ans = LastName Sex Age XLK-030 'BROWN' Female 49 hospital('HVR-372',:) = []; > dsMale = hospital(hospital.Sex=='Male', :); dsMale(1:2,{'LastName', 'Sex', 'Age'}) ans = LastName Sex Age YPL-320 'SMITH' Male 38 GLI-532 'JOHNSON' Male 43 dsFemale = hospital(hospital.Se

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服