ラッパー法でのfunの定義の仕方について

特徴選択を行い、そこで選ばれた因子から順序ロジステックモデルを作ろうと思っています。そこでカスタム基準を使用した逐次特徴選択を使おうと思います。構文はinmodel = sequentialfs(fun,X,y)です。そこでこのfunを定義する必要があると思うのですが、どう定義したら良いですか?
よろしくおねがいします。

回答 (2 件)

michio
michio 2020 年 11 月 19 日

0 投票

の例にある
fun = @(XT,yT,Xt,yt)loss(fitcecoc(XT,yT),Xt,yt);
が fun 定義の一例です。ここでは無名関数として定義していますが、別途関数ファイルに XTRAIN,ytrain,XTEST,ytest を入力とする関数を定義し(例えば myFcn.m)
fun = @myFcn
と定義することもできるかと思います。

7 件のコメント

Ayaka Egashira
Ayaka Egashira 2020 年 11 月 25 日
回答ありがとうございます。
XTRAIN,ytrain,XTEST,ytestにはそれぞれ学習サブセットと検定サブセットを入れると書いてあるんですが、どのようにそのデータを選べばよいですか?
よろしくお願いいたします。
michio
michio 2020 年 11 月 26 日
fun = @(XT,yT,Xt,yt)loss(fitcecoc(XT,yT),Xt,yt);
[fs,history] = sequentialfs(fun,X,y,'cv',c,'options',opts)
というコマンド例がありますが、学習サブセットと検定サブセットは sequentialfs 関数側で入力 X, y を分割しますので、実行時に明示的に分割する必要はありません。
Ayaka Egashira
Ayaka Egashira 2020 年 12 月 10 日
ご回答ありがとうございます。
作成した順序ロジステック回帰モデルの評価として決定係数やAICを用いて行いたいのですが、
にある
「応答変数 miles の順序応答モデルを近似します。
[B,dev,stats] = mnrfit(X,miles,'model','ordinal'); 」
このコマンドの後に
model.Rsquared.Adjusted
このようにうちこんでもエラー文が出ます。
なにか方法はありますでしょうか?
よろしくお願いいたします。
michio
michio 2020 年 12 月 10 日
申し訳ありません、実施されたい事の全容がつかめずエラーの理解に苦慮しております。
mnrfit
を実行された後の
model.Rsquared.Adjusted
でエラーがでるとのことですが、この model とはなんでしょうか?
もし可能であれば何らかのサンプルデータに対して実行でき、エラーも再現できるコードを見せて頂けると助かります。
Ayaka Egashira
Ayaka Egashira 2020 年 12 月 11 日
説明不足で申し訳ございません。
こちら、コードになります。
load imports-85
Y = X(:,15)
X(:,15) = []
mdl = fscnca(X,Y);
figure()
plot(mdl.FeatureWeights,'ro')
grid on
xlabel('Feature index')
ylabel('Feature weight')
% (ここで特徴選択を行う)
X14 = X(:,14)
X25 = X(:,25)
X16 = X(:,16)
X13 = X(:,13)
X12 = X(:,12)
% (特徴選択により選ばれた因子)
Xnew = [ones(size(X14)) X14 X25 X16 X13 X12];
Xnew(:,1)=[];
Ynew = ordinal(Y,{'1','2','3','4'},[],[19,29,39,49,59]);
[B,dev,stats] = mnrfit(Xnew,Ynew,'model','ordinal');
B
[B(1:3)'; repmat(B(4:end),1,3)]
stats.p
model.Rsquared.Adjusted
value = aic(model)
このように打ち込むと、エラー文が置きます。
順序ロジステックモデルを作成し、p値は出るのですが、他の評価方法(自由度調整済み決定係数やAIC)でも
モデルの評価を行いたいと考えています。しかし現段階では他の評価方法ではエラー文が出ます。
その他、不足している情報がございましたらお知らせください。
よろしくお願いいたします。
michio
michio 2020 年 12 月 11 日
(一度以下の”回答”にコメントしましたが削除し、こちらに転記します)
スクリプトを記載頂きありがとうございます。
今回実施されたいのは順序ロジステックモデルを作るにあたって、sequentialfs を使ったカスタム基準による逐次特徴選択であり、ご質問はその為に必要な fun (カスタム基準を返す関数) の定義方法だと理解しております。
今回頂いたコードはそのカスタム基準を返す関数(の一部)ということでしょうか?事前に fscnca により特徴量を選択さておりますが、その選択された中から sequentialfs でさらに絞り込むことを想定されていますか?
頂いたコードだけを拝見するとコード内で model が定義されていないために model.Rsquared.Adjusted との呼び出しにてエラーがでいると見えてしまいますが、いかがでしょうか?
Ayaka Egashira
Ayaka Egashira 2020 年 12 月 11 日
ご回答ありがとうございます。
今回頂いたコードはそのカスタム基準を返す関数(の一部)ということでしょうか?事前に fscnca により特徴量を選択さておりますが、その選択された中から sequentialfs でさらに絞り込むことを想定されていますか?
>sequentialfsを使って特徴選択を行おうと考えていたのですが、funの定義を具体的にどう書けばよいか分からなかったので、fscncaを用いて特徴選択を行いました。
頂いたコードだけを拝見するとコード内で model が定義されていないために model.Rsquared.Adjusted との呼び出しにてエラーがでいると見えてしまいますが、いかがでしょうか?
具体的にどのようにmodelを定義すればよいですか?

サインインしてコメントする。

Ayaka Egashira
Ayaka Egashira 2020 年 12 月 11 日
編集済み: michio 2020 年 12 月 11 日

0 投票

説明不足で申し訳ございません。
こちら、コードになります。
load imports-85
Y = X(:,15)
X(:,15) = []
mdl = fscnca(X,Y);
figure()
plot(mdl.FeatureWeights,'ro')
grid on
xlabel('Feature index')
ylabel('Feature weight')
% (ここで特徴選択を行う)
X14 = X(:,14)
X25 = X(:,25)
X16 = X(:,16)
X13 = X(:,13)
X12 = X(:,12)
% (特徴選択により選ばれた因子)
Xnew = [ones(size(X14)) X14 X25 X16 X13 X12];
Xnew(:,1)=[];
Ynew = ordinal(Y,{'1','2','3','4'},[],[19,29,39,49,59]);
[B,dev,stats] = mnrfit(Xnew,Ynew,'model','ordinal');
B
[B(1:3)'; repmat(B(4:end),1,3)]
stats.p
model.Rsquared.Adjusted
value = aic(model)
このように打ち込むと、エラー文が置きます。
順序ロジステックモデルを作成し、p値は出るのですが、他の評価方法(自由度調整済み決定係数やAIC)でも
モデルの評価を行いたいと考えています。しかし現段階では他の評価方法ではエラー文が出ます。
その他、不足している情報がございましたらお知らせください。
よろしくお願いいたします。

カテゴリ

質問済み:

2020 年 11 月 18 日

コメント済み:

2020 年 12 月 11 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!