MATLAB Answers

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

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

  0 Comments

Sign in to comment.

Answers (2)

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

  7 Comments

Show 4 older comments
Ayaka Egashira
Ayaka Egashira on 11 Dec 2020
説明不足で申し訳ございません。
こちら、コードになります。
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 on 11 Dec 2020
(一度以下の”回答”にコメントしましたが削除し、こちらに転記します)
スクリプトを記載頂きありがとうございます。
今回実施されたいのは順序ロジステックモデルを作るにあたって、sequentialfs を使ったカスタム基準による逐次特徴選択であり、ご質問はその為に必要な fun (カスタム基準を返す関数) の定義方法だと理解しております。
今回頂いたコードはそのカスタム基準を返す関数(の一部)ということでしょうか?事前に fscnca により特徴量を選択さておりますが、その選択された中から sequentialfs でさらに絞り込むことを想定されていますか?
頂いたコードだけを拝見するとコード内で model が定義されていないために model.Rsquared.Adjusted との呼び出しにてエラーがでいると見えてしまいますが、いかがでしょうか?
Ayaka Egashira
Ayaka Egashira on 11 Dec 2020
ご回答ありがとうございます。
今回頂いたコードはそのカスタム基準を返す関数(の一部)ということでしょうか?事前に fscnca により特徴量を選択さておりますが、その選択された中から sequentialfs でさらに絞り込むことを想定されていますか?
>sequentialfsを使って特徴選択を行おうと考えていたのですが、funの定義を具体的にどう書けばよいか分からなかったので、fscncaを用いて特徴選択を行いました。
頂いたコードだけを拝見するとコード内で model が定義されていないために model.Rsquared.Adjusted との呼び出しにてエラーがでいると見えてしまいますが、いかがでしょうか?
具体的にどのようにmodelを定義すればよいですか?

Sign in to comment.


Ayaka Egashira
Ayaka Egashira on 11 Dec 2020
Edited: michio on 11 Dec 2020
説明不足で申し訳ございません。
こちら、コードになります。
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)でも
モデルの評価を行いたいと考えています。しかし現段階では他の評価方法ではエラー文が出ます。
その他、不足している情報がございましたらお知らせください。
よろしくお願いいたします。

  0 Comments

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!