このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
gencfeatures
構文
説明
関数 gencfeatures
では、特徴量エンジニアリング プロセスを機械学習ワークフローのコンテキストで自動化できます。表形式の学習データを分類器に渡す前に、gencfeatures
を使用してデータ内の予測子から新しい特徴量を作成できます。返されたデータを使用して分類器に学習させます。
gencfeatures
を使用すると、datetime
、duration
やさまざまな int
型など、ほとんどの分類器の学習関数でサポートされないデータ型の変数から特徴量を生成できます。結果の特徴量には、これらの学習関数でサポートされるデータ型が含まれています。
生成された特徴量について詳しく確認するには、返された FeatureTransformer
オブジェクトの関数 describe
を使用します。学習セットと同じ特徴変換をテスト セットに適用するには、FeatureTransformer
オブジェクトの関数 transform
を使用します。
[
は、自動特徴量エンジニアリングを使用して Transformer
,NewTbl
] = gencfeatures(Tbl
,ResponseVarName
,q
)Tbl
内の予測子から q
個の特徴量を作成します。Tbl
内の変数 ResponseVarName
は応答と見なされ、この変数からは新しい特徴量を作成しないものと仮定されます。gencfeatures
は、FeatureTransformer
オブジェクト (Transformer
) と変換された特徴量が格納された新しい table (NewTbl
) を返します。
既定では、gencfeatures
は、生成された特徴量を二項応答変数をもつ解釈可能な線形モデルの学習に使用するものと仮定します。マルチクラス応答変数があり、バギング アンサンブルの精度を向上させるために特徴量を生成する場合は、TargetLearner="bag"
を指定します。
[
は、説明モデル Transformer
,NewTbl
] = gencfeatures(Tbl
,formula
,q
)formula
を使用して、Tbl
内の応答変数と Tbl
内の新しい特徴量の作成に使用する予測子のサブセットを判別します。
[
では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、想定される学習器のタイプ、新しい特徴量の選択方法、変換されたデータの標準化方法を変更できます。Transformer
,NewTbl
] = gencfeatures(___,Name=Value
)
例
生成された特徴量をもつ線形モデルの解釈
自動特徴量エンジニアリングを使用して新しい特徴量を生成します。生成された特徴量を使用して線形分類器に学習させます。生成された特徴量と学習させたモデルの関係を解釈します。
patients
データ セットを読み込みます。変数のサブセットから table を作成します。テーブルの最初の数行を表示します。
load patients Tbl = table(Age,Diastolic,Gender,Height,SelfAssessedHealthStatus, ... Systolic,Weight,Smoker); head(Tbl)
Age Diastolic Gender Height SelfAssessedHealthStatus Systolic Weight Smoker ___ _________ __________ ______ ________________________ ________ ______ ______ 38 93 {'Male' } 71 {'Excellent'} 124 176 true 43 77 {'Male' } 69 {'Fair' } 109 163 false 38 83 {'Female'} 64 {'Good' } 125 131 false 40 75 {'Female'} 67 {'Fair' } 117 133 false 49 80 {'Female'} 64 {'Good' } 122 119 false 46 70 {'Female'} 68 {'Good' } 121 142 false 33 88 {'Female'} 64 {'Good' } 130 142 true 40 82 {'Male' } 68 {'Good' } 115 180 false
Tbl
の変数から新しい特徴量を 10 個生成します。応答として変数 Smoker
を指定します。gencfeatures
では、既定では新しい特徴量をバイナリ線形分類器の学習に使用すると見なします。
rng("default") % For reproducibility [T,NewTbl] = gencfeatures(Tbl,"Smoker",10)
T = FeatureTransformer with properties: Type: 'classification' TargetLearner: 'linear' NumEngineeredFeatures: 10 NumOriginalFeatures: 0 TotalNumFeatures: 10
NewTbl=100×11 table
zsc(Systolic.^2) eb8(Diastolic) q8(Systolic) eb8(Systolic) q8(Diastolic) zsc(kmd9) zsc(sin(Age)) zsc(sin(Weight)) zsc(Height-Systolic) zsc(kmc1) Smoker
________________ ______________ ____________ _____________ _____________ _________ _____________ ________________ ____________________ _________ ______
0.15379 8 6 4 8 -1.7207 0.50027 0.19202 0.40418 0.76177 true
-1.9421 2 1 1 2 -0.22056 -1.1319 -0.4009 2.3431 1.1617 false
0.30311 4 6 5 5 0.57695 0.50027 -1.037 -0.78898 -1.4456 false
-0.85785 2 2 2 2 0.83391 1.1495 1.3039 0.85162 -0.010294 false
-0.14125 3 5 4 4 1.779 -1.3083 -0.42387 -0.34154 0.99368 false
-0.28697 1 4 3 1 0.67326 1.3761 -0.72529 0.40418 1.3755 false
1.0677 6 8 6 6 -0.42521 1.5181 -0.72529 -1.5347 -1.4456 true
-1.1361 4 2 2 5 -0.79995 1.1495 -1.0225 1.2991 1.1617 false
-1.1361 3 2 2 3 -0.80136 0.46343 1.0806 1.2991 -1.208 false
-0.71693 5 3 3 6 0.37961 -0.51304 0.16741 0.55333 -1.4456 false
-1.2734 2 1 1 2 1.2572 1.3025 1.0978 1.4482 -0.010294 false
-1.1361 1 2 2 1 1.001 -1.2545 -1.2194 1.0008 -0.010294 false
0.60534 1 6 5 1 -0.98493 -0.11998 -1.211 -0.043252 -1.208 false
1.0677 8 8 6 8 -0.27307 1.4659 1.2168 -0.34154 0.24706 true
-1.2734 3 1 1 4 0.93395 -1.3633 -0.17603 1.0008 -0.010294 false
1.0677 7 8 6 8 -0.91396 -1.04 -1.2109 -0.49069 0.24706 true
⋮
T
は新しいデータの変換に使用できる FeatureTransformer
オブジェクトで、newTbl
には Tbl
のデータから生成された新しい特徴量が格納されます。
生成された特徴量について詳しく確認するには、FeatureTransformer
オブジェクトのオブジェクト関数 describe
を使用します。たとえば、生成された最初の 2 つの特徴量を調べます。
describe(T,1:2)
Type IsOriginal InputVariables Transformations ___________ __________ ______________ _______________________________________________________________ zsc(Systolic.^2) Numeric false Systolic power( ,2) Standardization with z-score (mean = 15119.54, std = 1667.5858) eb8(Diastolic) Categorical false Diastolic Equal-width binning (number of bins = 8)
newTbl
の 1 つ目の特徴量は数値変数で、変数 Systolic
の値を二乗してから、その結果を z スコアに変換して作成されています。newTbl
の 2 つ目の特徴量はカテゴリカル変数で、変数 Diastolic
の値を 8 個の同じ幅のビンにビン化して作成されています。
生成された特徴量を使用して、正則化なしで線形分類器を当てはめます。
Mdl = fitclinear(NewTbl,"Smoker",Lambda=0);
Mdl
の学習に使用された予測子の係数をプロットします。fitclinear
では、モデルを当てはめる前にカテゴリカル予測子が展開されることに注意してください。
p = length(Mdl.Beta); [sortedCoefs,expandedIndex] = sort(Mdl.Beta,ComparisonMethod="abs"); sortedExpandedPreds = Mdl.ExpandedPredictorNames(expandedIndex); bar(sortedCoefs,Horizontal="on") yticks(1:2:p) yticklabels(sortedExpandedPreds(1:2:end)) xlabel("Coefficient") ylabel("Expanded Predictors") title("Coefficients for Expanded Predictors")
係数の絶対値が大きい予測子を特定します。
bigCoefs = abs(sortedCoefs) >= 4; flip(sortedExpandedPreds(bigCoefs))
ans = 1x7 cell
{'zsc(Systolic.^2)'} {'eb8(Systolic) >= 5'} {'eb8(Diastolic) >= 3'} {'q8(Diastolic) >= 3'} {'q8(Systolic) >= 6'} {'q8(Diastolic) >= 6'} {'zsc(Height-Systolic)'}
部分依存プロットを使用して、絶対値に関して大きな係数をもつレベルのカテゴリカル特徴量を解析できます。たとえば、q8(Diastolic) >= 3
と q8(Diastolic) >= 6
のレベルで係数の絶対値が大きくなっている変数 q8(Diastolic)
の部分依存プロットを調べます。これらの 2 つのレベルは、予測スコアの目立った変化に対応します。
plotPartialDependence(Mdl,"q8(Diastolic)",Mdl.ClassNames,NewTbl);
解釈可能な線形モデルの精度の向上
解釈可能な線形モデルのモデルの精度を向上させるために新しい特徴量を生成します。元のデータで学習させた線形モデルのテスト セットの精度と変換された特徴量で学習させた線形モデルのテスト セットの精度を比較します。
ionosphere
データ セットを読み込みます。予測子の行列 X
を table に変換します。
load ionosphere
tbl = array2table(X);
データを学習セットとテスト セットに分割します。観測値の約 70% を学習データとして使用し、観測値の約 30% をテスト データとして使用します。データの分割には cvpartition
を使用します。
rng("default") % For reproducibility of the partition cvp = cvpartition(Y,Holdout=0.3); trainIdx = training(cvp); trainTbl = tbl(training(cvp),:); trainY = Y(trainIdx); testIdx = test(cvp); testTbl = tbl(testIdx,:); testY = Y(testIdx);
学習データを使用して新しい特徴量を 45 個生成します。返された FeatureTransformer
オブジェクトを調べます。
[T,newTrainTbl] = gencfeatures(trainTbl,trainY,45); T
T = FeatureTransformer with properties: Type: 'classification' TargetLearner: 'linear' NumEngineeredFeatures: 45 NumOriginalFeatures: 0 TotalNumFeatures: 45
生成された特徴量はいずれも、trainTbl
内の元の特徴量ではなく、設計された特徴量です。
オブジェクト T
に格納された変換をテスト データに適用します。
newTestTbl = transform(T,testTbl);
元の特徴量で学習させた線形分類器と新しい特徴量で学習させた線形分類器のテスト セットの性能を比較します。
データを変換せずに線形モデルを当てはめます。混同行列を使用してモデルのテスト セット性能を確認します。
originalMdl = fitclinear(trainTbl,trainY); originalPredictedLabels = predict(originalMdl,testTbl); cm = confusionchart(testY,originalPredictedLabels);
confusionMatrix = cm.NormalizedValues;
originalTestAccuracy = sum(diag(confusionMatrix))/sum(confusionMatrix,"all")
originalTestAccuracy = 0.8952
変換されたデータで線形モデルを当てはめます。混同行列を使用してモデルのテスト セット性能を確認します。
newMdl = fitclinear(newTrainTbl,trainY); newPredictedLabels = predict(newMdl,newTestTbl); newcm = confusionchart(testY,newPredictedLabels);
newConfusionMatrix = newcm.NormalizedValues;
newTestAccuracy = sum(diag(newConfusionMatrix))/sum(newConfusionMatrix,"all")
newTestAccuracy = 0.9238
変換後のデータで学習させた線形分類器の方が、元のデータで学習させた線形分類器よりも性能が高くなっていることがわかります。
新しい特徴量の生成によるバギング アンサンブルの精度の向上
バギング アンサンブル分類器に学習させる前に、gencfeatures
を使用して新しい特徴量を設計します。新しいデータの予測の前に同じ特徴変換を新しいデータ セットに適用します。設計した特徴量を使用するアンサンブルのテスト セット性能と元の特徴量を使用するアンサンブルのテスト セット性能を比較します。
標本ファイル CreditRating_Historical.dat
を table に読み取ります。予測子データは、法人顧客リストの財務比率と業種の情報で構成されます。応答変数は、格付機関が割り当てた格付けから構成されます。データ セットの最初の数行をプレビューします。
creditrating = readtable("CreditRating_Historical.dat");
head(creditrating)
ID WC_TA RE_TA EBIT_TA MVE_BVTD S_TA Industry Rating _____ ______ ______ _______ ________ _____ ________ _______ 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 であるため (つまり、length(unique(creditrating.ID))
は creditrating
に含まれる観測値の数に等しい)、変数 ID
は予測子としては適切ではありません。変数 ID
を table から削除し、変数 Industry
を categorical
変数に変換します。
creditrating = removevars(creditrating,"ID");
creditrating.Industry = categorical(creditrating.Industry);
応答変数 Rating
を順序 categorical
変数に変換します。
creditrating.Rating = categorical(creditrating.Rating, ... ["AAA","AA","A","BBB","BB","B","CCC"],Ordinal=true);
データを学習セットとテスト セットに分割します。観測値の約 75% を学習データとして使用し、観測値の約 25% をテスト データとして使用します。データの分割には cvpartition
を使用します。
rng("default") % For reproducibility of the partition c = cvpartition(creditrating.Rating,Holdout=0.25); trainingIndices = training(c); % Indices for the training set testIndices = test(c); % Indices for the test set creditTrain = creditrating(trainingIndices,:); creditTest = creditrating(testIndices,:);
学習データを使用して、バギング アンサンブルの当てはめに使用する新しい特徴量を 40 個生成します。既定では、40 個の特徴量の中にバギング アンサンブルで予測子として使用できる元の特徴量が含まれます。
[T,newCreditTrain] = gencfeatures(creditTrain,"Rating",40, ... TargetLearner="bag"); T
T = FeatureTransformer with properties: Type: 'classification' TargetLearner: 'bag' NumEngineeredFeatures: 34 NumOriginalFeatures: 6 TotalNumFeatures: 40
オブジェクト T
に格納された変換をテスト データに適用して newCreditTest
を作成します。
newCreditTest = transform(T,creditTest);
元の特徴量で学習させたバギング アンサンブルと新しい特徴量で学習させたバギング アンサンブルのテスト セットの性能を比較します。
元の学習セット creditTrain
を使用してバギング アンサンブルに学習させます。元のテスト セット creditTest
でモデルの精度を計算します。混同行列を使用して結果を可視化します。
originalMdl = fitcensemble(creditTrain,"Rating",Method="Bag"); originalTestAccuracy = 1 - loss(originalMdl,creditTest, ... "Rating",LossFun="classiferror")
originalTestAccuracy = 0.7542
predictedTestLabels = predict(originalMdl,creditTest); confusionchart(creditTest.Rating,predictedTestLabels);
変換後の学習セット newCreditTrain
を使用してバギング アンサンブルに学習させます。変換後のテスト セット newCreditTest
でモデルの精度を計算します。混同行列を使用して結果を可視化します。
newMdl = fitcensemble(newCreditTrain,"Rating",Method="Bag"); newTestAccuracy = 1 - loss(newMdl,newCreditTest, ... "Rating",LossFun="classiferror")
newTestAccuracy = 0.7511
newPredictedTestLabels = predict(newMdl,newCreditTest); confusionchart(newCreditTest.Rating,newPredictedTestLabels)
変換後のデータで学習させたバギング アンサンブルの方が元のデータで学習させたバギング アンサンブルよりも性能が高くなっていることがわかります。
SVM 分類器に学習させる新しい特徴量の生成
ガウス カーネルを使用したバイナリ サポート ベクター マシン (SVM) 分類器に学習させる前に、新しい特徴量を設計して検査します。その後、分類器のテスト セット性能を評価します。
レーダー信号のデータを含む ionosphere
データ セットを読み込みます。応答変数 Y
はレーダー反射の品質を示し、g
は品質が良好であり、b
は品質が不良であることを示します。予測子と応答のデータを 1 つの table 変数に結合します。
load ionosphere
Tbl = array2table(X);
Tbl.Y = Y;
head(Tbl)
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29 X30 X31 X32 X33 X34 Y __ __ _______ ________ ________ ________ ________ ________ _______ ________ _______ ________ _______ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ _____ 1 0 0.99539 -0.05889 0.85243 0.02306 0.83398 -0.37708 1 0.0376 0.85243 -0.17755 0.59755 -0.44945 0.60536 -0.38223 0.84356 -0.38542 0.58212 -0.32192 0.56971 -0.29674 0.36946 -0.47357 0.56811 -0.51171 0.41078 -0.46168 0.21266 -0.3409 0.42267 -0.54487 0.18641 -0.453 {'g'} 1 0 1 -0.18829 0.93035 -0.36156 -0.10868 -0.93597 1 -0.04549 0.50874 -0.67743 0.34432 -0.69707 -0.51685 -0.97515 0.05499 -0.62237 0.33109 -1 -0.13151 -0.453 -0.18056 -0.35734 -0.20332 -0.26569 -0.20468 -0.18401 -0.1904 -0.11593 -0.16626 -0.06288 -0.13738 -0.02447 {'b'} 1 0 1 -0.03365 1 0.00485 1 -0.12062 0.88965 0.01198 0.73082 0.05346 0.85443 0.00827 0.54591 0.00299 0.83775 -0.13644 0.75535 -0.0854 0.70887 -0.27502 0.43385 -0.12062 0.57528 -0.4022 0.58984 -0.22145 0.431 -0.17365 0.60436 -0.2418 0.56045 -0.38238 {'g'} 1 0 1 -0.45161 1 1 0.71216 -1 0 0 0 0 0 0 -1 0.14516 0.54094 -0.3933 -1 -0.54467 -0.69975 1 0 0 1 0.90695 0.51613 1 1 -0.20099 0.25682 1 -0.32382 1 {'b'} 1 0 1 -0.02401 0.9414 0.06531 0.92106 -0.23255 0.77152 -0.16399 0.52798 -0.20275 0.56409 -0.00712 0.34395 -0.27457 0.5294 -0.2178 0.45107 -0.17813 0.05982 -0.35575 0.02309 -0.52879 0.03286 -0.65158 0.1329 -0.53206 0.02431 -0.62197 -0.05707 -0.59573 -0.04608 -0.65697 {'g'} 1 0 0.02337 -0.00592 -0.09924 -0.11949 -0.00763 -0.11824 0.14706 0.06637 0.03786 -0.06302 0 0 -0.04572 -0.1554 -0.00343 -0.10196 -0.11575 -0.05414 0.01838 0.03669 0.01519 0.00888 0.03513 -0.01535 -0.0324 0.09223 -0.07859 0.00732 0 0 -0.00039 0.12011 {'b'} 1 0 0.97588 -0.10602 0.94601 -0.208 0.92806 -0.2835 0.85996 -0.27342 0.79766 -0.47929 0.78225 -0.50764 0.74628 -0.61436 0.57945 -0.68086 0.37852 -0.73641 0.36324 -0.76562 0.31898 -0.79753 0.22792 -0.81634 0.13659 -0.8251 0.04606 -0.82395 -0.04262 -0.81318 -0.13832 -0.80975 {'g'} 0 0 0 0 0 0 1 -1 0 0 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 {'b'}
データを学習セットとテスト セットに分割します。観測値の約 75% を学習データとして使用し、観測値の約 25% をテスト データとして使用します。データの分割には cvpartition
を使用します。
rng("default") % For reproducibility of the partition c = cvpartition(Tbl.Y,Holdout=0.25); trainTbl = Tbl(training(c),:); testTbl = Tbl(test(c),:);
学習データを使用して、ガウス カーネルを使用したバイナリ SVM 分類器の当てはめに使用する特徴量を 50 個生成します。既定では、50 個の特徴量の中に SVM 分類器で予測子として使用できる元の特徴量が含まれます。さらに、gencfeatures
は、近傍成分分析 (NCA) を使用して、設計された特徴量のセットを最も重要な予測子に絞り込みます。NCA 特徴選択手法は、ターゲットの学習器が "gaussian-svm"
の場合にのみ使用できます。
[Transformer,newTrainTbl] = gencfeatures(trainTbl,"Y",50, ... TargetLearner="gaussian-svm")
Transformer = FeatureTransformer with properties: Type: 'classification' TargetLearner: 'gaussian-svm' NumEngineeredFeatures: 17 NumOriginalFeatures: 33 TotalNumFeatures: 50
newTrainTbl=264×51 table
zsc(X1) zsc(X3) zsc(X4) zsc(X5) zsc(X6) zsc(X7) zsc(X8) zsc(X9) zsc(X10) zsc(X11) zsc(X12) zsc(X13) zsc(X14) zsc(X15) zsc(X16) zsc(X17) zsc(X18) zsc(X19) zsc(X20) zsc(X21) zsc(X22) zsc(X23) zsc(X24) zsc(X25) zsc(X26) zsc(X27) zsc(X28) zsc(X29) zsc(X30) zsc(X31) zsc(X32) zsc(X33) zsc(X34) zsc(X1.*X29) zsc(X10.*X21) zsc(X10.*X33) zsc(X4+X6) zsc(X5+X6) zsc(X8+X21) zsc(X1-X7) zsc(kmc2) zsc(kmc6) q13(X3) q12(X5) q15(X6) q13(X7) q15(X21) q14(X27) eb8(X5) eb8(X7) Y
_______ ________ _________ _______ ________ ________ ________ ________ ________ _________ _________ ________ ___________ ________ ________ ________ ________ ________ _________ ________ _________ _________ ________ ________ ________ _________ ________ ________ ________ ________ __________ ________ _________ ____________ _____________ _____________ __________ __________ ___________ __________ _________ _________ _______ _______ _______ _______ ________ ________ _______ _______ _____
0.35062 0.71387 -0.24103 0.48341 -0.19017 0.58078 -1.0063 0.97782 -0.26974 0.6391 -0.67348 0.31834 -1.1367 0.38853 -0.98325 0.75294 -0.77965 0.3598 -0.57266 0.38845 -0.60939 -0.012451 -0.80961 0.28949 -0.84597 -0.2517 -0.72759 -0.28242 -0.63852 0.080034 -1.0708 -0.31129 -1.046 -0.26816 0.25043 -0.038585 -0.3418 0.2362 -0.42505 -0.33933 1.0418 1.0355 12 8 7 9 9 6 7 7 {'g'}
0.35062 0.72301 -0.18451 0.77158 -0.22962 0.91433 -0.49033 0.75792 -0.32357 0.42329 -0.20389 0.73252 -0.1965 0.29679 -0.13823 0.74354 -0.27428 0.64142 -0.10244 0.6146 -0.56742 0.09598 -0.12919 0.30176 -0.62944 0.094562 -0.28922 0.096446 -0.30619 0.41 -0.47923 0.4091 -0.8911 0.14996 0.214 -0.039539 -0.3295 0.42742 0.21888 -0.65367 0.5226 0.75088 13 12 6 13 10 8 8 8 {'g'}
0.35062 0.72301 -1.1204 0.77158 1.9267 0.33603 -2.2596 -1.0149 -0.34873 -0.87362 -0.31257 -0.64512 -0.21349 -2.0888 0.17363 0.26338 -0.79564 -2.2123 -1.0155 -1.6745 1.8964 -0.63461 0.10334 1.0283 1.9591 -0.047978 1.9396 1.0838 -0.36052 -0.22117 1.9446 -1.294 2.1421 1.2396 0.19008 -0.061281 0.6801 1.8984 -3.5052 -0.10868 -1.5842 -1.337 13 12 15 7 2 7 8 7 {'b'}
0.35062 -1.2136 -0.12242 -1.375 -0.49905 -1.1101 -0.48554 -0.72188 -0.2093 -0.80643 -0.44067 -0.64512 -0.21349 -0.61619 -0.48568 -0.61727 -0.20429 -0.77473 -0.040295 -0.50751 0.034923 -0.60903 0.12046 -0.62226 0.13548 -1.1087 0.28317 -0.7878 0.053398 -0.68758 -0.0072697 -0.67106 0.21145 -0.8259 0.19351 -0.061365 -0.49849 -1.3813 -0.90111 1.2542 -1.5842 -1.337 3 1 2 2 6 2 4 4 {'b'}
0.35062 0.67519 -0.34656 0.66615 -0.69083 0.7698 -0.81803 0.69875 -0.92315 0.54191 -1.2868 0.61614 -1.2563 0.60599 -1.4924 0.32568 -1.3793 0.02881 -1.3967 0.052918 -1.5154 -0.097458 -1.4342 -0.29246 -1.4483 -0.78193 -1.3907 -0.5715 -1.5984 -0.76498 -1.5945 -0.93671 -1.8288 -0.58719 -0.089744 0.061186 -0.8284 0.032979 -0.60879 -0.51746 1.0418 1.0355 12 10 1 11 7 4 8 8 {'g'}
-2.8413 -1.2599 -0.10917 -1.1812 -0.24013 0.91433 -2.2596 -1.0149 -0.34873 -2.6482 -2.3453 -0.64512 -0.21349 -0.54564 -0.14479 1.006 2.0324 -2.2123 -1.9207 -0.53738 -0.035976 -0.63461 0.10334 1.0283 2.1431 0.88773 1.9396 -0.65143 0.038853 1.1285 1.9446 -0.67031 -0.052094 -0.6754 0.19008 -0.061281 -0.27913 -1.0579 -2.3662 -2.5471 -1.5842 -1.337 3 3 6 13 5 14 5 8 {'b'}
0.35062 0.65074 -0.27034 0.77158 -0.5507 0.91433 -0.67645 0.97782 -1.1087 0.76913 -1.1982 0.87871 -1.0489 0.84926 -1.1622 0.9786 -0.71297 0.78777 -1.2452 0.68706 -1.2068 0.53806 -1.1348 0.77353 -1.1281 0.067353 -1.1572 -0.21008 -1.2312 0.13174 -1.4278 0.078797 -1.663 -0.18832 -0.57784 -0.51689 -0.65574 0.20838 0.14089 -0.65367 1.0418 1.0355 11 12 2 13 10 7 8 8 {'g'}
0.35062 -1.2969 -0.29857 -1.1812 -0.24013 -1.0948 -0.24765 -0.78637 -0.91197 -1.684 -1.0885 -0.64512 -0.21349 -1.065 0.70198 -1.2124 0.3075 0.44948 0.507 -0.53738 -0.035976 -0.63461 0.10334 -0.93558 0.13961 -0.64684 0.073011 -0.65143 0.038853 -0.3862 0.46286 -0.82839 0.78311 -0.6754 0.19008 0.0099774 -0.42709 -1.0579 -0.73858 1.2397 -1.5842 -1.337 2 3 6 3 5 4 5 5 {'b'}
0.35062 0.72301 0.039848 0.77158 -0.63857 0.91433 -0.79731 0.97782 -1.2544 0.90098 -1.1531 0.90648 -1.2791 0.85418 -1.4394 0.83179 -1.3466 0.54942 -1.3441 0.61066 -1.5108 0.42766 -1.4494 0.27335 -1.5965 -0.1331 -1.4636 0.047912 -1.6238 -0.12466 -1.7462 -0.22743 -2.0084 0.096399 -0.66792 -0.38227 -0.48436 0.14844 -0.033402 -0.65367 1.0418 1.0355 13 12 1 13 10 7 8 8 {'g'}
0.35062 0.72301 -1.323 0.77158 -2.4069 0.91433 -2.2596 0.97782 0.41213 0.90098 -1.1484 0.96723 1.8407 0.99753 -2.3384 1.006 -0.59315 1.0392 -1.7935 1.0877 1.8964 1.0494 2.0312 1.0283 -0.64265 0.88773 -1.0301 1.0838 -1.9482 1.1285 -1.9591 1.2557 -2.2463 1.2396 1.2105 1.1115 -2.9765 -1.0579 -0.73858 -0.65367 1.0418 1.0355 13 12 1 13 15 14 8 8 {'b'}
0.35062 0.72301 0.056082 0.77158 -0.16603 0.91433 -0.35958 0.97782 -0.16462 0.90098 0.086893 0.96723 0.20409 0.99753 0.13566 1.006 0.21703 1.0392 0.60585 1.0877 0.82892 1.0494 0.90821 1.0283 0.56194 0.88773 0.78535 1.0075 1.0054 1.1285 0.62693 1.2557 0.97284 1.1554 0.437 0.22251 -0.090217 0.47081 0.79852 -0.65367 0.5226 0.75088 13 12 8 13 15 14 8 8 {'g'}
0.35062 -0.24996 -2.2139 0.77158 0.33858 -1.1655 -2.2596 0.97782 -2.4496 -0.098384 -2.3453 -0.64512 -0.21349 -2.0888 -0.89643 -1.2213 0.076204 1.0392 -1.9207 -0.53738 -0.035976 -0.63461 0.10334 -0.96039 1.9896 -0.27735 0.59845 -0.65143 0.038853 1.1285 0.44533 -0.67031 -0.052094 -0.6754 0.19008 -0.061281 -1.4561 0.81505 -2.3662 1.3064 -1.5842 -1.337 5 12 11 2 5 6 8 4 {'b'}
0.35062 0.71598 0.035661 0.77158 -0.26691 0.87035 -0.1974 0.90034 -0.30016 0.8881 -0.15385 0.79508 -0.00095871 0.90821 -0.02921 0.82498 0.22838 0.81324 0.23893 0.78923 0.19262 0.77433 0.38176 0.70892 0.43102 0.49084 0.36373 0.72129 0.34444 0.71304 0.30366 0.69599 0.21153 0.83955 0.24325 -0.0081697 -0.18761 0.40198 0.63077 -0.61223 0.5226 0.75088 12 12 4 12 11 10 8 8 {'g'}
0.35062 0.069941 -0.052561 0.11987 -0.13112 0.054366 0.1298 -0.84005 0.36726 0.2554 -0.065971 0.35614 0.079956 0.66786 0.095978 0.3326 0.37109 -0.35253 0.8869 0.33835 0.37612 0.23129 0.53951 0.1531 0.63492 -0.15329 0.56409 0.10222 0.54169 0.050904 0.49615 1.2557 0.67277 0.15634 0.70752 1.0423 -0.14691 0.0012868 0.44389 0.15675 0.5226 0.75088 6 6 8 6 8 6 7 6 {'g'}
-2.8413 0.72301 -2.3483 -1.1812 -0.24013 -1.0948 -0.24765 0.97782 1.7521 0.90098 -2.3453 -1.804 1.8407 -0.54564 -0.14479 -2.2295 2.0324 1.0392 2.0554 -2.1625 1.8964 1.0494 1.1877 -2.393 2.1431 0.88773 1.9396 1.0838 -1.9482 1.1285 1.9446 1.2557 2.1421 -0.6754 -2.6274 3.1769 -2.0283 -1.0579 -2.3662 -0.65367 0.92994 0.89071 13 3 6 3 1 14 5 5 {'b'}
-2.8413 0.72301 2.13 -1.1812 -0.24013 -1.0948 -0.24765 -3.0077 -2.4496 -0.87362 -0.31257 -0.64512 -0.21349 -2.0888 -2.3384 -2.2295 -2.0271 -2.2123 2.0554 -2.1625 1.8964 -0.63461 0.10334 -0.68235 0.16583 0.88773 -1.7099 -2.3866 2.0259 -2.5037 1.9446 -2.5963 2.1421 -0.6754 3.0075 3.1769 1.47 -1.0579 -2.3662 -0.65367 -1.5842 -1.337 13 3 6 3 1 14 5 5 {'b'}
⋮
既定では、gencfeatures
は、元の特徴量を newTrainTbl
に含める前に標準化します。trainTbl
内の元の変数 X2
は、定数値 0
をもつため newTrainTbl
に含まれません。
unique(trainTbl.X2)
ans = 0
設計された最初の 3 つの特徴量を検査します。設計された特徴量は、Transformer
オブジェクトにおいて、元の 33 個の特徴量の後に格納されることに注意してください。散布図とヒストグラムの行列を使用して、設計された特徴量を可視化します。
featIndex = 34:36; describe(Transformer,featIndex)
Type IsOriginal InputVariables Transformations _______ __________ ______________ ______________________________________________________________ zsc(X1.*X29) Numeric false X1, X29 X1 .* X29 Standardization with z-score (mean = 0.35269, std = 0.5222) zsc(X10.*X21) Numeric false X10, X21 X10 .* X21 Standardization with z-score (mean = -0.067464, std = 0.35493) zsc(X10.*X33) Numeric false X10, X33 X10 .* X33 Standardization with z-score (mean = 0.018924, std = 0.30881)
gplotmatrix(newTrainTbl{:,featIndex},[],newTrainTbl.Y,[], ... [],[],[],"grpbars", ... newTrainTbl.Properties.VariableNames(featIndex))
プロットは設計された特徴量について詳しく確認するのに役立ちます。以下に例を示します。
左上のプロットは、特徴量
zsc(X1.*X29)
のヒストグラムです。この特徴量は、元の特徴量X1
とX29
の標準化された要素単位の積で構成されます。このヒストグラムから、良好なレーダー反射に対応する値 (青) の分布が不良なレーダー反射に対応する値 (赤) の分布と異なっていることがわかります。たとえば、不良なレーダー反射に対応するzsc(X1.*X29)
の値の多くは –1 から –0.5 までの間にあります。2 行目の 1 列目にあるプロットは、
zsc(X1.*X29)
の値 (x 軸方向) をzsc(X8.*X14)
の値 (y 軸方向) と比較する散布図です。この散布図から、良好なレーダー反射に対応するzsc(X8.*X14)
の値 (青) のほとんどが –1 より大きく、不良なレーダー反射に対応するzsc(X8.*X14)
の値 (赤) の多くが 1 より小さいことがわかります。このプロットに含まれる情報は 1 行目の 2 列目にあるプロットと同じですが、座標軸が入れ替わっていることに注意してください。
オブジェクト Transformer
に格納された変換をテスト データに適用して newTestTbl
を作成します。
newTestTbl = transform(Transformer,testTbl);
変換後の学習セット newTrainTbl
を使用して、ガウス カーネルを使用した SVM 分類器に学習させます。関数 fitcsvm
でカーネル関数に対応する適切なスケール値を特定します。変換後のテスト セット newTestTbl
でモデルの精度を計算します。混同行列を使用して結果を可視化します。
Mdl = fitcsvm(newTrainTbl,"Y",KernelFunction="gaussian", ... KernelScale="auto"); testAccuracy = 1 - loss(Mdl,newTestTbl,"Y", ... LossFun="classiferror")
testAccuracy = 0.9189
predictedTestLabels = predict(Mdl,newTestTbl); confusionchart(newTestTbl.Y,predictedTestLabels)
SVM モデルは、ほとんどの観測値を正しく分類しています。つまり、ほとんどの観測値について、SVM モデルで予測されるクラスが真のクラス ラベルに一致しています。
生成された特徴量を使用した交差検証損失の計算
特徴量を生成して線形分類器に学習させます。関数 crossval
を使用して、モデルの交差検証分類誤差を計算します。
ionosphere
データ セットを読み込み、予測子データが含まれている table を作成します。
load ionosphere
Tbl = array2table(X);
層化 5 分割交差検証用に分割を無作為に作成します。
rng("default") % For reproducibility of the partition cvp = cvpartition(Y,KFold=5);
Tbl
内の元の特徴量で学習させた線形モデルについて、交差検証の分類損失を計算します。
CVMdl = fitclinear(Tbl,Y,CVPartition=cvp); cvloss = kfoldLoss(CVMdl)
cvloss = 0.1339
カスタム関数 myloss
(この例の終わりに掲載) を作成します。この関数は、学習データから 20 個の特徴量を生成し、学習セットと同じ変換をテスト データに適用します。その後、線形分類器を学習データに当てはめ、テスト セットの損失を計算します。
メモ: この例のライブ スクリプト ファイルを使用している場合、関数 myloss
は既にファイルの終わりに含まれています。それ以外の場合は、この関数を .m ファイルの終わりに作成するか、MATLAB® パス上のファイルとして追加する必要があります。
Tbl
内の予測子から生成された特徴量で学習させた線形モデルについて、交差検証の分類損失を計算します。
newcvloss = mean(crossval(@myloss,Tbl,Y,Partition=cvp))
newcvloss = 0.0714
function testloss = myloss(TrainTbl,trainY,TestTbl,testY) [Transformer,NewTrainTbl] = gencfeatures(TrainTbl,trainY,20); NewTestTbl = transform(Transformer,TestTbl); Mdl = fitclinear(NewTrainTbl,trainY); testloss = loss(Mdl,NewTestTbl,testY, ... LossFun="classiferror"); end
入力引数
Tbl
— 元の特徴量
テーブル
元の特徴量。table として指定します。Tbl
の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。オプションとして、Tbl
に応答変数用の列を 1 つ追加できます。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できませんが、datetime
、duration
およびさまざまな int
予測子変数は使用できます。
Tbl
に応答変数が含まれている場合にTbl
内の他のすべての変数から新しい特徴量を作成するには、ResponseVarName
を使用して応答変数を指定します。Tbl
に応答変数が含まれている場合にTbl
内の他の変数の一部のみから新しい特徴量を作成するには、formula
を使用して式を指定します。Tbl
に応答変数が含まれていない場合は、Y
を使用して応答変数を指定します。応答変数の長さとTbl
の行数は等しくなければなりません。
データ型: table
ResponseVarName
— 応答変数名
Tbl
内の変数の名前
応答変数の名前。Tbl
内の変数の名前で指定します。
ResponseVarName
には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、応答変数 Y
が Tbl.Y
として格納されている場合、'Y'
として指定します。それ以外の場合、Tbl
の列はすべて予測子として扱われ、Y
から新しい特徴量が作成されることがあります。
データ型: char
| string
q
— 特徴量の個数
正の整数スカラー
特徴量の個数。正の整数スカラーとして指定します。たとえば、q
を 1.5*size(Tbl,2)
のように設定すると、元の特徴量の個数の約 1.5 倍に設定できます。
データ型: single
| double
Y
— 応答変数
数値ベクトル | logical ベクトル | string 配列 | 文字ベクトルの cell 配列 | categorical ベクトル
行に観測値を含む応答変数。数値ベクトル、logical ベクトル、文字配列、string 配列、文字ベクトルの cell 配列、または categorical ベクトルを指定します。Y
および Tbl
は同じ行数である必要があります。
データ型: single
| double
| logical
| string
| cell
| categorical
formula
— 応答変数および予測子変数サブセットの説明モデル
文字ベクトル | string スカラー
応答変数および予測子変数サブセットの説明モデル。"Y~X1+X2+X3"
という形式の文字ベクトルまたは string スカラーを指定します。この式では、Y
は応答変数を、X1
、X2
および X3
は予測子変数を表します。
Tbl
内の予測子変数のサブセットのみから新しい特徴量を作成するには、式を使用します。式を指定した場合、formula
に現れない Tbl
内の変数からは特徴量は作成されません。
式の変数名は Tbl
の変数名 (Tbl.Properties.VariableNames
) であり、有効な MATLAB® 識別子でなければなりません。関数 isvarname
を使用して Tbl
の変数名を検証できます。変数名が有効でない場合、関数 matlab.lang.makeValidName
を使用してそれらを変換できます。
データ型: char
| string
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
例: gencfeatures(Tbl,"Response",10,TargetLearner="bag",FeatureSelection="oob")
は、想定される学習器のタイプをバギング アンサンブル分類器、特徴量の選択方法を out-of-bag 予測子の重要度の手法と指定します。
TargetLearner
— 想定される学習器のタイプ
"linear"
(既定値) | "bag"
| "gaussian-svm"
想定される学習器のタイプ。"linear"
、"bag"
、または "gaussian-svm"
として指定します。このタイプのモデルの学習に使用されることを想定し、それに応じて新しい特徴量が作成および選択されます。
値 | 想定されるモデル |
---|---|
"linear" | ClassificationLinear — バイナリ分類のみに対応。このモデルは、関数 fitclinear を使用して作成できます。 |
"bag" | ClassificationBaggedEnsemble — バイナリ分類とマルチクラス分類に対応。このモデルは、関数 fitcensemble を使用して Method="Bag" を指定することで作成できます。 |
"gaussian-svm" | ClassificationSVM (ガウス カーネルを使用) — バイナリ分類のみに対応。このモデルは、関数 fitcsvm を使用して KernelFunction="gaussian" を指定することで作成できます。予測性能が高いモデルを作成するには、KernelScale="auto" を指定します。 |
既定では、TargetLearner
は "linear"
であり、二項応答変数のみがサポートされます。マルチクラス応答変数があり、新しい特徴量を生成する場合は、TargetLearner
を "bag"
に設定しなければなりません。
例: TargetLearner="bag"
IncludeInputVariables
— Tbl
内の元の特徴量を含める方法
"auto"
(既定値) | "include"
| "select"
| "omit"
Tbl
内の元の特徴量を新しい table NewTbl
に含める方法。次の表のいずれかの値として指定します。
値 | 説明 |
---|---|
"auto" | この値は以下と等価です。
|
"include" | 元の特徴量のうち、ターゲットの学習器で予測子として使用できる特徴量が含められます。次の特徴量は除外されます。
|
"select" | 元の特徴量のうち、ターゲットの学習器でサポートされ、指定された特徴選択方法 (FeatureSelectionMethod ) で重要と見なされる特徴量が含められます。 |
"omit" | 元の特徴量は省略されます。 |
名前と値の引数 TransformedDataStandardization
で指定される標準化方法が NewTbl
に含まれる元の特徴量に適用されることに注意してください。
例: IncludeInputVariables="include"
FeatureSelectionMethod
— 新しい特徴量の選択方法
"auto"
(既定値) | "lasso"
| "oob"
| "nca"
| "mrmr"
新しい特徴量の選択方法。次の表のいずれかの値として指定します。各種の変換を使用して生成される多くの特徴量の中から、この方法を使用して NewTbl
に含める重要な特徴量が選択されます。
値 | 説明 |
---|---|
"auto" | この値は以下と等価です。
|
"lasso" | LASSO 正則化 — 特徴選択を実行するために、 |
"oob" | 並べ替えによる out-of-bag 予測子の重要度の推定 — 特徴選択を実行するために、木のバギング アンサンブルを当てはめ、関数 |
"nca" | 近傍成分分析 (NCA) — 特徴選択を実行するために、
|
"mrmr" | Minimum Redundancy Maximum Relevance (MRMR) — 特徴選択を実行するために、 |
各種の特徴選択手法の詳細については、特徴選択の紹介を参照してください。
例: FeatureSelection="mrmr"
TransformedDataStandardization
— 変換されたデータの標準化方法
"auto"
(既定値) | "zscore"
| "none"
| "mad"
| "range"
変換されたデータの標準化方法。次の表のいずれかの値として指定します。この標準化方法は、設計済みの特徴量および元の特徴量の両方に適用されます。
値 | 説明 |
---|---|
"auto" | この値は以下と等価です。
|
"zscore" | 平均が 0、標準偏差が 1 になるようにセンタリングしてスケーリング |
"none" | 生データを使用 |
"mad" | 中央値が 0、中央絶対偏差が 1 になるようにセンタリングしてスケーリング |
"range" | データの範囲を [0,1] にスケーリング |
例: TransformedDataStandardization="range"
CategoricalEncodingLimit
— カテゴリカル予測子で許容される最大カテゴリ数
非負の整数スカラー | Inf
カテゴリカル予測子で許容される最大カテゴリ数。非負の整数スカラーとして指定します。指定した数を超えるカテゴリがカテゴリカル予測子に含まれている場合、gencfeatures
はその予測子からは新しい特徴量を作成せず、新しい table NewTbl
から予測子を除外します。既定値は、TargetLearner
が "linear"
または "gaussian-svm"
の場合は 50
、TargetLearner
が "bag"
の場合は Inf
です。
例: CategoricalEncodingLimit=20
データ型: single
| double
出力引数
Transformer
— 設計された特徴量の変換器
FeatureTransformer
オブジェクト
設計された特徴量の変換器。FeatureTransformer
オブジェクトとして返されます。設計された特徴量について詳しく確認するには、Transformer
のオブジェクト関数 describe
を使用します。同じ特徴変換を新しいデータ セットに適用するには、Transformer
のオブジェクト関数 transform
を使用します。
NewTbl
— 生成された特徴量
テーブル
生成された特徴量。table として返されます。各行が観測値に対応し、各列が生成された特徴量に対応します。Tbl
に応答変数が含まれている場合、NewTbl
にも応答変数が含まれます。この table を使用して、TargetLearner
のタイプの分類モデルに学習させます。
NewTbl
には、元の特徴量、設計された特徴量 (特徴選択方法によるランク付けに応じて)、応答変数の順に、生成された特徴量が格納されます。
ヒント
既定では、
TargetLearner
が"linear"
または"gaussian-svm"
の場合、数値予測子からの新しい特徴量の生成に z スコアが使用されます (TransformedDataStandardization
を参照)。変換された特徴量の標準化のタイプは変更できます。ただし、"none"
は指定せず、いずれかの標準化の方法を使用することを強くお勧めします。線形モデルおよび SVM モデルの当てはめは、標準化されたデータで最も適切に機能します。予測性能が高い SVM モデルを作成するには、特徴量を生成する際に、
fitcsvm
の呼び出しでKernelScale
を"auto"
として指定します。このように指定すると、SVM カーネル関数に対応する適切なスケール値が特定されます。
バージョン履歴
R2021a で導入R2023a: TargetLearner
が "linear"
または "gaussian-svm"
の場合は欠損値を含むカテゴリカル特徴量が省略される
TargetLearner
が "linear"
または "gaussian-svm"
の場合、関数 gencfeatures
は、IncludeInputVariables
が "include"
と指定されていても、欠損値を含むカテゴリカルの元の特徴量を常に除外します。つまり、これらの特徴量は生成された特徴量の table NewTbl
に含まれません。また、gencfeatures
は、それらの欠損値を含むカテゴリカル特徴量からは特徴量を生成しません。
欠損値を含む元のカテゴリカル特徴量を NewTbl
に含めるには、事前に関数 rmmissing
を使用して、欠損値がある観測値を Tbl
から削除しておきます。
R2023a: カテゴリカル予測子を含むデータ セットから自動生成される特徴量の選択に近傍成分分析 (NCA) を使用する
ガウス カーネルを使用した SVM モデルに学習させる前に、数値予測子とカテゴリカル予測子が混在するデータ セットから新しい特徴量を設計し、新しい特徴量を選択する手法として近傍成分分析 (NCA) を使用できます (FeatureSelectionMethod="nca"
)。gencfeatures
の呼び出しで TargetLearner
を "gaussian-svm"
として指定します。
以前のリリースでは、数値予測子を含むデータ セットに対してのみ NCA 特徴選択手法を使用できました。
R2022a: TargetLearner
が "linear"
または "gaussian-svm"
の場合は NaN
または Inf
の値を含む元の特徴量が省略される
TargetLearner
が "linear"
または "gaussian-svm"
の場合、関数 gencfeatures
は、IncludeInputVariables
が "include"
と指定されていても、NaN
または Inf
の値を含む元の特徴量を常に除外します。つまり、これらの特徴量は生成された特徴量の table NewTbl
に含まれません。また、gencfeatures
は、NaN
値を含む元の特徴量からは特徴量を生成しません。
NaN
値を含む元の特徴量を NewTbl
に含めるには、事前に関数 rmmissing
を使用して、欠損値がある観測値を Tbl
から削除しておきます。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)