主要内容

gencfeatures

执行工程自动化特性分类

    描述

    gencfeatures函数允许您自动功能工程过程中机器学习工作流程。之前表格分类器训练数据,您可以创建新特性预测的数据通过使用gencfeatures。使用返回的数据来训练分类器。

    gencfeatures允许您从变量数据类型(如生成功能datetime,持续时间和各种int类型不支持大多数分类器训练功能。金宝app由此产生的特性数据类型所支持的这些培训功能。金宝app

    为了更好地理解生成的特性,使用描述函数返回的FeatureTransformer对象。应用相同的训练集功能转换到一个测试集,使用变换的函数FeatureTransformer对象。

    例子

    (变压器,NewTbl)= gencfeatures (资源描述,ResponseVarName,)使用自动化特性创建工程特性的预测资源描述。软件假定ResponseVarName变量资源描述响应,不从这个变量创建新功能。gencfeatures返回一个FeatureTransformer对象(变压器)和一个新表(NewTbl)包含转换功能。

    默认情况下,gencfeatures假设生成功能是用于火车可判断的二进制响应变量的线性模型。如果你有一个多级响应变量和你想生成特性改善的准确性袋装合奏,指定TargetLearner = "包"

    例子

    (变压器,NewTbl)= gencfeatures (资源描述,Y,)假设向量Y响应变量和变量的创建新功能吗资源描述

    (变压器,NewTbl)= gencfeatures (资源描述,公式,)使用解释性模型公式确定变量的响应资源描述的子集资源描述创建新特性的预测。

    例子

    (变压器,NewTbl)= gencfeatures (___,名称=值)指定选项使用一个或多个名称参数除了任何输入参数组合在以前的语法。例如,你可以改变预期的学习者类型,选择新特性的方法,改变了数据的标准化方法。

    例子

    全部折叠

    使用自动功能工程生成新特性。火车一个线性分类器使用生成的特性。解释生成的特性和训练之间的关系模型。

    加载病人数据集。创建一个表的一个子集变量。显示表的前几行。

    负载病人台=表(年龄、舒张压、性别、身高、SelfAssessedHealthStatus收缩压、体重、吸烟);头(台)
    ans =8×8表年龄舒张性别身高SelfAssessedHealthStatus收缩期体重吸烟者___ _____ _____ _____ ________________________ ________交38 93{‘男性’}71{‘优秀’}124 176真的43 77{‘男性’}69{‘公平’}109 163假38 83{‘女性’}64{‘好’}125 131假40 75{‘女性’}67{‘公平’}117 133假49 80{‘女性’}64{‘好’}122 119假46 70{‘女性’}68{‘好’}121 142假33 88{‘女性’}{‘好’}64 130 142真的40 82{‘男性’}{‘好’}68 115 180错误

    生成10个新特性的变量资源描述。指定吸烟者变量的响应。默认情况下,gencfeatures假设的新特性将被用来训练一个二进制线性分类器。

    rng (“默认”)%的再现性[T, NewTbl] = gencfeatures(资源描述,“抽烟”,10)
    T = FeatureTransformer属性:类型:“分类”TargetLearner:“线性”NumEngineeredFeatures: 10 NumOriginalFeatures: 0 TotalNumFeatures: 10
    NewTbl =100×11表zsc(收缩压。^ 2)eb8(舒张压)处置(收缩压)eb8(收缩压)处置(舒张压)zsc (kmd9) zsc (sin(年龄))zsc (sin(重量))zsc (Height-Systolic) zsc _______ _________________ (kmc1)吸烟者___________ * * * _________________ _____ _________________ ___________ ____________________ _____ _____ 0.15379 8 6 4 8真正-1.7207 0.50027 0.19202 0.40418 0.76177 -1.9421 - 2 1 1 2 0.30311 -0.22056 -1.1319 -0.4009 2.3431 1.1617假4 6 5 5 -0.85785 0.57695 0.50027 -1.037 -0.78898 -1.4456假2 2 2 2 -0.14125 0.83391 1.1495 1.3039 0.85162 -0.010294假3 5 4 4 -0.28697 1.779 -1.3083 -0.42387 -0.34154 0.99368假1 4 3 1 1.0677 0.67326 1.3761 -0.72529 0.40418 1.3755假6 8 6 6真正-0.42521 1.5181 -0.72529 -1.5347 -1.4456 -1.1361 - 4 2 2 5 -1.1361 -0.79995 1.1495 -1.0225 1.2991 1.1617假3 2 2 3 -0.71693 -0.80136 0.46343 1.0806 1.2991 -1.208假5 3 3 6 -1.2734 0.37961 -0.51304 0.16741 0.55333 -1.4456假2 1 1 2 -1.1361 1.2572 1.3025 1.0978 1.4482 -0.010294假1 2 2 1 0.60534 1.001 -1.2545 -1.2194 1.0008 -0.010294假1 6 5 1 1.0677 -0.98493 -0.11998 -1.211 -0.043252 -1.208假8 8 6 8 -1.2734 -0.27307 1.4659 1.2168 -0.34154 0.24706真的3 1 1 4 1.0677 0.93395 -1.3633 -0.17603 1.0008 -0.010294假7 8 6 8 -0.91396 -1.04 -1.2109 -0.49069 0.24706真实⋮

    T是一个FeatureTransformer对象,可以用于将新数据,和newTbl包含新功能产生的资源描述数据。

    为了更好地理解生成的特性,使用描述对象的函数FeatureTransformer对象。例如,检查前两个生成的功能。

    描述(T, 1:2)
    _______________________________________________________________类型IsOriginal数据源转换___________ __________ * * * zsc(收缩压。^ 2)数字虚假收缩力量(2)标准化与z分数(= 15119.54,std = 1667.5858) eb8(舒张压)分类错误的舒张Equal-width装箱(箱子的数量= 8)

    第一个功能newTbl是一个数值变量,由第一个平方的值收缩压变量,然后将结果转换为z得分。第二个特性newTbl是一个分类变量,由装箱的值舒张压变量为8箱的宽度相等。

    使用生成的特性适合一个线性分类器没有任何正规化。

    Mdl = fitclinear (NewTbl,“抽烟”λ= 0);

    情节的系数预测用于火车Mdl。请注意,fitclinear扩展分类预测拟合模型。

    p =长度(Mdl.Beta);[sortedCoefs, expandedIndex] = (Mdl.Beta ComparisonMethod =“abs”);sortedExpandedPreds = Mdl.ExpandedPredictorNames (expandedIndex);栏(sortedCoefs水平=“上”)yticks (1:2: p) yticklabels (sortedExpandedPreds(1:2:结束)包含(“系数”)ylabel (“扩展预测”)标题(“扩大了预测系数”)

    图包含一个坐标轴对象。坐标轴对象与标题扩展预测系数包含一个对象类型的酒吧。

    确定系数的预测有较大的绝对值。

    bigCoefs = abs (sortedCoefs) > = 4;翻转(sortedExpandedPreds (bigCoefs))
    ans =1 x7单元格列1到3 {zsc(收缩压。^ 2)”}{“eb8(收缩压)…'}{处置(舒张压)…“}”列4到6 {eb8(舒张压)…'}{(收缩压)> = 6处置的}{”游戏(舒张压)…'}列7 {“zsc (Height-Sys…”}

    您可以使用部分依赖情节分析水平的分类特征系数的绝对值。例如,检查的部分依赖图处置(舒张压)变量的水平(舒张压)> = 3(舒张压)> = 6与大型系数绝对值。这两个水平对应明显预测评分的变化。

    plotPartialDependence (Mdl“处置(舒张压)”、Mdl.ClassNames NewTbl);

    图包含一个坐标轴对象。坐标轴对象与标题部分依赖情节包含2线类型的对象。这些对象代表0,1。

    生成新特性来提高模型精度可判断的线性模型。比较线性模型的精度测试集训练对测试集的原始数据精度的线性模型训练转变特性。

    加载电离层数据集。转换矩阵的预测X一个表。

    负载电离层台= array2table (X);

    分区数据分为训练集和测试集。使用大约70%的观测数据作为训练数据,和30%的观测数据作为测试数据。分区数据使用cvpartition

    rng (“默认”)%的再现性分区本量利= cvpartition (Y,坚持= 0.3);trainIdx =培训(cvp);trainTbl =(资源(培训(cvp):);trainY = Y (trainIdx);testIdx =测试(cvp);testTbl =(资源(testIdx:);暴躁的= Y (testIdx);

    使用训练数据来生成45新特性。检查返回的FeatureTransformer对象。

    [T, newTrainTbl] = gencfeatures (trainTbl trainY 45);T
    T = FeatureTransformer属性:类型:“分类”TargetLearner:“线性”NumEngineeredFeatures: 45 NumOriginalFeatures: 0 TotalNumFeatures: 45

    所有生成的特性设计功能而不是原始的特征trainTbl

    应用转换存储在对象T测试数据。

    newTestTbl =变换(T, testTbl);

    比较线性分类器的测试集的表演训练在原始特性和线性分类器训练的新特性。

    适合没有改变数据的线性模型。检查测试集的性能使用混淆矩阵模型。

    originalMdl = fitclinear (trainTbl trainY);originalPredictedLabels =预测(originalMdl testTbl);厘米= confusionchart(暴躁的,originalPredictedLabels);

    图包含一个ConfusionMatrixChart类型的对象。

    confusionMatrix = cm.NormalizedValues;originalTestAccuracy =总和(诊断接头(confusionMatrix)) /笔(confusionMatrix,“所有”)
    originalTestAccuracy = 0.8952

    符合线性模型转换后的数据。检查测试集的性能使用混淆矩阵模型。

    newMdl = fitclinear (newTrainTbl trainY);newPredictedLabels =预测(newMdl newTestTbl);newcm = confusionchart(暴躁的,newPredictedLabels);

    图包含一个ConfusionMatrixChart类型的对象。

    newConfusionMatrix = newcm.NormalizedValues;newTestAccuracy =总和(诊断接头(newConfusionMatrix)) /笔(newConfusionMatrix,“所有”)
    newTestAccuracy = 0.9048

    线性分类器训练对转换后的数据似乎比原始数据的线性分类器训练。

    使用gencfeatures之前工程师新功能训练袋装系综分类器。之前预测新数据,应用相同的功能转换到新的数据集。比较测试集的性能,使用工程特性的测试集性能,使用原始的特性。

    样例文件读取CreditRating_Historical.dat一个表中。预测数据由财务比率和企业客户的行业信息列表。响应变量由评级机构的信用评级分配。预览数据集的前几行。

    creditrating = readtable (“CreditRating_Historical.dat”);头(creditrating)
    ans =8×8表ID WC_TA RE_TA EBIT_TA MVE_BVTD S_TA行业评级_____持续累积________ _____ ________ 62394 0.013 0.104 0.036 0.447 0.142 3 {“BB”} 48608 0.232 0.335 0.062 1.969 0.281 8 {A} 42444 0.311 0.367 0.074 1.935 0.366 1 {A} 48631 0.194 0.263 0.062 1.017 0.228 - 4 {BBB的}43768 0.121 0.413 0.057 3.647 0.466 12 {' AAA '} 39255 -0.117 -0.799 0.01 0.179 0.082 - 4 {“CCC”} 62236 0.087 0.158 0.049 0.816 0.324 - 2 {BBB的}39354 0.005 0.181 0.034 2.597 0.388 7 {“AA”}

    因为每个值ID变量是一个独特的客户ID,即长度(独特(creditrating.ID))等于观测的数量creditrating,ID变量是一个可怜的预测。删除ID从表中变量和转换行业变量,分类变量。

    creditrating = removevars (creditrating,“ID”);creditrating。行业= categorical(creditrating.Industry);

    转换评级响应变量的顺序分类变量。

    creditrating。评级= categorical(creditrating.Rating,(“AAA”,“AA”,“一个”," BBB ",“BB”,“B”,“CCC”),序数= true);

    分区数据分为训练集和测试集。使用大约75%的观测数据作为训练数据,和25%的观测数据作为测试数据。分区数据使用cvpartition

    rng (“默认”)%的再现性分区c = cvpartition (creditrating.Rating,坚持= 0.25);trainingIndices =培训(c);%训练集的指标testIndices =测试(c);%测试集的指标creditTrain = creditrating (trainingIndices:);信贷= creditrating (testIndices:);

    使用训练数据来生成40个新特性以适应袋装合奏。默认情况下,40特性包括原始特性,可以作为预测袋装合奏。

    [T, newCreditTrain] = gencfeatures (creditTrain“评级”现年40岁的TargetLearner =“包”);T
    T = FeatureTransformer属性:类型:“分类”TargetLearner:“袋子”NumEngineeredFeatures: 34 NumOriginalFeatures: 6 TotalNumFeatures: 40

    创建newCreditTest通过应用转换存储在对象T测试数据。

    newCreditTest =变换(T,信贷);

    比较测试集表演袋装合奏训练的原始特性和袋装合奏训练的新特性。

    使用原始训练集训练袋装合奏creditTrain。计算模型的准确性对原来的测试集信贷。可视化结果使用混淆矩阵。

    originalMdl = fitcensemble (creditTrain,“评级”方法=“包”);originalTestAccuracy = 1 -损失(originalMdl,信贷,“评级”LossFun =“classiferror”)
    originalTestAccuracy = 0.7604
    predictedTestLabels =预测(originalMdl、信贷);confusionchart (creditTest.Rating predictedTestLabels);

    图包含一个ConfusionMatrixChart类型的对象。

    使用转换后的训练集训练袋装合奏newCreditTrain。计算模型的准确性测试集转换newCreditTest。可视化结果使用混淆矩阵。

    newMdl = fitcensemble (newCreditTrain,“评级”方法=“包”);newTestAccuracy = 1 -损失(newMdl newCreditTest,“评级”LossFun =“classiferror”)
    newTestAccuracy = 0.7501
    newPredictedTestLabels =预测(newMdl newCreditTest);confusionchart (newCreditTest.Rating newPredictedTestLabels)

    图包含一个ConfusionMatrixChart类型的对象。

    袋装合奏训练对转换后的数据似乎比袋装合奏训练有素的原始数据。

    生成特征来训练一个线性分类器。计算模型的交叉验证分类错误使用crossval函数。

    加载电离层数据集,并创建一个包含预测的数据表。

    负载电离层台= array2table (X);

    创建一个随机的分区分层5倍交叉验证。

    rng (“默认”)%的再现性分区本量利= cvpartition (Y, KFold = 5);

    计算线性模型的交叉验证分类损失训练的原始特性资源描述

    CVMdl = fitclinear(资源描述,Y, CVPartition =利;cvloss = kfoldLoss (CVMdl)
    cvloss = 0.1339

    创建自定义函数myloss(如图所示的这个例子)。这个函数生成20从训练数据特征,然后同样的训练集转换适用于测试数据。然后函数符合线性分类器训练数据和计算测试集的损失。

    注意:如果你使用现场脚本文件对于本例,myloss功能已经包含在文件的末尾。否则,您需要创建这个函数的m文件或将它添加在MATLAB®文件路径。

    计算线性模型的交叉验证分类损失训练特征产生的预测因子资源描述

    newcvloss =意味着(crossval (@myloss台,Y,分区=利)
    newcvloss = 0.0686
    函数testloss = myloss (TrainTbl trainY TestTbl,暴躁的)[变压器,NewTrainTbl] = gencfeatures (TrainTbl trainY 20);NewTestTbl =变换(变压器、TestTbl);Mdl = fitclinear (NewTrainTbl trainY);testloss =损失(Mdl NewTestTbl,暴躁的,LossFun =“classiferror”);结束

    输入参数

    全部折叠

    原始特性,指定为一个表。每一行的资源描述对应于一个观察,每一列对应一个预测变量。可选地,资源描述响应变量可以包含一个额外的列。多列变量和细胞数组以外的细胞阵列的特征向量是不允许的,但是datetime,持续时间和各种int预测变量是允许的。

    • 如果资源描述包含响应变量,您希望创建新功能从任何剩余的变量资源描述通过使用,然后指定响应变量ResponseVarName

    • 如果资源描述包含响应变量,您希望创建新功能从只有一个子集的剩余的变量资源描述通过使用,然后指定一个公式公式

    • 如果资源描述不包含响应变量,然后指定一个响应变量通过使用Y。响应变量的长度的行数资源描述必须是相等的。

    数据类型:

    响应变量名称,指定为一个变量的名字资源描述

    您必须指定ResponseVarName作为一个特征向量或字符串标量。例如,如果响应变量Y存储为Tbl.Y,然后指定它“Y”。否则,软件将所有列资源描述为预测因子,可以创建新功能Y

    数据类型:字符|字符串

    的特性,指定为一个正整数标量。例如,您可以设置大约1.5 *大小(台,2),约为1.5倍的原始特性。

    数据类型:|

    响应变量与观测行,指定为一个数值向量,逻辑向量,字符串数组,单元阵列特征向量,或分类向量。Y资源描述必须有相同数量的行。

    数据类型:||逻辑|字符串|细胞|分类

    响应变量的解释模型和预测变量的一个子集,指定为一个特征向量或字符串标量形式“Y ~ X1 + X2 + X3”。在这种形式,Y代表的响应变量,X1,X2,X3代表了预测变量。

    创建新功能从只有一个子集的预测变量资源描述,使用一个公式。如果你指定一个公式,那么软件不会创建新功能从任何变量资源描述不出现在公式

    公式中的变量名必须两变量名资源描述(Tbl.Properties.VariableNamesMATLAB)和有效®标识符。您可以验证变量名资源描述通过使用isvarname函数。如果变量名是无效的,那么您可以将其转换使用matlab.lang.makeValidName函数。

    数据类型:字符|字符串

    名称-值参数

    指定可选的双参数作为Name1 = Value1,…,以=家,在那里的名字参数名称和吗价值相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。

    例子:gencfeatures(资源描述,“反应”10 TargetLearner =“袋”,FeatureSelection =“oob”)指定预期的学习者类型是袋装系综分类器和方法选择特性是一个out-of-bag,预测技术的重要性。

    将学习者类型,指定为“线性”“包”。软件创建和选择新特性假设他们将用于训练这种类型的模型。

    价值 预期模型
    “线性” ClassificationLinear——适合二进制分类
    “包” ClassificationBaggedEnsemble——适合二进制和多级分类

    默认情况下,TargetLearner“线性”只支持二进制响应金宝app变量。如果你有一个多级响应变量和你想产生新功能,您必须设置TargetLearner“包”

    例子:TargetLearner = "包"

    包括原始特性的方法资源描述在新表中NewTbl,指定为这个表中的值之一。

    价值 描述
    “汽车”

    这个值等于:

    • “选择”TargetLearner“线性”

    • “包括”TargetLearner“包”

    “包括”

    软件包括原始特性,可以作为预测目标的学习者,和不包括功能:

    • 不支金宝app持的,比如datetime持续时间变量

    • Constant-valued,包括与所有缺失或变量

    • 绝对独特的价值观

    • 分类类别比CategoricalEncodingLimit价值

    “选择” 支持的软件包括原始特性指定目标学习者和被认为是重要的特征选择方法(金宝appFeatureSelectionMethod)。
    “省略” 省略了原始功能的软件。

    注意,软件适用于指定的标准化方法TransformedDataStandardization名称-值参数包含在原始特性NewTbl

    例子:IncludeInputVariables = "包括"

    方法选择新特性,指定为这个表中的值之一。软件生成许多特性和使用这种方法来选择包括的重要特征NewTbl

    价值 描述
    “汽车”

    这个值等于:

    • “套索”TargetLearner“线性”

    • “oob”TargetLearner“包”

    “oob” Out-of-bag,预测重要性排列的估计——时可用TargetLearner“包”
    “mrmr” 最小冗余最大相关性(MRMR)——当可用TargetLearner“线性”“包”
    “套索” 套索正规化——时可用TargetLearner“线性”

    例子:FeatureSelection = " mrmr "

    转换后的数据标准化方法,指定为这个表中的值之一。软件标准化方法适用于工程特性和原始特征。

    价值 描述
    “汽车”

    这个值等于:

    • “zscore”TargetLearner“线性”

    • “没有”TargetLearner“包”

    “没有” 使用原始数据
    “zscore” 中心和规模意味着0和标准偏差1
    “疯了” 中心和规模值0,平均绝对偏差1
    “范围” 刻度范围的数据[0,1]

    例子:TransformedDataStandardization = "范围"

    最大数量的类别允许分类预测,指定为一个非负整数标量。如果分类预测超过指定数量的类别gencfeatures不会创建新特性的预测,不包括新表的预测吗NewTbl。默认值是50TargetLearner“线性”TargetLearner“包”

    例子:CategoricalEncodingLimit = 20

    数据类型:|

    输出参数

    全部折叠

    变压器设计特性,作为一个返回FeatureTransformer对象。为了更好地理解工程特性,使用描述对象的函数变压器。应用相同的功能转换一个新的数据集,使用变换对象的函数变压器

    生成的功能,作为一个表返回。每一行对应一个观察,每一列对应一个生成的功能。如果响应变量是包含在资源描述,然后NewTbl还包括响应变量。用这个表来训练一个分类模型的类型TargetLearner

    NewTbl按照以下顺序包含生成的特性:原始特性,工程特性作为排名的特征选择方法,和响应变量。

    提示

    • 默认情况下,当TargetLearner“线性”,数值预测的软件生成新功能通过使用z得分(见TransformedDataStandardization)。你可以改变的类型的标准化转换功能。然而,使用一些标准化的方法,从而避免了“没有”规范,强烈建议。与标准化数据线性模型拟合效果最好。

    介绍了R2021a